Module Normalize mesh

Everything related to 3D programming
User avatar
Comtois
Addict
Addict
Posts: 1432
Joined: Tue Aug 19, 2003 11:36 am
Location: Doubs - France

Module Normalize mesh

Post by Comtois »

how to use it ?

In your code replace

Code: Select all

NormalizeMesh(mesh)
by

Code: Select all

Mesh::Normalize(mesh)
that's all

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
Please correct my english
http://purebasic.developpez.com/