Bin grad an einer Outdoor Engine. Octrees sind schon drin.
Jetzt will ich das Fogging reinbringen um die Sicht zu begrenzen.l Hinterm Nebel soll also nichts mehr gezeichnet werden.
Jetzt hab ich das mal ohne Fogging mit Near und Farclipping versucht. Hab mir dadurch also die Sicht mal abgeschnitten. Trotzdem verbessert das nicht die FPS. Die bleibt bei niedrigen 10 ^^
Hilft Clipping (NEAR und FARclipping) überhaupt die FPS zu verbessern ?
Das bringt nur etwas, wenn man selber die Objekte hinter der Ebene nicht mehr zeichnet. Die Clip Planes aus der Projektionsmatrix werden erst angewandt, wenn die Punkte schon transformiert worden sind.
Da ist ein Fehler beim der Zeitberechnung. (TForm1.IdleHandler)
TimeFactor:=(GetTickCount-TimeFactorTmp)/1000;
Done:=false; // <== muß hin damit IDLE wieder aufgerufen wird.
Ansonsten ist das Zeichnen aber trotzdem nicht optimal. Anstelle von glVertex nimmt man besser Vertex Buffer. Da wird es vermutlich selbst ohne Octree schneller sein als jetzt.
Zuletzt geändert von LarsMiddendorf am Do Jan 25, 2007 22:27, insgesamt 3-mal geändert.
1)Wann bringt mir der Nebel jetzt was ?
Wenn ich was transfomiert habe ? dann bringt mir clipping plane was also der nebel ^^ ?! oder ?
2)naja .. In einem Knoten werden 500 gespeichert.
Das Problem is aber dass es sich um einen Karteneditor handelt, bei dem am anfang alles auf einer Höhe ist. D.h. kein Berg oder sowas versperrt die sicht.
Man sieht also das ganze Level (also fast.. außer das was eben hinter einem ist) .. und das hat so an die 700.000 dreiecke (noch recht klein ) naja ..
und deswegen mus ich die sicht begrenzen ?! oder ?
3)Also Displaylisten wollt ich nicht verwenden, da ich den Terrain verändere mit der Mau (muss also da noch dyn. bleiben) . Erfüllen Vertexarrays meinen anforderungen ?
Habe den Beitrag bearbeitet. Die Fragen haben sich wegen dem anderen Thread erübrigt.
In einem Editor würde ich ganz auf Octree verzichten und stattdessen nur Vertex Buffer nehmen. Das ist im Prinzip ein Vertex Array nur eben in einem von OpenGL bereitgestellen Buffer. Da gibt es auch ein Tutorial dazu. Bei Änderungen kann man einfach den Punkt im Vertex Buffer ändern.
Ja Octrees sind sehr schwer zu bearbeiten.
Bin auch am überlegen ob man den Terrain anhand einer 2d Karte bearbeitet. Wie genau weiß ich auch noch nicht. Aber wäre wahrscheinlich besser.
Meine Idee war eben dass man bei jedem Dreieck die höhe verändern kann. Mit der Mouse. Aber das is sehr aufwändig. Gut man könnte es mit einzelen Tools vereinfachen.
Aber das Terraindesign via 2D Karte oder was auch immer .. hat einer ne idee (will keine Heightmap bitmaps nehmen) ..
Registriert: Di Mai 18, 2004 16:45 Beiträge: 2623 Wohnort: Berlin
Programmiersprache: Go, C/C++
Wirklich performantes Objekte Culling kann man so realisieren.
Raum einteilungssystem verwenden z.B. Octree,BSP,... und normale sichtbarkeitstests.
In deinem Fall(Octree) lohnt es sich in Jedem Node eine Sichtbarkeitstabelle mit an zu legen.
Also wenn du dann deine Kamera hast, ermittelst du die position und stellst fest, im welchen Node du sitzt und führst die sichtbarkeits liste aus.
Die Nodes selber legst du in VBOs ab,zusammen mit den normals und texcoords. jedes Node sollte dann eine Displaylist zum zeichnen haben.
Dein Nebel, also die Sichtbeschränkung, musst du dann in der Liste mit behandeln. Du musst einfach nur prüfen, ob die Distanz zwischen sichtbaren Node und Kamera kleiner ist als die Sichtweite. Wenn das nicht der fall ist überspringst du die Displaylist für das getestete Node.
Dynamische Objekte solltest du nach ein Positionswechsel in ein Node des Octrees zuordnen.
So kannst du dann beim zeichnen der sichtbaren Nodes, gleich noch die Liste der dyn Objekte, des Nodes, mit zeichnen.
Das spart sehr sehr viel Zeit und wenn es dir noch nicht reicht kannst du noch ein Occlusiontest machen.
In einem Editor, wäre es Ratsam kein Octree zu nutzen, da das ziemlich langsam werden wird(bei jeder änderung müssen Nodes neu berechnet werden).
Da wird es ziemlich kniffelig, da es auf deine Art drauf an kommt, wie du die Daten verarbeitest.
Eine Technik die noch relativ schnell sein sollte wäre folgende.
Du unterteilst dein Terrain in Felder und jedes bekommt eine eigene Heightmap und VBO.
Im VBO speicherst du die uv,vert,col Daten, die vert data liegen auf der y achse alle bei 0.
Die höhendaten legst du in die Heighmap ab und zeichnen tust du dies dann über sein ganz simplen kleinen Vertexshader.
Der durch die Heightmap und den uv coord weiß, welche y das vert haben muss.
Mit ein Frustum kannst du dann die sichtbaren Felder cullen und deine Zeichenwerkzeuge arbeiten dann auf den Heightmaps.
So kannst du auch sehr leicht smoothen, tesselierung höher stellen und so weiter.
Anhand der Heighmap kannst du auch dein Mesh optimieren, denn des so größer der unterschied von 2 pixeln, des so mehr vertex sollten in den bereich verwendet werden. UV Coords kannst dann mit Hilfe der Kantenlänge der Felder bestimmen.
Die möglichkeit würde als end Lösung für die Engine nützlich sein, da du so z.B. zur laufzeit ein Krater in den Boden Schiessen kannst ^^.
_________________ "Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren" Benjamin Franklin
Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.