"Echtzeit"-LOD?

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

FireballFlame

Betreff: "Echtzeit"-LOD?

BeitragDo, Dez 07, 2006 16:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hab grad mal gesucht, und nix gefunden ... kennt jemand Blitz3D-Codes/DLLs/Tutorials für "Echtzeit"-LOD für Meshes?
Ich meine damit, dass man nicht selbst verschieden detaillierte Modelle bastenl muss, sondern das während des Programmablaufs automatisch geschieht, ungefähr so wie mit Terrains?
Wär nett, danke ^^
PC: Intel Core i7 @ 4x2.93GHz | 6 GB RAM | Nvidia GeForce GT 440 | Desktop 2x1280x1024px | Windows 7 Professional 64bit
Laptop: Intel Core i7 @ 4x2.00GHz | 8 GB RAM | Nvidia GeForce GT 540M | Desktop 1366x768px | Windows 7 Home Premium 64bit

aMul

Sieger des Minimalist Compo 01/13

BeitragDo, Dez 07, 2006 16:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Sowas ist generell nicht zu empfehlen, da es ersten langsam ist und zweitens auch mal Polys zusammengefasst werden, die für das Mesh sehr wichtig sind(vor allem bei Low-Poly der Fall).

Wenn du es aber unbedingt benutzen möchtest, will ich dich nicht davon abhalten. Ich hatte so einen Code mal irgendwo rumliegen, wenn ich ihn finde poste ich ihn.
Panic Pong - ultimate action mashup of Pong and Breakout <= aktives Spiele-Projekt, Downloads mit vielen bunten Farben!
advASCIIdraw - the advanced ASCII art program <= aktives nicht-Spiele-Projekt, must-have für ASCII/roguelike/dungeon-crawler fans!
Alter BB-Kram: ThroughTheAsteroidBelt - mit Quelltext! | RGB-Palette in 32²-Textur / Farbige Beleuchtung mit Dot3 | Stereoskopie in Blitz3D | Teleport-Animation Screensaver

FireballFlame

BeitragDo, Dez 07, 2006 16:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich glaub, es gab irgendwo in den B3D-Demoprogrammen sowas, aber das arbeitete nicht grad toll...
PC: Intel Core i7 @ 4x2.93GHz | 6 GB RAM | Nvidia GeForce GT 440 | Desktop 2x1280x1024px | Windows 7 Professional 64bit
Laptop: Intel Core i7 @ 4x2.00GHz | 8 GB RAM | Nvidia GeForce GT 540M | Desktop 1366x768px | Windows 7 Home Premium 64bit

aMul

Sieger des Minimalist Compo 01/13

BeitragDo, Dez 07, 2006 16:21
Antworten mit Zitat
Benutzer-Profile anzeigen
So, ich habs gefunden. Ist aber nicht wirklich das wahre...
Erstell die unterschiedlichen Detailstufen lieber im Voraus. Das sieht nicht nur besser aus, sondern ist, wie schon erwähnt, auch schneller.
Code: [AUSKLAPPEN]
Graphics3D 640,480,0,2
SetBuffer BackBuffer()
lit=CreateLight()

cam=CreateCamera()
CameraRange cam,1,1000
PositionEntity cam,0,0,-3

mesh=CreateSphere(8)

Get_Data(mesh)

WireFrame 1

While Not KeyDown(1)
   TurnEntity mesh,0,1,0

   If KeyDown(57) Then mesh=Create_New_Mesh(mesh,1)
   
   tri_s=CountTriangles(GetSurface(mesh,CountSurfaces(mesh)))
   UpdateWorld
   RenderWorld
   Text 0,16,"Press space to reduce triangles in mesh"
   Text 0,32,"Current triangle count="+tri_s
   Flip
Wend

FreeEntity cam
EndGraphics
End

Type vert
   Field x#
   Field y#
   Field z#
   Field u#
   Field v#
   Field oindex
   Field index
   Field nindex
   Field use
   Field cost#
   Field nei.vert
End Type

Type tri
   Field ind[3]
   Field mv[2]
   Field index
   Field tcost#
   Field use
End Type

Function Get_Data(mesh)
   surf=GetSurface(mesh,CountSurfaces(mesh))
   For index=0 To CountVertices(surf)-1
      a.vert=New vert
      a\index=index
      a\oindex=index
      a\use=True
      a\cost=1000000
      a\x=VertexX(surf,index)
      a\y=VertexY(surf,index)
      a\z=VertexZ(surf,index)
      a\u=VertexU(surf,index)
      a\v=VertexV(surf,index)
   Next
   For index=0 To CountTriangles(surf)-1
      b.tri=New tri
      b\use=True
      For c=0 To 2
         b\ind[c]=TriangleVertex(surf,index,c)
      Next
      Get_Tri_Cost#(b)
      cnt=cnt+1
      b\index=index
   Next
   
End Function

Function Find_Vert.vert(index)
   For a.vert=Each vert
      If a\index=index Then Return a
   Next
   Return Null
End Function

Function Create_New_Mesh(mesh,red)
   For it=1 To red
      del.tri=Get_Lowest_Cost_Tri()
      If del<>Null Then
         del\use=False
         reindex_tris(del\ind[del\mv[0]],del\ind[del\mv[1]])
      End If
   Next
   ;find the lowest cost (used vert)
   rol#=EntityRoll(mesh)
   pit#=EntityPitch(mesh)
   yaw#=EntityYaw(mesh)
   px#=EntityX(mesh,True)
   py#=EntityY(mesh,True)
   pz#=EntityZ(mesh,True)

   surf=GetSurface(mesh,1)
   ClearSurface surf,False,True

   For b.tri=Each tri
      If b\use=True Then
         AddTriangle surf,b\ind[0],b\ind[1],b\ind[2]
      End If
   Next
   UpdateNormals mesh
   RotateEntity mesh,pit,yaw,rol
   PositionEntity mesh,px,py,pz
   Return mesh
End Function

Function Get_Lowest_Cost_Tri.tri()
   cost#=100000
   pnt.tri=Null
   For a.tri=Each tri
      If a\use=True Then
         If a\tcost<cost Then
            cost=a\tcost
            pnt.tri=a
         End If
      End If
   Next
   Return pnt.tri
End Function

Function ReIndex_Tris(oldtri,newtri)
   For a.tri=Each tri
      p=0
      If a\ind[0]=oldtri Then a\ind[0]=newtri:p=1
      If a\ind[1]=oldtri Then a\ind[1]=newtri:p=1
      If a\ind[2]=oldtri Then a\ind[2]=newtri:p=1
      If p=1 Then Get_Tri_Cost(a)
   Next
End Function

Function Get_Tri_Cost#(a.tri)
   v0.vert=Find_Vert(a\ind[0])
   v1.vert=Find_Vert(a\ind[1])
   v2.vert=Find_Vert(a\ind[2])
   x0#=v0\x:y0#=v0\y:z0#=v0\z
   x1#=v1\x:y1#=v1\y:z1#=v1\z
   x2#=v2\x:y2#=v2\y:z2#=v2\z
   coord0#=Sqr((x0-x1)^2+(y0-y1)^2+(z0-z1)^2)
   coord1#=Sqr((x1-x2)^2+(y1-y2)^2+(z1-z2)^2)
   coord2#=Sqr((x2-x0)^2+(y2-y0)^2+(z2-z0)^2)
   
   If coord0<coord1 And coord0<coord2 Then p=0
   If coord1<coord0 And coord1<coord2 Then p=1
   If coord2<coord0 And coord2<coord1 Then p=2
   Select p
      Case 0
         a\mv[0]=1:a\mv[1]=0
      Case 1
         a\mv[0]=2:a\mv[1]=1
      Case 2
         a\mv[0]=0:a\mv[1]=2
   End Select
   a\tcost=coord1+coord2+coord3
   Return a\tcost
End Function
Panic Pong - ultimate action mashup of Pong and Breakout <= aktives Spiele-Projekt, Downloads mit vielen bunten Farben!
advASCIIdraw - the advanced ASCII art program <= aktives nicht-Spiele-Projekt, must-have für ASCII/roguelike/dungeon-crawler fans!
Alter BB-Kram: ThroughTheAsteroidBelt - mit Quelltext! | RGB-Palette in 32²-Textur / Farbige Beleuchtung mit Dot3 | Stereoskopie in Blitz3D | Teleport-Animation Screensaver

Black Spider

BeitragDo, Dez 07, 2006 17:26
Antworten mit Zitat
Benutzer-Profile anzeigen
hmm, die intelligenteste möglichkeit wäre die,
die auch Valve in seinen Spielen benutzt.
Valve erstellt ca. 5 Meshes.
Eins mit 100% Polygonen, eins mit 85%, eins mit 60%, 40% und zuletzt 12%.
Wenn das Mesh weit weg ist,
wird es durch das Low-Poly-double ausgetauscht. Das sieht man dann nicht, da es elegant gemacht ist.
Ein 3000 Polygon Mesh hat dann somit am ende nur noch 360 Poly´s.
Das ganze erlaubt eine Irre weitsicht,
ich denke das mit Basic sowas auch möglich wäre, doch nicht in dem Ausmaß wie bei den neuen Valve Spielen.
Ansonsten einfach CameraRange runterdrehen. Das gibt auch ordentlich performance...
Coming soon:
http://img132.imageshack.us/im...im2ab6.gif

FireballFlame

BeitragDo, Dez 07, 2006 17:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja klar, das ist ja auch die Möglichkeit, die fast jeder nutzt. Wink

CameraRange mochte ich noch nie. 200m Sicht muss mindestens sein Razz
PC: Intel Core i7 @ 4x2.93GHz | 6 GB RAM | Nvidia GeForce GT 440 | Desktop 2x1280x1024px | Windows 7 Professional 64bit
Laptop: Intel Core i7 @ 4x2.00GHz | 8 GB RAM | Nvidia GeForce GT 540M | Desktop 1366x768px | Windows 7 Home Premium 64bit

marcelkroener

BeitragDo, Dez 07, 2006 18:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Vielleicht Objekte ausblenden die man nich sehen kann...

FireballFlame

BeitragDo, Dez 07, 2006 20:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja hm ... wie schnell oder langsam ist EntityVisible eigentlich? Lohnt es sich, 20-Polygon-Meshes damit auf "verdeckt oder sichtbar" zu überprüfen und gegebenenfalls zu hiden, oder wirds dadurch eher langsamer? Wink
Sowas hängt auch vom Computer ab, oder? Aber bei welcher Mesh-Größe wär da ne sinnvolle Grenze?
PC: Intel Core i7 @ 4x2.93GHz | 6 GB RAM | Nvidia GeForce GT 440 | Desktop 2x1280x1024px | Windows 7 Professional 64bit
Laptop: Intel Core i7 @ 4x2.00GHz | 8 GB RAM | Nvidia GeForce GT 540M | Desktop 1366x768px | Windows 7 Home Premium 64bit
 

Dreamora

BeitragDo, Dez 07, 2006 21:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Also bei 20 macht es definitiv keinen Sinn Smile

bei 1000 siehts da schon anders aus.

Aber prinzipiell gibt es eigentlich "höher stehende Dinge" die man optimieren muss.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group