[Blitz 3D] gebogener Zylinder-Mesh (Update 07.07.)
Übersicht BlitzBasic Codearchiv
AMYBetreff: [Blitz 3D] gebogener Zylinder-Mesh (Update 07.07.) |
Mi, Jul 05, 2017 2:08 Antworten mit Zitat |
|
---|---|---|
Um die Meshsammlung zu erweitern hier eine Funktion zum erstellen eines gebogenen Zylindermeshes.
[EDIT] Habe die Funktion umbenannt damit diese eindeutiger ist. Zudem gibt es jetzt auch die Möglichkeit einen gebogenen Hohlzylinder zu erstellen. Und hier auch mal ein screen von den Funktionen: Und wie immer freue ich mich über Feedback Code: [AUSKLAPPEN] Graphics3D(1920,1080,32,2)
camera=CreateCamera() camlight=CreateLight(2,camera) LightRange camlight,10 ;########################### ;Die Funtionen erstellen ein RAW-Objekt wie z.B. CreateCube() ;Für eine Texturierung müssen noch die TextureCoords eingegeben werden ;###################################################### ;###################################################### ;Funktionsparameter ;CreateCurvedCylinder(Ringabschnitt 1-360 Grad (in 2 grad schritten), Biegeradius des Zylinders, Radius des Zylinders, optional mit boden) ;########################### Function CreateCurvedCylinder(Abschnitt,Gr,r,bottom=0) CP=CreatePivot() mesh=CreateMesh() surface=CreateSurface(mesh) Local VertexPoints[65000] For T=0 To Abschnitt Step 2 MoveEntity CP,Gr,0,0 For C=0 To 358 Step 2 MoveEntity CP,r,0,0 VertexPoints[T*(360/2)+(C/2)]=AddVertex(surface,EntityX(CP),EntityY(CP),EntityZ(CP)) MoveEntity CP,-r,0,0 TurnEntity CP,0,2,0 Next MoveEntity CP,-Gr,0,0 TurnEntity CP,0,0,2 Next For CreateTris=0 To Abschnitt/2-1 For CreateTris2=0 To 178 AddTriangle(surface,VertexPoints[(CreateTris*360)+CreateTris2],VertexPoints[(CreateTris*360)+CreateTris2+1+360],VertexPoints[(CreateTris*360)+CreateTris2+1]) AddTriangle(surface,VertexPoints[(CreateTris*360)+CreateTris2],VertexPoints[(CreateTris*360)+CreateTris2+360],VertexPoints[(CreateTris*360)+CreateTris2+1+360]) Next Next For CreateTris=0 To Abschnitt/2-1 AddTriangle(surface,VertexPoints[(CreateTris*360)+0],VertexPoints[(CreateTris*360)+360+179],VertexPoints[(CreateTris*360)+360]) AddTriangle(surface,VertexPoints[(CreateTris*360)+0],VertexPoints[(CreateTris*360)+0+179],VertexPoints[(CreateTris*360)+360+179]) Next If bottom=1 Then For I=0 To 178 AddTriangle(surface,VertexPoints[I],VertexPoints[I+1],VertexPoints[0]) AddTriangle(surface,VertexPoints[(Abschnitt*180)+I],VertexPoints[(Abschnitt*180)],VertexPoints[(Abschnitt*180)+I+1]) Next EndIf UpdateNormals mesh Return mesh End Function ;###################################################### ;Funktionsparameter ;CreateCurvedPipe(Ringabschnitt 1-360 Grad (in 2 grad schritten), Biegeradius, Innenradius des Rohrs, Aussenradius des Rohrs) ;########################### Function CreateCurvedPipe(Abschnitt,Gr,Ir,Ar) CP=CreatePivot() mesh=CreateMesh() surface=CreateSurface(mesh) innersurface=CreateSurface(mesh) Local VertexPoints[70000] For T=0 To Abschnitt Step 2 MoveEntity CP,Gr,0,0 For C=0 To 358 Step 2 MoveEntity CP,Ar,0,0 VertexPoints[T*(360/2)+(C/2)]=AddVertex(surface,EntityX(CP),EntityY(CP),EntityZ(CP)) If T=0 Then VertexPoints[66000+C]=AddVertex(surface,EntityX(CP),EntityY(CP),EntityZ(CP)) If T=Abschnitt Then VertexPoints[68000+C]=AddVertex(surface,EntityX(CP),EntityY(CP),EntityZ(CP)) MoveEntity CP,-Ar,0,0 TurnEntity CP,0,2,0 Next MoveEntity CP,-Gr,0,0 TurnEntity CP,0,0,2 Next For CreateTris=0 To Abschnitt/2-1 For CreateTris2=0 To 178 AddTriangle(surface,VertexPoints[(CreateTris*360)+CreateTris2],VertexPoints[(CreateTris*360)+CreateTris2+1+360],VertexPoints[(CreateTris*360)+CreateTris2+1]) AddTriangle(surface,VertexPoints[(CreateTris*360)+CreateTris2],VertexPoints[(CreateTris*360)+CreateTris2+360],VertexPoints[(CreateTris*360)+CreateTris2+1+360]) Next Next For CreateTris=0 To Abschnitt/2-1 AddTriangle(surface,VertexPoints[(CreateTris*360)+0],VertexPoints[(CreateTris*360)+360+179],VertexPoints[(CreateTris*360)+360]) AddTriangle(surface,VertexPoints[(CreateTris*360)+0],VertexPoints[(CreateTris*360)+0+179],VertexPoints[(CreateTris*360)+360+179]) Next RotateEntity CP,0,0,0 weiter=0 For T=weiter To weiter+Abschnitt Step 2 MoveEntity CP,Gr,0,0 For C=0 To 358 Step 2 MoveEntity CP,Ir,0,0 VertexPoints[T*(360/2)+(C/2)]=AddVertex(innersurface,EntityX(CP),EntityY(CP),EntityZ(CP)) If T=0 Then VertexPoints[67000+C]=AddVertex(surface,EntityX(CP),EntityY(CP),EntityZ(CP)) If T=Abschnitt Then VertexPoints[69000+C]=AddVertex(surface,EntityX(CP),EntityY(CP),EntityZ(CP)) MoveEntity CP,-Ir,0,0 TurnEntity CP,0,2,0 Next MoveEntity CP,-Gr,0,0 TurnEntity CP,0,0,2 Next For CreateTris=weiter To Abschnitt/2-1 For CreateTris2=weiter To 178 AddTriangle(innersurface,VertexPoints[(CreateTris*360)+CreateTris2],VertexPoints[(CreateTris*360)+CreateTris2+1],VertexPoints[(CreateTris*360)+CreateTris2+1+360]) AddTriangle(innersurface,VertexPoints[(CreateTris*360)+CreateTris2],VertexPoints[(CreateTris*360)+CreateTris2+1+360],VertexPoints[(CreateTris*360)+CreateTris2+360]) Next Next For CreateTris=weiter To weiter+(Abschnitt/2-1) AddTriangle(innersurface,VertexPoints[(CreateTris*360)+0],VertexPoints[(CreateTris*360)+360],VertexPoints[(CreateTris*360)+360+179]) AddTriangle(innersurface,VertexPoints[(CreateTris*360)+0],VertexPoints[(CreateTris*360)+360+179],VertexPoints[(CreateTris*360)+0+179]) Next For Front=66000 To 66356 Step 2 AddTriangle(surface,VertexPoints[Front],VertexPoints[Front+2],VertexPoints[Front+1000]) AddTriangle(surface,VertexPoints[Front+1000],VertexPoints[Front+2],VertexPoints[Front+1002]) Next For Front=68000 To 68356 Step 2 AddTriangle(surface,VertexPoints[Front],VertexPoints[Front+1000],VertexPoints[Front+2]) AddTriangle(surface,VertexPoints[Front+1000],VertexPoints[Front+1002],VertexPoints[Front+2]) Next AddTriangle(surface,VertexPoints[66358],VertexPoints[66000],VertexPoints[67358]) AddTriangle(surface,VertexPoints[67000],VertexPoints[67358],VertexPoints[66000]) AddTriangle(surface,VertexPoints[68358],VertexPoints[69358],VertexPoints[68000]) AddTriangle(surface,VertexPoints[69000],VertexPoints[68000],VertexPoints[69358]) UpdateNormals mesh EntityFX mesh,2 Return mesh End Function ;###################################################### ; ;Die folgenden Codezeilen sind nur zur einfachen Demonstration gedacht ; ;########################### ; ;WASD - Bewegen ;1 (Zahlenleiste) - Wireframe-Umschaltung ; ;###################################################### a=CreateCurvedCylinder(120,10,3) b=CreateCurvedCylinder(120,10,3,1) c=CreateCurvedPipe(270,10,8,9) PositionEntity a,0,0,0 PositionEntity b,0,0,10 PositionEntity c,0,0,20 Repeat Movement(camera,1,0.1) If KeyHit(2) Then WFMode=1-WFMode WireFrame WFMode RenderWorld Text 0,0,TrisRendered() Flip Until KeyDown(1) End Function Movement(camera,speedfast#=3,speedslow#=1) mspeedx=MouseXSpeed() mspeedy=MouseYSpeed() msensivityX#=mspeedx/2 msensivityY#=mspeedy/2 If mspeedy<>0 Then TurnEntity camera,msensivityy,0 ,0 If mspeedx<>0 Then TurnEntity camera,0,-msensivityX,0 If KeyDown(54) Or KeyDown(42) Then movespeed#=speedslow Else movespeed=speedfast If KeyDown(32)=True Then MoveEntity camera, movespeed, 0, 0;205 If KeyDown(30)=True Then MoveEntity camera,-movespeed, 0, 0;203 If KeyDown(201)=True Then MoveEntity camera, 0, movespeed, 0;201 If KeyDown(209)=True Then MoveEntity camera, 0,-movespeed, 0;209 If KeyDown(31)=True Then MoveEntity camera, 0, 0,-movespeed;208 If KeyDown(17)=True Then MoveEntity camera, 0, 0, movespeed;200 MoveMouse 512,384 End Function ; |
||
Übersicht BlitzBasic Codearchiv
Powered by phpBB © 2001 - 2006, phpBB Group