[B3D] Twisted Cube
Übersicht

![]() |
Xaymarehemals "Cgamer"Betreff: [B3D] Twisted Cube |
![]() Antworten mit Zitat ![]() |
---|---|---|
Code: [AUSKLAPPEN] ;Twisted Cubes
Function CreateCube_Twisted(StartRot#, EndRot#, DivCount=10, TopBottom=1, Parent=0) Local VList[4], LVList[4] ;Create Mesh/Surface Mesh = CreateMesh(Parent) Surf = CreateSurface(Mesh) ;Get Subdivide Count Local SubDivCount = (EndRot# - StartRot#) / DivCount + 1 ;We dont need Vertex Spam :) If EndRot# < StartRot# SubDivCount = (StartRot# - EndRot#) / DivCount + 1 ;StartRot > EndRot? OK, lets change their positions Local YAddValue# = 2.0/SubDivCount Local RotAddValue# = (EndRot# - StartRot#) / SubDivCount ;Generate Cube:D If TopBottom = 1 ;Bottom VList[1] = AddVertex(Surf, Cos(StartRot#), -1, Sin(StartRot#), 0, 0) VList[2] = AddVertex(Surf, Cos(StartRot#+90), -1, Sin(StartRot#+90), 0, 1) VList[3] = AddVertex(Surf, Cos(StartRot#+180), -1, Sin(StartRot#+180), 1, 1) VList[4] = AddVertex(Surf, Cos(StartRot#+270), -1, Sin(StartRot#+270), 1, 0) AddTriangle Surf, VList[1], VList[2], VList[3] AddTriangle Surf, VList[1], VList[3], VList[4] ;Top VList[1] = AddVertex(Surf, Cos(EndRot#), 1, Sin(EndRot#), 0, 0) VList[2] = AddVertex(Surf, Cos(EndRot#+90), 1, Sin(EndRot#+90), 0, 1) VList[3] = AddVertex(Surf, Cos(EndRot#+180), 1, Sin(EndRot#+180), 1, 1) VList[4] = AddVertex(Surf, Cos(EndRot#+270), 1, Sin(EndRot#+270), 1, 0) AddTriangle Surf, VList[3], VList[2], VList[1] AddTriangle Surf, VList[4], VList[3], VList[1] EndIf Local CurY# = -1 Local CurRot# = 0 For CurSubDiv = 1 To SubDivCount + 1 If CurSubDiv = 1 VList[1] = AddVertex(Surf, Cos(StartRot# + CurRot#), CurY#, Sin(StartRot# + CurRot#), 0, CurY#/2+.5) VList[2] = AddVertex(Surf, Cos(StartRot# + CurRot# + 90), CurY#, Sin(StartRot# + CurRot# + 90), 1, CurY#/2+.5) VList[3] = AddVertex(Surf, Cos(StartRot# + CurRot# + 180), CurY#, Sin(StartRot# + CurRot# + 180), 0, CurY#/2+.5) VList[4] = AddVertex(Surf, Cos(StartRot# + CurRot# + 270), CurY#, Sin(StartRot# + CurRot# + 270), 1, CurY#/2+.5) Else For Vertex = 1 To 4 LVList[Vertex] = VList[Vertex] Next VList[1] = AddVertex(Surf, Cos(StartRot# + CurRot#), CurY#, Sin(StartRot# + CurRot#), 0, CurY#/2+.5) VList[2] = AddVertex(Surf, Cos(StartRot# + CurRot# + 90), CurY#, Sin(StartRot# + CurRot# + 90), 1, CurY#/2+.5) VList[3] = AddVertex(Surf, Cos(StartRot# + CurRot# + 180), CurY#, Sin(StartRot# + CurRot# + 180), 0, CurY#/2+.5) VList[4] = AddVertex(Surf, Cos(StartRot# + CurRot# + 270), CurY#, Sin(StartRot# + CurRot# + 270), 1, CurY#/2+.5) AddTriangle Surf, VList[1], LVList[2], LVList[1] AddTriangle Surf, VList[1], VList[2], LVList[2] AddTriangle Surf, VList[2], LVList[3], LVList[2] AddTriangle Surf, VList[2], VList[3], LVList[3] AddTriangle Surf, VList[3], LVList[4], LVList[3] AddTriangle Surf, VList[3], VList[4], LVList[4] AddTriangle Surf, VList[4], LVList[1], LVList[4] AddTriangle Surf, VList[4], VList[1], LVList[1] EndIf CurY# = CurY# + YAddValue# CurRot# = CurRot# + RotAddValue# Next UpdateNormals Mesh Return Mesh End Function Graphics3D 800,600,32,2 SetBuffer BackBuffer() cam=CreateCamera() MoveEntity cam, 0, 0, -5 light = CreateLight(1, cam) box = CreateCube_Twisted(360, -360, 15) ScaleEntity box, .25, 2, .25 While Not KeyHit(1) Cls TurnEntity box, (KeyDown(17)-KeyDown(31))/2.0, (KeyDown(32)-KeyDown(30))/2.0, 0 RenderWorld Flip Wend End Dieser Code erstellt eine Box die gedreht ist. Sieht ungefähr so aus;) : Je niedriger der Detailgrad ist, desto mehr Vertexe/Polys braucht es. Detailgrad 5 ist ideal für jede Rotationsstärke MfG Cgamer [Update] Nun funktionieren auch Texturen ~Editiert~ Ich hab mal ein "[B3D]" dem Topic angefügt. Bitte zukünftig selbst machen! MfG D2006 |
||
- Zuletzt bearbeitet von Xaymar am So, Mai 10, 2009 23:46, insgesamt einmal bearbeitet
![]() |
ChriseBetreff: Re: Twisted Cube |
![]() Antworten mit Zitat ![]() |
---|---|---|
Lol, das ist mal was witziges. Gefällt mir sehr gut. | ||
Llama 1 Llama 2 Llama 3
Vielen Dank an Pummelie, der mir auf seinem Server einen Platz für LlamaNet bietet. |
![]() |
Xaymarehemals "Cgamer" |
![]() Antworten mit Zitat ![]() |
---|---|---|
Code: [AUSKLAPPEN] ;Twisted Cubes
Function CreateCube_Twisted(StartRot#, EndRot#, DivCount=10, TopBottom=1, Parent=0) Local VList[4], LVList[4] ;Create Mesh/Surface Mesh = CreateMesh(Parent) Surf = CreateSurface(Mesh) ;Get Subdivide Count Local SubDivCount = (EndRot# - StartRot#) / DivCount + 1 ;We dont need Vertex Spam :) If EndRot# < StartRot# SubDivCount = (StartRot# - EndRot#) / DivCount + 1 ;StartRot > EndRot? OK, lets change their positions Local YAddValue# = 2.0/SubDivCount Local RotAddValue# = (EndRot# - StartRot#) / SubDivCount ;Generate Cube:D If TopBottom = 1 ;Bottom VList[1] = AddVertex(Surf, Cos(StartRot#), -1, Sin(StartRot#), 0, 0) VList[2] = AddVertex(Surf, Cos(StartRot#+90), -1, Sin(StartRot#+90), 0, 1) VList[3] = AddVertex(Surf, Cos(StartRot#+180), -1, Sin(StartRot#+180), 1, 1) VList[4] = AddVertex(Surf, Cos(StartRot#+270), -1, Sin(StartRot#+270), 1, 0) AddTriangle Surf, VList[1], VList[2], VList[3] AddTriangle Surf, VList[1], VList[3], VList[4] ;Top VList[1] = AddVertex(Surf, Cos(EndRot#), 1, Sin(EndRot#), 0, 0) VList[2] = AddVertex(Surf, Cos(EndRot#+90), 1, Sin(EndRot#+90), 0, 1) VList[3] = AddVertex(Surf, Cos(EndRot#+180), 1, Sin(EndRot#+180), 1, 1) VList[4] = AddVertex(Surf, Cos(EndRot#+270), 1, Sin(EndRot#+270), 1, 0) AddTriangle Surf, VList[3], VList[2], VList[1] AddTriangle Surf, VList[4], VList[3], VList[1] EndIf Local CurY# = -1 Local CurRot# = 0 For CurSubDiv = 1 To SubDivCount + 1 If CurSubDiv = 1 VList[1] = AddVertex(Surf, Cos(StartRot# + CurRot#), CurY#, Sin(StartRot# + CurRot#), 0, CurY#/2+.5) VList[2] = AddVertex(Surf, Cos(StartRot# + CurRot# + 90), CurY#, Sin(StartRot# + CurRot# + 90), 1, CurY#/2+.5) VList[3] = AddVertex(Surf, Cos(StartRot# + CurRot# + 180), CurY#, Sin(StartRot# + CurRot# + 180), 0, CurY#/2+.5) VList[4] = AddVertex(Surf, Cos(StartRot# + CurRot# + 270), CurY#, Sin(StartRot# + CurRot# + 270), 1, CurY#/2+.5) Else For Vertex = 1 To 4 LVList[Vertex] = VList[Vertex] Next VList[1] = AddVertex(Surf, Cos(StartRot# + CurRot#), CurY#, Sin(StartRot# + CurRot#), 0, CurY#/2+.5) VList[2] = AddVertex(Surf, Cos(StartRot# + CurRot# + 90), CurY#, Sin(StartRot# + CurRot# + 90), 1, CurY#/2+.5) VList[3] = AddVertex(Surf, Cos(StartRot# + CurRot# + 180), CurY#, Sin(StartRot# + CurRot# + 180), 0, CurY#/2+.5) VList[4] = AddVertex(Surf, Cos(StartRot# + CurRot# + 270), CurY#, Sin(StartRot# + CurRot# + 270), 1, CurY#/2+.5) AddTriangle Surf, VList[1], LVList[2], LVList[1] AddTriangle Surf, VList[1], VList[2], LVList[2] AddTriangle Surf, VList[2], LVList[3], LVList[2] AddTriangle Surf, VList[2], VList[3], LVList[3] AddTriangle Surf, VList[3], LVList[4], LVList[3] AddTriangle Surf, VList[3], VList[4], LVList[4] AddTriangle Surf, VList[4], LVList[1], LVList[4] AddTriangle Surf, VList[4], VList[1], LVList[1] EndIf CurY# = CurY# + YAddValue# CurRot# = CurRot# + RotAddValue# Next UpdateNormals Mesh Return Mesh End Function Graphics3D 800,600,32,2 SetBuffer BackBuffer() AntiAlias 1 Dither 1 cam=CreateCamera() MoveEntity cam, 0, 0, -5 light = CreateLight(1, cam) tex = CreateTexture(512, 512, 48) SetBuffer TextureBuffer(tex) Cls Color 255,255,255 Rect 0, 0, 511, 511, 1 Color 0,0,0 Oval 0, 0, 511, 511, 1 SetBuffer BackBuffer() box = CreateCube_Twisted(-360, 360, 1) EntityTexture box, tex ScaleEntity box, 1, 3, 1 white = CreateTexture(1, 1) SetBuffer TextureBuffer(white) Color 255,255,255 Plot 0, 0 SetBuffer BackBuffer() While Not KeyHit(1) Cls TurnEntity box, 0, .1, 0 rot = rot + (KeyDown(17)-KeyDown(31)) rot = rot + (KeyHit(18)-KeyHit(32)) FreeEntity box box = CreateCube_Twisted(-rot, rot, 5) EntityTexture box, tex ScaleEntity box, 1, (rot/180.0) + 1, 1 RenderWorld If KeyDown(16) CameraClsMode cam, 0, 1 WireFrame 1 EntityTexture box, white RenderWorld CameraClsMode cam, 1, 1 WireFrame 0 EntityTexture box, tex EndIf Color 255,255,255 Text 0,0, rot Text 0,15, TrisRendered() Flip Wend End anderes beispiel wo man mit w/d/e/f rotation hoch oder runterschrauben kann. die box scaled mit. q ist wireframe(man kann die verteilung gut sehen:D) |
||
![]() |
ozzi789 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Bei mir kommt nur ein weisser Würfel mit einem schwarzen Loch in jeder Seite (oberer code 1:1 compiliert)
![]() Edit: Huch jetzt hat es funktioniert, naja sieht ganz lustig aus ![]() |
||
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5 |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group