Code archives/3D Graphics - Maths/Align an Object to a Triangle.
This code has been declared by its author to be Public Domain code.
Download source code
| |||||
| This code shows how to Align an Object to a triangle. Thanks go out to: Halo, BlitzSupport, Floyed and Ross C Forum Link: http://www.blitzbasic.com/Community/posts.php?topic=28662 Have Fun!, Rich | |||||
;Alighn object to triangle - By Richard Betson
;www.redeyeware.50megs.com
;vidiot@getgoin.net
;
;Special thanks to Halo, BlitzSupport, Floyed and Ross C
;
;This code shows how to Align an Object to a triangle.
;Use as you see fit :)
;
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<<<<<
Global mesh=CreateMesh()
Global surf=CreateSurface(mesh)
v0=AddVertex(surf,0,1,0)
v1=AddVertex(surf,1,0,0)
v2=AddVertex(surf,-1,0,0)
tri=AddTriangle(surf,v0,v1,v2)
ScaleMesh mesh,3,3,3
PositionEntity mesh,0,-1,0
;-----------------------
Repeat
x()
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 x()
v0 = TriangleVertex (surf, tri, 0)
v1 = TriangleVertex (surf, tri, 1)
v2 = TriangleVertex (surf, tri, 2)
; ---------------------------------------------------------
; Mark's code for backface culling...
; ---------------------------------------------------------
; Vertex positions...
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 cone, TFormedX (), TFormedY (), TFormedZ (), 2,1
End Function
Function TriangleNormal#(Ax#,Ay#,Az#,Bx#,By#,Bz#,Cx#,Cy#,Cz#)
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 |
Comments
None.
Code Archives Forum