Registriert: Sa Jan 01, 2005 17:11 Beiträge: 2068
Programmiersprache: C++
So, das ganze befindet sich jetzt als Beispiel für Rotation & Translation im SVN: Link Dein Template wird als Basis genannt.
Übrigens ist mir beim Durchgehen und Kommentieren des Quellcodes aufgefallen, dass dein Quader auf jedemfall im 3D-Modus gezeichnet wird:
Der Quader mit 0.2, 0.6, 0.4 wäre ansonsten keinen Pixel gross
Ich glaube da haben wir uns missverstanden. Natürlich werden alle Geometrien mit 3D Koordinaten gezeichnet. Der Unterschied liegt doch nur an der Art der Darstellung. Während ich mit gluPerspective eben eine perspektivische Ansicht, wie es in 3D Spielen wichtig ist, darstellen kann, also einen Blick für die Tiefe bekomme, habe ich in der orthogonalen Ansicht zwar auch 3D aber keine Tiefeninformation. Wenn ich einen Würfel genau mit einer Seite nach vorne drehe, sind die Kanten der Rückseite verdeckt. Mit gluPerspective würde ich sie sehen.
Dein Beispiel ist doch klasse. Ich denke das wird vielen weiterhelfen.
Ich habe einfach mal den ganzen Render-Abschnitt als DisplayList gespeichert und dem entspechend gerendert. Was soll ich sagen. Bei einem großen Modell hat sich die FPS mehr als verdoppelt, bei einem kleinen Modell fällt der Unterschied nicht so groß auf.
Der Pferdefuß an der Geschichte ist nur, dass ich nach jeder Anzeigenänderung (Knoten, Lines oder Elemente bzw. nach einer neuen Farbskalierung) die alte Liste Löschen und eine neue erstellen muss. Das Löschen der Liste dauert aber 1 bis 2 Sekunden...also kein Farbwechsel mehr in Echtzeit?
Oder mache ich da was falsch...muss die Liste eigentlich immer gelöscht werden? Oder könnte man sie einfach überschreiben?
Beispiel Code:
Code:
procedure TGLForm.CreateDL;
procedure getcolor(ENum,node:integer);//Conturcolors dependet which item shown
begin
Farben skalieren;
end;
var
x :integer;
begin
if DL <> 0then glDeleteLists(DL,1);//Liste Löschen
Registriert: Fr Mai 14, 2004 18:56 Beiträge: 804 Wohnort: GER/OBB/TÖL-WOR/Greiling
displaylisten sind für statische Geometrie, VBOs dagegen für dynamische. Da kannst du gezielt einzelne Werte verändern, ohen das ganze komplett neu aufzubauen.
Ok, habe die Liste jetzt nicht mehr gelöscht, sondern den vorhandenen ersten Index DL verwendet und die Liste parktisch überschrieben.
Aber trotzdem dauert das bei Modellen mit 100000 Knoten bis zu mehreren Sek.!!! Auch wenn meine Hardware hier zuhause nicht mehr die neuste ist (Sempron 2.6+, ATI 9250), so kann das doch nicht sein. Die gleiche Schleife reagiert ohne Displaylisten sofort auf Änderungen, sie ist also relativ schnell und zeigt bei dem genannten Modell etwa 8 FPS. Mit Displaylisten komme ich auf über 20 FPS...aber bis die Liste erstmal generiert ist!!!
..habe deine Nachricht beim Schreiben noch nicht gesehen. Dann muss ich mich wohl doch mit den VBO's beschäftigen, denn das ist so kein akzeptabeler Zustand.
Registriert: Fr Mai 14, 2004 18:56 Beiträge: 804 Wohnort: GER/OBB/TÖL-WOR/Greiling
du könntest auch mehrere display-listen verwenden, bei denen dann nur der betroffene teil neu kompiliert werden muss. im übrigen kannst du gltranslate und glrotate auch vor dem aufrufen der dl nutzen, damit du ihren inhalt verschieben kannst.
Mehrere Listen bringen glaube ich nur beding was. Man könnte natürlich jeweils die Elemente, die Linie und die Knoten in verschiedene Listen Speichern, das wäre ok. Jedoch ist da immer noch der Pferdefuß mit den dynamischen Skalierungsfarben, die momentan mit einem Schieberegler in Echtzeit angepasst werden können. Wenn man die Farben unabhängig von den Listen steuern könnte, würde das so gehen.
Das mit den Verschiebungen habe ich schon so gemacht. Erst die Verschiebungen und Rotationen sowie der Zoom, dann wird gezeichnet, sonst würde das überhaupt nicht oder nur mit 0 FPS gegen. Funktioniert ja auch.
Das mit den VertexArrays habe ich auch mal probiert, stoße da aber auch noch auf erhebliche Probleme. Muss dafür erst mal ein Konzept entwickeln, damit auch alle Möglichkeiten offen bleiben.
Davon mal abgesehen funktioniert das Programm ja so wie ich es haben möchte, nur eben nicht optimal, da man weiss, was man verschenkt
Also... VBOs sollten da das Mittel zum Zweck sein. Die sind am flexibelsten und schnellsten.
Dass das Erstellen einer Dislpaylist etwas dauert, sollte nicht allzu verwunderlich sein. Immerhin sind diese nunmal für statische Geometrie ausgelegt und nur bedingt für Sachen, die sich ändern. Gerade dann machen sich VBOs bezahlt. Dort bekommst du nämlich einen Pointer, an dessen Position du dann die neuen Daten in den Grafikspeicher schreiben kannst, sofern die VBOs dort abgelegt werden (davon kannst du aber ausgehen).
_________________ "Für kein Tier wird so viel gearbeitet wie für die Katz'."
du kannst aber auch VBOs so verwenden, als wären sie VertexArrays. Dann fallen die Pointer auch weg. Das ist dann, wenn du die VBOs für statischen Gebrauch optimierst. Die Grafikkarte holt sich einmal die Daten. Du bekommst keine Pointer zu den Daten im Videospeicher, denn du kannst damit eh nichts anfangen. Schließlich kannst du die ja nichtmehr ändern
Alle Angaben wie immer ohne Gewehr!
_________________ "Für kein Tier wird so viel gearbeitet wie für die Katz'."
Mitglieder in diesem Forum: 0 Mitglieder und 8 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.