Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Fr Jul 18, 2025 21:09

Foren-Übersicht » Programmierung » OpenGL
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: FPS
BeitragVerfasst: Do Jan 25, 2007 21:41 
Offline
DGL Member

Registriert: Mi Mär 08, 2006 17:38
Beiträge: 153
Wohnort: Rümmelsheim (bei Bingen)
Ich nochmal :)

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 ?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jan 25, 2007 22:16 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
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.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jan 25, 2007 22:20 
Offline
DGL Member

Registriert: Mi Mär 08, 2006 17:38
Beiträge: 153
Wohnort: Rümmelsheim (bei Bingen)
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 :D) 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 ?

Simon


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jan 25, 2007 22:28 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
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.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jan 25, 2007 22:38 
Offline
DGL Member

Registriert: Mi Mär 08, 2006 17:38
Beiträge: 153
Wohnort: Rümmelsheim (bei Bingen)
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) ..


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jan 25, 2007 22:41 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
Hast du das geänderte übersehen, oder ist das nicht mehr aktuell:

Da ist ein Fehler beim der Zeitberechnung. (TForm1.IdleHandler)
Das ist nicht so langsam wie es scheint (Faktor 10).

TimeFactor:=(GetTickCount-TimeFactorTmp)/1000;
Done:=false; // <== muß hin damit IDLE wieder aufgerufen wird.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jan 26, 2007 12:34 
Offline
DGL Member
Benutzeravatar

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

Projekte: https://github.com/tak2004


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Foren-Übersicht » Programmierung » OpenGL


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 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.

Suche nach:
Gehe zu:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.008s | 15 Queries | GZIP : On ]