"Echtzeit"-LOD?
Übersicht

![]() |
FireballFlameBetreff: "Echtzeit"-LOD? |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() |
aMulSieger des Minimalist Compo 01/13 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() |
aMulSieger des Minimalist Compo 01/13 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ja klar, das ist ja auch die Möglichkeit, die fast jeder nutzt. ![]() CameraRange mochte ich noch nie. 200m Sicht muss mindestens sein ![]() |
||
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Vielleicht Objekte ausblenden die man nich sehen kann... | ||
![]() |
FireballFlame |
![]() Antworten mit Zitat ![]() |
---|---|---|
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? ![]() 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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Also bei 20 macht es definitiv keinen Sinn ![]() 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. |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group