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

Aktuelle Zeit: So Jul 20, 2025 22:03

Foren-Übersicht » Programmierung » Einsteiger-Fragen
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 20 Beiträge ]  Gehe zu Seite Vorherige  1, 2
Autor Nachricht
BeitragVerfasst: Mi Jun 16, 2010 20:35 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Aug 18, 2007 18:47
Beiträge: 694
Wohnort: Köln
Programmiersprache: Java
Zitat:
Die Funktion lautet function TFrustum.IsBoxWithin(const pX, pY, pZ, pB, pH, pT : Single) : Boolean. Es werden also Breite, Höhe, Tiefe als Parameter übergeben.

Sry. Hatte ich missverstanden.

Aber mir ist noch was aufgefallen: FrustumVect enthält die Höhe des Terrains in der Mitte und pH bekommt die Hälfte der Höhe an der Stelle? Könnte es dann nicht sein, dass irgendwo in der Zelle Vertices ausserhalb der zu testenden Box liegen und diese deswegen zu früh gecullt werden?

_________________
Es werde Licht.
glEnable(GL_LIGHTING);
Und es ward Licht.


Zitat aus einem Java Buch: "C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do it blows your whole leg off"

on error goto next


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Jun 17, 2010 16:19 
Offline
DGL Member

Registriert: Fr Mai 14, 2010 08:34
Beiträge: 54
damadmax hat geschrieben:
FrustumVect enthält die Höhe des Terrains in der Mitte und pH bekommt die Hälfte der Höhe an der Stelle? Könnte es dann nicht sein, dass irgendwo in der Zelle Vertices ausserhalb der zu testenden Box liegen und diese deswegen zu früh gecullt werden?


Ja stimmt. Danke. Das Culling funktioniert jetzt auch soweit. Prinzipiell läuft auch schon alles recht passabel, wobei ich noch keine VBOs benutzt habe.

Allerdings ist jetzt mein Problem, dass die maximale Auflösung (also maximal reingezoomt) durch die Größe der QuadTreeMatrix beschränkt wird. Habe ich jetzt Beispielsweise eine Matrix 4000x600 (teilweise sind die Matrizen weit weg von quadratisch), dann müsste ich, um die volle Auflösung zu erhalten doch eine QuadTreeMatrix in der Größe 4097x4096 (2^n+1) benutzten. Sehe ich das richtig?

Außedem ist mir aufgefallen, dass die Auflösung oft an den falschen Stellen erhöht wird. Also die Auflösung ist nicht immer dort hoch wo auch die Kamera am nächsten ist. Kann das daran liegen, dass die Rotation nicht mitgerechnet wird? Also, dass das Drehen der Oberfläche mit glrotate sichnicht auf der KameraPosition-Array auswirkt und deshalb der Abstand falsch berechnet wird?

BTW: Habe die Y-Position der Kameraposition und die Höhe mit in die Abstandsberechnung einbezogen. Also das V1[1] := 0; in der Distance-Funktion gelöscht und CellCenterPos[1] := 0; in CellCenterPos[1] := GetHeightMapHeight(X,Z); geändert.


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mo Jun 21, 2010 16:00 
Offline
DGL Member

Registriert: Fr Mai 14, 2010 08:34
Beiträge: 54
Also bin jetzt fast fertig mit meinem Programm. Culling und LOD funktionieren jetzt sehr gut. Die Performance ist relativ akzeptabel. Bei einer 4000x4000er Matrix komme ich auf knapp 20-40 fps.
Die Farbgebung habe ich jetzt mit einer Textur gelöst, die immer in voller Auflösung über den Quadtree gelegt wird.

Wen es interessiert: Um den Abstand zur Kamera zu berechnen, habe ich die Kameraposition (nach gltranslate, glrotate) folgendermaßen errechnet:

Code:
  //ModM : Modelviewmatrix;
  KameraVect[0] := -(ModM[0] * ModM[12] + ModM[1] * ModM[13] + ModM[2] * ModM[14]);
  KameraVect[1] := -(ModM[4] * ModM[12] + ModM[5] * ModM[13] + ModM[6] * ModM[14]);
  KameraVect[2] := -(ModM[8] * ModM[12] + ModM[9] * ModM[13] + ModM[10] * ModM[14]);


Jetzt habe die aber noch ein paar Probleme:
1) Die Performance ist noch nicht optimal. Ich würde gerne VBOs verwenden, aber ich weiß noch nicht genau wo und wie ich das anstellen soll. Hat einer ne Idee (am Beispiel des Quadtree-Tutorials)?
2) Bei vollem Zoom sollte eigentlich die Oberfläche in voller Auflösung erscheinen. Reicht es, wenn ich ein sehr großes C einstelle (ca. 40)? Und muss ich bei nicht-quadratischen Matrizen dann einen Quadtree definieren, der mindestens so groß wie die längste Seite der Oberfläche ist?
Der Quadtree und die HeightMap werden auf Byte komprimiert. Meine Messdate liegen als Single vor. Diese habe ich mit Round((Matrix[x,z]-hmin)/(hmax-hmin)*255) auf Byte komprimiert. Ich habe zum testen die Heightmap und den Quadtree auf Single umgestellt. Habe aber eigentlich kaum einen Unterschied feststellen können.


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mi Jun 23, 2010 07:47 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 27, 2005 12:44
Beiträge: 393
Wohnort: Berlin
Programmiersprache: Java, C++, Groovy
Hallo,

du könntest die Performance noch etwas verbessern, wenn du eine Front-To-Back-Sortierung auf deine Blöcke anwendest. Occlusion_Query könnte vielleicht auch noch etwas bringen.

Viele Grüße
dj3hut1

_________________
Wenn Gauß heute lebte, wäre er ein Hacker.
Peter Sarnak, Professor an der Princeton University


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mi Jun 23, 2010 10:03 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
Zum OcclusionQuerry gibt es eine sehr hilfreiche erweiterung seit neuem, wurde auf der Apple WWDC gezeigt:

Zitat:
NV_conditional_render


Normalerweise mußt du wenn du den query abfragst, also wieviele Pixel sichtbar waren solange warten bis die Grafikkarte gerendert hat, du arbeitest also nicht asynchron. Das kann sehr viel Performance kosten.

Um das zu umgehen wurde die obige Extension eingeführt, mit ihr verlagerst du den check, ob etwas sichtbar ist auf die Grafikkarte:

Code:
glColorMask(0, 0, 0, 0);
glDepthMask(0);

glBeginQuery(GL_SAMPLES_PASSED_ARB, query);
glDrawElements(...);
glEndQuery(GL_SAMPLES_PASSED_ARB);

glColorMask(1, 1, 1, 1);
glDepthMask(1);

glBeginConditionalRenderNV(query, GL_QUERY_WAIT_NV);
glDrawElements(...);
glEndConditionalRender();


Sehr praktisch, im moment allerdings leider NVidia only :(
(Was auf dem Mac nicht stört, denn da gibt es aktuell nur NVidia :) )

Aya


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 20 Beiträge ]  Gehe zu Seite Vorherige  1, 2
Foren-Übersicht » Programmierung » Einsteiger-Fragen


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:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.007s | 14 Queries | GZIP : On ]