AsignToTriangle Code

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

tft

Betreff: AsignToTriangle Code

BeitragDo, Apr 05, 2007 17:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo ....

Ich habe mir nach etlichem suchen im Internet volgenden Code zusammen geschustert.

Code: [AUSKLAPPEN]

Global vectorx#
Global vectory#
Global vectorz#
Global vectorw#

Graphics3D 640, 480, 0, 2
AppTitle "Use Arrow Keys to turn"

cam = CreateCamera ()
MoveEntity cam, 0, 0, -10

Global cone = CreateCone ()
EntityColor cone, 0, 0, 255

light = CreateLight ()
MoveEntity light, -50, -5, 10

mesh=CreateCube()

ScaleMesh mesh,.5,.5,.5
PositionEntity mesh,0,-1,0

surf=GetSurface(mesh,1)
anzTri=CountTriangles(surf)-1

Repeat

   If KeyHit(2) Then tri=tri+1
   If tri>anzTri Then tri=0
   
   AlignToTriangle(cone,mesh,surf,tri)
      
   If KeyDown (203) TurnEntity mesh, 0, -1, 0, 1
   If KeyDown (205) TurnEntity mesh, 0, 1, 0, 1
   If KeyDown (200) TurnEntity mesh, 1, 0, 0
   If KeyDown (208) TurnEntity mesh, -1, 0, 0

   RenderWorld
   Flip
   
Until KeyHit (1)

End


Function AlignToTriangle(obj,mesh,surf,tri=0)

   Local v0,v1,v2
   Local d#,x0#,y0#,z0#,x1#,y1#,z1#,x2#,y2#,z2#
   
   v0 = TriangleVertex (surf, tri, 0)
   v1 = TriangleVertex (surf, tri, 1)
   v2 = TriangleVertex (surf, tri, 2)

    x0# = VertexX (surf, v0)
   y0# = VertexY (surf, v0)
   z0# = VertexZ (surf, v0)
   
    x1# = VertexX (surf, v1)
   y1# = VertexY (surf, v1)
   z1# = VertexZ (surf, v1)
   
    x2# = VertexX (surf, v2)
   y2# = VertexY (surf, v2)
   z2# = VertexZ (surf, v2)

   d#=TriangleNormal#(x0#,y0#,z0#,x1#,y1#,z1#,x2#,y2#,z2#)
   TFormVector vectorx, vectory, vectorz,mesh,0
   AlignToVector obj, TFormedX (), TFormedY (), TFormedZ (), 2,.05

End Function


Function TriangleNormal#(Ax#,Ay#,Az#,Bx#,By#,Bz#,Cx#,Cy#,Cz#)
   Local ux#,uy#,uz#,vx#,vy#,vz#
   
   SubVector Bx#,By#,Bz#,Ax#,Ay#,Az#
   ux#=VectorX()
   uy#=VectorY()
   uz#=VectorZ()
   SubVector Cx#,Cy#,Cz#,Bx#,By#,Bz#
   vx#=VectorX()
   vy#=VectorY()
   vz#=VectorZ()
   CrossProduct vx#,vy#,vz#,ux#,uy#,uz#
   Normalize vectorx,vectory,vectorz
   Return Ax#*vectorx+Ay#*vectory+Az#*vectorz
End Function

Function VectorX#()
   Return vectorx
End Function

Function VectorY#()
   Return vectory
End Function

Function VectorZ#()
   Return vectorz
End Function

Function VectorW#()
   Return vectorw
End Function

Function SubVector(Ax#,Ay#,Az#,Bx#,By#,Bz#)
   vectorx#=ax#-bx#
   vectory#=ay#-by#
   vectorz#=az#-bz#
End Function

Function Normalize(nx#,ny#,nz#)
   If nx=0 And ny=0 And nz=0 Return
   m#=Magnitude(nx#,ny#,nz#)
   vectorx#=nx#/m#
   vectory#=ny#/m#
   vectorz#=nz#/m#
End Function

Function CrossProduct(Ax#,Ay#,Az#,Bx#,By#,Bz#)
   vectorx#=Ay#*Bz#-Az#*By#
   vectory#=Az#*Bx#-Ax#*Bz#
   vectorz#=Ax#*By#-Ay#*Bx#
End Function


Function Magnitude(nx#,ny#,nz#)
   m#= Sqr( (nx*nx) + (ny*ny) + (nz*nz) )
   Return m#
End Function


Sinn der Sache ist es , ein Object nach einer Fläche auszurichten. Das funktioniert auch . Aber das ist mir fiel zu umständlich. Gibt es nicht einen einfacheren weg.
TFT
https://www.sourcemagic.ch
Monkey,HTML5,CSS3,W 10 64 Bit, 32 GB Ram, GTX Titan, W8 ist Müll !!!!!!

Mr.Keks

BeitragDo, Apr 05, 2007 19:06
Antworten mit Zitat
Benutzer-Profile anzeigen
entsprechende stelle am mesh picken, ql:pickednx()yz nutzen und daran alignen?
MrKeks.net

tft

BeitragDo, Apr 05, 2007 20:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi ....

ne .... das funktioniert nur grob. Und macht bei Z=0 nur einen Roll wirbel.
TFT
https://www.sourcemagic.ch
Monkey,HTML5,CSS3,W 10 64 Bit, 32 GB Ram, GTX Titan, W8 ist Müll !!!!!!

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group