Code archives/3D Graphics - Mesh/The Open Source Single Surface Quad Library
This code has been declared by its author to be Public Domain code.
Download source code
| The Open Source Single Surface Quad Library Add your own functions to this thread and I'll add them to the source for download. |
;================================================================== ;The Open Source 3D Quad Library ;================================================================== Function QuadAdd%(s%,width#,height#) Local o%,v% v=AddVertex(s,-width#,-height#,0 ,0.0,1.0) AddVertex s,width#,-height#,0 , 1.0,1.0 AddVertex s,-width#,height#,0 , 0.0,0.0 AddVertex s,width#,height#,0 , 1.0,0.0 AddTriangle s,v+0,v+2,v+1 AddTriangle s,v+1,v+2,v+3 For o=0 To 3 VertexNormal s,v+o,0,0,-1 Next Return v End Function Function QuadColor(s%,i%,r%,g%,b%,a#=1.0) Local o% For o=0 To 3 VertexColor s,i+o,r,g,b,a Next End Function Function QuadPosition(s%,i%,x#,y#,z#=0.0) Local dx#,dy#,dz# , o% dx=x-VertexX(s,i) dy=y-VertexY(s,i) dz=z-VertexZ(s,i) For o=0 To 3 VertexCoords s,i+o,VertexX(s,i+o)+dx,VertexY(s,i+o)+dy,VertexZ(s,i+o)+dz Next End Function Function QuadRotate(s,i,x#,y#,z#) For v% = i To i+3 VertexCoords(s,v,(Cos (z#) * VertexX(s,v)) - (Sin (z#) * VertexY(s,v%)),(Sin (z#) * VertexX(s,v)) + (Cos (z#) * VertexY(s,v%)),VertexZ(s,v%)) VertexCoords(s,v,(Cos (y#) * VertexX(s,v)) + (Sin (y#) * VertexZ(s,v%)),VertexY(s,v%),-(Sin (y#) * VertexX(s,v)) + (Cos (y#) * VertexZ(s,v%))) VertexCoords(s,v,VertexX(s,v%),(Cos (x#) * VertexY(s,v%)) - (Sin (x#) * VertexZ(s,v%)) ,(Sin (x#) * VertexY(s,v%)) + (Cos (x#) * VertexZ(s,v%))) Next End Function ;================================================================== ;DEMO ;================================================================== Graphics3D 640,480,0,2 SetBuffer BackBuffer() HidePointer cam=CreateCamera() MoveEntity cam,0,0,-6.5 MoveMouse 320,240 ; container for quads container=CreateMesh() surface=CreateSurface(container) EntityFX container,1+2+32 quad=QuadAdd(surface,1,1) While Not KeyDown(1) If KeyHit(17) ;[W] w=Not w WireFrame w EndIf If KeyDown(57) ; [SPACE] QuadRotate(surface,quad,0,0,1.5) EndIf mx#=mx#+Float(MouseXSpeed())/16.0 my#=my#-Float(MouseYSpeed())/16.0 MoveMouse 320,240 QuadPosition(surface,quad,mx,my,0) RenderWorld Color 100,100,100 Text 20,40,"[MOUSE] = move main quad" Text 20,60,"[SPACE] = rotate main quad" Text 20,80,"[W] = Wireframe" Text 80,130,"Angle# = "+ang# ; reference box Color 200,0,0 Rect 320,140,100,100,0 Flip Wend End |