3
//#define float3 float4
5
/*float length3(float3 a)
11
float normalize3(float3 a)
18
ResetNormalsAndAreasKernel(
19
const unsigned int numNodes,
20
__global float4 * g_vertexNormals,
21
__global float * g_vertexArea)
23
if( get_global_id(0) < numNodes )
25
g_vertexNormals[get_global_id(0)] = (float4)(0.0f, 0.0f, 0.0f, 0.0f);
26
g_vertexArea[get_global_id(0)] = 0.0f;
31
UpdateSoftBodiesKernel(
32
const unsigned int startFace,
33
const unsigned int numFaces,
34
__global int4 * g_triangleVertexIndexSet,
35
__global float4 * g_vertexPositions,
36
__global float4 * g_vertexNormals,
37
__global float * g_vertexArea,
38
__global float4 * g_triangleNormals,
39
__global float * g_triangleArea)
41
int faceID = get_global_id(0) + startFace;
42
if( get_global_id(0) < numFaces )
44
int4 triangleIndexSet = g_triangleVertexIndexSet[ faceID ];
45
int nodeIndex0 = triangleIndexSet.x;
46
int nodeIndex1 = triangleIndexSet.y;
47
int nodeIndex2 = triangleIndexSet.z;
49
float3 node0 = g_vertexPositions[nodeIndex0].xyz;
50
float3 node1 = g_vertexPositions[nodeIndex1].xyz;
51
float3 node2 = g_vertexPositions[nodeIndex2].xyz;
52
float3 nodeNormal0 = g_vertexNormals[nodeIndex0].xyz;
53
float3 nodeNormal1 = g_vertexNormals[nodeIndex1].xyz;
54
float3 nodeNormal2 = g_vertexNormals[nodeIndex2].xyz;
55
float vertexArea0 = g_vertexArea[nodeIndex0];
56
float vertexArea1 = g_vertexArea[nodeIndex1];
57
float vertexArea2 = g_vertexArea[nodeIndex2];
59
float3 vector0 = node1 - node0;
60
float3 vector1 = node2 - node0;
62
float3 faceNormal = cross(vector0.xyz, vector1.xyz);
63
float triangleArea = length(faceNormal);
65
nodeNormal0 = nodeNormal0 + faceNormal;
66
nodeNormal1 = nodeNormal1 + faceNormal;
67
nodeNormal2 = nodeNormal2 + faceNormal;
68
vertexArea0 = vertexArea0 + triangleArea;
69
vertexArea1 = vertexArea1 + triangleArea;
70
vertexArea2 = vertexArea2 + triangleArea;
72
g_triangleNormals[faceID] = (float4)(normalize(faceNormal), 0.f);
73
g_vertexNormals[nodeIndex0] = (float4)(nodeNormal0, 0.f);
74
g_vertexNormals[nodeIndex1] = (float4)(nodeNormal1, 0.f);
75
g_vertexNormals[nodeIndex2] = (float4)(nodeNormal2, 0.f);
76
g_triangleArea[faceID] = triangleArea;
77
g_vertexArea[nodeIndex0] = vertexArea0;
78
g_vertexArea[nodeIndex1] = vertexArea1;
79
g_vertexArea[nodeIndex2] = vertexArea2;
84
NormalizeNormalsAndAreasKernel(
85
const unsigned int numNodes,
86
__global int * g_vertexTriangleCount,
87
__global float4 * g_vertexNormals,
88
__global float * g_vertexArea)
90
if( get_global_id(0) < numNodes )
92
float4 normal = g_vertexNormals[get_global_id(0)];
93
float area = g_vertexArea[get_global_id(0)];
94
int numTriangles = g_vertexTriangleCount[get_global_id(0)];
96
float vectorLength = length(normal);
98
g_vertexNormals[get_global_id(0)] = normalize(normal);
99
g_vertexArea[get_global_id(0)] = area/(float)(numTriangles);
b'\\ No newline at end of file'