i try to find the normals from a set of connected nodes with this code:
the red lines are the normals i calculate, but they are (obviously) wrong. i've been staring at this too long to be able to concentrate on this anymore. does anyone know what i am doing wrong?
thanks!
Graphics3D(640,480,16,2) SetBuffer(BackBuffer()) Function createLine(x1#,y1#,z1#, x2#,y2#,z2#, mesh=0) If mesh = 0 Then mesh=CreateMesh() EntityFX(mesh,16) surf=CreateSurface(mesh) verts = 0 Else surf = GetSurface(mesh,1) verts = CountVertices(surf) End If AddVertex surf,x1#,y1#,z1#,0,0 AddVertex surf,x2#,y2#,z2#,1,1 AddTriangle surf,verts,verts+1,verts Return mesh End Function Type node Field x#,y#,z# Field links.node[5] Field nLinks End Type Function node.node(x#,y#,z#) n.node = New node n\x# = x# n\y# = y# n\z# = z# Return n End Function n0.node = node(0,0,0) n1.node = node(1,0,0) n2.node = node(0,1,0) n3.node = node(0,0,1) n4.node = node(1,1,0) n5.node = node(0,1,1) n6.node = node(1,0,1) n7.node = node(1,1,1) n0\links[0] = n1 n0\links[1] = n2 n0\links[2] = n3 n0\nLinks = 3 n1\links[0] = n0 n1\links[1] = n4 n1\links[2] = n6 n1\nLinks = 3 n2\links[0] = n0 n2\links[1] = n5 n2\links[2] = n4 n2\nLinks = 3 n3\links[0] = n5 n3\links[1] = n6 n3\links[2] = n0 n3\nLinks = 3 n4\links[0] = n1 n4\links[1] = n7 n4\links[2] = n2 n4\nLinks = 3 n5\links[0] = n7 n5\links[1] = n3 n5\links[2] = n2 n5\nLinks = 3 n6\links[0] = n7 n6\links[1] = n1 n6\links[2] = n3 n6\nLinks = 3 n7\links[0] = n5 n7\links[1] = n6 n7\links[2] = n4 n7\nLinks = 3 For n.node = Each node nx# = 0 ny# = 0 nz# = 0 v0x# = n\x# v0y# = n\y# v0z# = n\z# DebugLog "new normal at: ("+ v0x +","+ v0y +","+ v0z +")" For i = 0 To (n\nLinks-1) If i = n\nLinks-1 v1x# = n\links[0]\x# v1y# = n\links[0]\y# v1z# = n\links[0]\z# v2x# = n\links[i]\x# v2y# = n\links[i]\y# v2z# = n\links[i]\z# Else v1x# = n\links[i+1]\x# v1y# = n\links[i+1]\y# v1z# = n\links[i+1]\z# v2x# = n\links[i]\x# v2y# = n\links[i]\y# v2z# = n\links[i]\z# EndIf px# = v1x#-v0x# py# = v1y#-v0y# pz# = v1z#-v0z# qx# = v2x#-v0x# qy# = v2y#-v0y# qz# = v2z#-v0z# ;--- connection = createLine(v0x#,v0y#,v0z#, v1x#,v1y#,v1z#) connection = createLine(v0x#,v0y#,v0z#, v2x#,v2y#,v2z#,connection) EntityColor(connection, 0,0,0) ;--- ; cross product tx# = (py#*qz# - pz#*qy#) ty# = (pz#*qx# - px#*qz#) tz# = (px#*qy# - py#*qx#) nx# = nx# + tx# ny# = ny# + ty# nz# = nz# + tz# Next l# = Sqr(nx#*nx# + ny#*ny# + nz#*nz#) nx# = nx#/l# ny# = ny#/l# nz# = nz#/l# DebugLog " normal -> " +nx# + ", " + ny# + ", " +nz# normal = createLine(n\x#,n\y#,n\z#, n\x#+nx#,n\y#+ny#,n\z#+nz#) EntityColor(normal, 255,0,0) Next campiv = CreatePivot() camera=CreateCamera(campiv) MoveEntity(camera, 0,0,-3) PositionEntity(campiv, 0.5,0.5,0.5) CameraClsColor(camera, 255,255,255) l=CreateLight() WireFrame(1) While Not KeyHit(1) RotateEntity(campiv, -MouseY(), MouseX(), 0) RenderWorld() Flip() Wend
the red lines are the normals i calculate, but they are (obviously) wrong. i've been staring at this too long to be able to concentrate on this anymore. does anyone know what i am doing wrong?
thanks!