In your code replace
Code: Select all
NormalizeMesh(mesh)Code: Select all
Mesh::Normalize(mesh)Code: Select all
DeclareModule Mesh
Declare Normalize(Mesh)
EndDeclareModule
Module Mesh
Structure Vector3
x.f
y.f
z.f
EndStructure
Macro SubVector3(n, v, w)
n\x = v\x - w\x
n\y = v\y - w\y
n\z = v\z - w\z
EndMacro
Procedure NormalizeVector(*V.Vector3)
Define.f magSq, oneOverMag
magSq = *V\x * *V\x + *V\y * *V\y + *V\z * *V\z
If magsq > 0
oneOverMag = 1.0 / Sqr(magSq)
*V\x * oneOverMag
*V\y * oneOverMag
*V\z * oneOverMag
EndIf
EndProcedure
Procedure Normalize(Mesh)
Protected i, j
Dim Vertex.PB_MeshVertex(0)
Dim Face.PB_MeshFace(0)
Protected.Vector3 v2v1, v3v1, v1,v2,v3,n
For j=0 To SubMeshCount(mesh)-1
GetMeshData(Mesh, j, Vertex(), #PB_Mesh_Vertex | #PB_Mesh_Normal , 0, MeshVertexCount(Mesh)-1)
GetMeshData(Mesh, j, Face(), #PB_Mesh_Face , 0, MeshIndexCount(Mesh)-1)
For i = 0 To ArraySize(Vertex())
Vertex(i)\NormalX = 0
Vertex(i)\NormalY = 0
Vertex(i)\NormalZ = 0
Next
For i = 0 To ArraySize(Face()) Step 3
v1\x = Vertex(Face(i)\Index)\x
v1\y = Vertex(Face(i)\Index)\y
v1\z = Vertex(Face(i)\Index)\z
v2\x = Vertex(Face(i+1)\Index)\x
v2\y = Vertex(Face(i+1)\Index)\y
v2\z = Vertex(Face(i+1)\Index)\z
v3\x = Vertex(Face(i+2)\Index)\x
v3\y = Vertex(Face(i+2)\Index)\y
v3\z = Vertex(Face(i+2)\Index)\z
SubVector3(v2v1, v2, v1)
SubVector3(v3v1, v3, v1)
n\x = v2v1\y * v3v1\z - v2v1\z * v3v1\y
n\y = v2v1\z * v3v1\x - v2v1\x * v3v1\z
n\z = v2v1\x * v3v1\y - v2v1\y * v3v1\x
NormalizeVector(@n)
Vertex(Face(i)\Index)\NormalX + n\x
Vertex(Face(i)\Index)\NormalY + n\y
Vertex(Face(i)\Index)\NormalZ + n\z
Vertex(Face(i+1)\Index)\NormalX + n\x
Vertex(Face(i+1)\Index)\NormalY + n\y
Vertex(Face(i+1)\Index)\NormalZ + n\z
Vertex(Face(i+2)\Index)\NormalX + n\x
Vertex(Face(i+2)\Index)\NormalY + n\y
Vertex(Face(i+2)\Index)\NormalZ + n\z
Next
For i = 0 To ArraySize(Vertex())
n\x = Vertex(i)\NormalX
n\y = Vertex(i)\NormalY
n\z = Vertex(i)\NormalZ
NormalizeVector(@n)
Vertex(i)\NormalX = n\x
Vertex(i)\NormalY = n\y
Vertex(i)\NormalZ = n\z
Next
SetMeshData(mesh,j,Vertex(),#PB_Mesh_Vertex | #PB_Mesh_Normal , 0, MeshVertexCount(Mesh)-1)
Next
EndProcedure
EndModule