Cube-Octree
Übersicht

BIG BUGBetreff: Cube-Octree |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Fange gerade an, mich ein bisschen mit dem Prinzip von Octrees auseinanderzusetzen und habe mir aus Cubes das mal visualisiert.
Irgendwie schauts ganz lustig aus, deswegen stelle ich das hier mal vor: Code: [AUSKLAPPEN] ;Mit Enter kann man einen neuen Mesh generieren lassen ;Mit der Konstante cDepth wird die Größe eingestellt. Eine Stufe entspricht ;hier der 8-fachen Größe, also vorsichtig hantieren! ;Mit + & - auf dem Numpad kann gezoomed werden, mit den Pfeiltasten gedreht Graphics3D 700,700,32,2 SeedRnd MilliSecs() Const cDepth = 6 Const cCubesPerMesh = 2000 Const KEY_ESC = 1 Const KEY_RETURN = 28 ;generate new mesh Const KEY_SPACE = 57 ;toggle wireframe Const KEY_UP = 200 Const KEY_DOWN = 208 Const KEY_LEFT = 203 Const KEY_RIGHT = 205 Const KEY_NUMPLUS = 78 ;zoom in Const KEY_NUMMINUS = 74 ;zoom out Const KEY_F12 = 88 ;screenshot Global gOctCnt, gCubeCnt, gMeshCnt Global gMap = CreatePivot() Global gMesh.tMesh Type tMesh Field mesh Field cubes End Type buildCube(0) ;Create Camera cam_base=CreatePivot() cam_ctrl=CreatePivot(cam_base) camera=CreateCamera(cam_ctrl) CameraRange camera, 1, 5000 CameraClsColor camera, 0, 0, 0 RotateEntity camera, 0,0,0 PositionEntity camera,0,0,-140 ;Create Light light=CreateLight() RotateEntity light,70,20,45 ;Create Light light=CreateLight() RotateEntity light,-70,50,-45 LightColor light, 90, 90, 90 SetBuffer BackBuffer() time_old = MilliSecs() While Not KeyHit(1) ; Tweening time_new = MilliSecs() time_diff# = (time_new - time_old) / 1000.0 time_old = time_new ; Animation If KeyHit(KEY_SPACE) Then wframe = 1-wframe WireFrame wframe EndIf If KeyHit(KEY_RETURN) Then For m.tMesh = Each tMesh FreeEntity m\mesh Next Delete Each tMesh gOctCnt = 0: gCubeCnt = 0: gMeshCnt = 0 buildCube(0) EndIf ; Camera Movement TurnEntity cam_base,0,(KeyDown(KEY_LEFT)-KeyDown(KEY_RIGHT))*time_diff#*120,0 TurnEntity cam_ctrl, (KeyDown(KEY_UP)-KeyDown(KEY_DOWN))*time_diff#*120,0,0 MoveEntity camera, 0,0,(KeyDown(KEY_NUMPLUS)-KeyDown(KEY_NUMMINUS))*time_diff#*100 ;ZOOM UpdateWorld time_diff# RenderWorld ; Frames Per Second fps_fpscnt% = fps_fpscnt% + 1 fps_new_sec% = MilliSecs() If (fps_new_sec% => fps_old_sec% + 1000) fps_fps% = fps_fpscnt% fps_fpscnt% = 0 fps_old_sec% = fps_new_sec% EndIf Text 0,0, fps_fps% Text 0,20, "VCubeCnt: " + gOctCnt Text 0,40, "CubeCnt: " + gCubeCnt Text 0,60, "MeshCnt: " + gMeshCnt Text 0,80, "TrisRend: " + TrisRendered() Flip 0 If KeyHit(KEY_F12) Then MakeScreenShot$() Wend End Function buildCube(pLevel,x=0,y=0,z=0) Local i Local lCube, lSize Local lx, ly, lz Local hCreateMesh ;calculate size of cube lSize = 1 Shl (cDepth - pLevel) gOctCnt = gOctCnt + 1 ;create new mesh if necessary If gMesh = Null Then gMesh = NewMesh() If gMesh\cubes > cCubesPerMesh Then gMesh = NewMesh() If (pLevel < cDepth And Rand(2) = 1) Or pLevel = 0 For i = 0 To 7 lx = lSize * 0.5 * ((i And 1) * 2 - 1) ly = lSize * 0.5 * ((i And 2) - 1) lz = lSize * 0.5 * ((i And 4) *.5 - 1) buildCube(pLevel + 1, x+lx, y+ly, z+lz) Next Else If Rand(2) = 1 Then lCube = CreateCube() gCubeCnt = gCubeCnt + 1 gMesh\cubes = gMesh\cubes + 1 ScaleMesh lCube, lSize, lSize, lSize PositionMesh lCube, x, y, z AddMesh lCube, gMesh\mesh FreeEntity lCube EndIf EndIf End Function Function NewMesh.tMesh() Local me.tMesh me = New tMesh gMeshCnt = gMeshCnt + 1 me\mesh = CreateMesh(gMap) ;EntityColor me\mesh, Rand(128)+128,Rand(128)+128,Rand(128)+128 Return me End Function Function MakeScreenShot$() Local lPicCnt, lFile$ Repeat lFile$ = "shot" + lPicCnt + ".bmp" lPicCnt = lPicCnt + 1 Until Not FileType (lFile$) SaveBuffer FrontBuffer(), File$ Return lFile$ End Function [edit] Stimmt, es heisst Octree anstatt Octtree... habs mal korrigiert |
||
B3D-Exporter für Cinema4D!(V1.4)
MD2-Exporter für Cinema4D!(final) |
- Zuletzt bearbeitet von BIG BUG am Do, Jun 14, 2007 19:48, insgesamt einmal bearbeitet
gigiBetreff: Wow |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
nicht schlecht,sieht geil aus.Hast du da noch Effekte geaddet die auch noch bei Spielen auftauchen könnten? | ||
Anfänger Tut von mir:
http://www.blitzforum.de/forum...hp?t=26185 |
![]() |
Kernle 32DLL |
![]() Antworten mit Zitat ![]() |
---|---|---|
Sieht geil aus xD
erinnert mich irgentwie an die Außenhaut des unfertigen Todesstern II aus Star Wars Ep. 6 xD |
||
Mein PC: "Bluelight" - Xtreme Gamer PC [Video]
Meine Projekte: Cube-Wars 2010 [Worklog] Anerkennungen: 1. Platz BCC #7 , 1. Platz BCC #22 , 3. Platz BAC #89 Ich war dabei: NRW Treff III, IV ; Frankfurter BB Treffen 2009 |
![]() |
Dottakopf |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ja stimmt sieht echt sehr interessant aus !
Aber wozu braucht man dieses Prinzip ? Was ermöglicht es einem ? mfg Dottakopf |
||
Rechtschreibfehler gelten der allgemeinen Belustigung! |
![]() |
Kernle 32DLL |
![]() Antworten mit Zitat ![]() |
---|---|---|
Man könnte daraus bestimmt ein interessantes Knobelspiel machen ^^ | ||
Mein PC: "Bluelight" - Xtreme Gamer PC [Video]
Meine Projekte: Cube-Wars 2010 [Worklog] Anerkennungen: 1. Platz BCC #7 , 1. Platz BCC #22 , 3. Platz BAC #89 Ich war dabei: NRW Treff III, IV ; Frankfurter BB Treffen 2009 |
![]() |
Goodjee |
![]() Antworten mit Zitat ![]() |
---|---|---|
man könnte zum beipiel einen zerstörbaren würgfel machen, in den man löcher bomben kann, wei in ein wormsterrain... | ||
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
http://de.wikipedia.org/wiki/Octree | ||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group