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

Aktuelle Zeit: Fr Jul 18, 2025 14:08

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



Ein neues Thema erstellen Auf das Thema antworten  [ 10 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Objekte kopieren, speichern
BeitragVerfasst: Mo Jan 23, 2006 16:56 
Offline
DGL Member

Registriert: Di Sep 28, 2004 15:46
Beiträge: 54
Hallo,

ich hab einige Objekte, die dich mehrfach an verschidenen Stellen zeichnen will. Das relisieren ich mit Pushmatrix und Popmatrix. Nun frage ich mich allerdings, ob ich immer alle Befehle zum Zeichnen neu aufrufen muss, oder ob ich Nicht einfach ein Objekt kopieren kann und dann Verschieben...
Zudem suche ich eine gute Möglichkeit Objekte zu speichern. Bin dabei auf XGL gestoßen... kennt jemand noch andere Alternativen???

Gruß

Bomberbb


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jan 23, 2006 18:04 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Apr 25, 2005 17:51
Beiträge: 464
Du suchst wahrscheinlich nach Displaylisten. Das dürfte das passende sein. Such malim Wiki nach glNewList und glEndlist. Mit diesen Befehlen kannst du eine Displayliste anlegen. Wenn du dann später das Objekt zeichnen willst, musst du nur noch die Displayliste mit glCallLists aufrufen

_________________
__________
"C++ is the best language for garbage collection principally because it creates less garbage." Bjarne Stroustrup


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jan 24, 2006 10:59 
Offline
DGL Member

Registriert: Di Sep 28, 2004 15:46
Beiträge: 54
Ich hatte die Option der Displaylists auch schon gesehen. War mir aber nicht sicher, ob das das Richtige ist oder ob es da noch andere Wege gibt.
Was ich machen möchte ist moglichst unkompliziert aus einer Datei ein Element zu laden, dieses mehrfach kopieren und dann an die Stellen schieben an denen ich diese benötige...


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jan 24, 2006 11:17 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Wieso willst du ein Objekt denn überhaupt kopieren?

Es ist nicht ungewöhnlich in einem Programm 200 Einheiten mit einem "Objekt" zu rendern. Was für ein "Objekt" ist es denn? Hast du ein 3DS File geladen, oder irgend ein anderes File?

Displaylisten sind dann sinnvoll, wenn das Objekt eine Gewisse komplexität aufweist und wenn es mehrfach gerendert werden soll.

Das Positionieren musst du aber in jedemfall für jedes Objekt einzeln vornehmen. Aber das ist je eigentlich kein Problem, oder?

Ich denke es handelt sich hier vielleicht um ein missverständniss bezüglich desr Funktionsweise von OpenGL. Erzähl mal noch ein bischen was, wie du dir die Funktionsweise deines Proggs vorstellst. Eventuell ist es nur ein kleiner Denkfehler.

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jan 24, 2006 11:55 
Offline
DGL Member

Registriert: Di Sep 28, 2004 15:46
Beiträge: 54
Also, ich bin gelernter Tischler und will in OpenGL Erzeugnisse wie Schränke und Treppen darstellen. Die Elemente (Verbindungsmittel wie Schrauben, Hülsen oder Winkel), die ich jetzt laden will, sind recht einfache Elemente die dafür auch bis zu 50 mal vorkommen können.
Da sind im Prinzig 2 Fragen:
1.: Sollte ich jedes mal zwischen Pushmatrix und Popmatrix die Procedure ZeichneSchraube aufrufen oder gibt es eine Möglichkeit dieses Element zu kopieren?
2.: Ich will die Elemente zur Laufzeit laden können. Ich könnte nun die ganzen Punkte, Normalen, etc. in eine XML-Dateischreiben, aber bevor ich das anfange, würde ich gerne wissen ob es das nicht was einfacheres in der art von blockread gibt???


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jan 24, 2006 14:20 
Offline
Forenkatze
Benutzeravatar

Registriert: Mi Okt 22, 2003 18:30
Beiträge: 1945
Wohnort: Närnberch
Programmiersprache: Scala, Java, C*
Hehe... Also du kannst in OpenGL nicht direkt sagen, dass das, was du als nächstes renderst, zu einem bestimmten Objekt gehört. Indirekt geht das jedoch sehr wohl und auch deutlich performanter ;)
Du suchst also aktuell 2 Dinge:
  • Eine Möglichkeit, gezeichnete Objekte (Sprich: Dreiecke) wieder zu verwenden
  • Ein verbreitetes Dateiformat mitsamst Loader

Nun, ersteres kannst du wohl vergessen. Du musst das anders angehen. Und zwar so:
Erstelle eine Displayliste und rendere dann deinen Tisch z.B.. Dann schließt du die Displayliste wieder und somit ist dann das Objekt auf der Graphikkarte im Videospeicher gesichert. Du kannst es dann mit glCallList(name) (iirc) wieder aufrufen und OpenGL wird dann die ganzen OpenGL-Befehle, die in der Liste vorkommen, erneut ausführen. Was zu dem Ergebnis führt, dass du dein Objekt erneut zeichnen lässt ;) Wenn du vorher mit Translate bzw. Rotate oder direkte Matrrixmanipulation die "Einfüge"-Position verändert hast, erscheint dein zweiter Tisch dementsprechend woanders. Und siehe da... Du hast den ersten Tisch kopiert ;)

Zum zweiten Punkt: Ich nehme nicht an, dass du animierte Tische brauchst. Von daher wird dir das 3DS-Format vielleicht weiterhelfen. Es existiert dazu auch eine Handvoll Loader. Einer der besseren lässt sich auch hier im Forum finden. Er stammt von noeska. In das 3DS-Format kannst du eigentlich in allen gängigen Modellern exportieren. Mir fällt jetzt auf Anhieb keiner ein, mit dem das nicht ginge ;)

_________________
"Für kein Tier wird so viel gearbeitet wie für die Katz'."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jan 24, 2006 15:44 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Zitat:
1.: Sollte ich jedes mal zwischen Pushmatrix und Popmatrix die Procedure ZeichneSchraube aufrufen oder gibt es eine Möglichkeit dieses Element zu kopieren?


Rein vom Prinzip her: Ja!

Das man in der Praxis statt "rendereTisch" auch eine Displayliste nehmen kann, ändert an der Struktur des Aufrufs eigentlich nichts.

Mal etwas zur grundlegenden Funktion:
Zeitaufwendig ist nicht der x-te aufruf einer Zeichenfunktion. Zeitaufwenidg ist es, wenn die Zeichenfunktion jedesmal Daten über den Bus an die GraKa schickt. Displaylisten werden einmal übertragen und im GraKa-Speicher gehalten. Somit entfällt der Zeitaufwendige-Übertragungsprozess.

Etwas anderes bei dir kostet aber auch Zeit: glPush/glPopMatrix. Die sind verhältnismäßifg teuer. Als optimierung kann man einfach die gemachten verschiebe und rotationsoperationen in Gegengesetzter Richtung und Reihenfolge ausführen. Das sind zwar mehr befehle, aber mitunter weniger Zeitaufwendige als die Matrix zu sichern und zu restaurieren.

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jan 24, 2006 16:43 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Ich muss da gerade auch noch meinen Senf dazu geben.

DisplayListen liegen nicht immer in Speicher. Die Grafikkarte muss das unterstützen sonst gehts natürlich nicht. Die Listen funktionieren dennoch aber in diesem Falle puffert der Treiber alles und überträgt es dann die Karte. Dabei entfällt dann aber immer noch die Aufrufe von OpenGL. Das ist ja inter gepuffert.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jan 25, 2006 16:23 
Offline
DGL Member

Registriert: Di Sep 28, 2004 15:46
Beiträge: 54
Ja danke erst mal für die Hilfe. werde mich nun wohl erst mal mit dem Laden bzw. Speichern der Objekte befassen und dann mal schauen, ob mit displaylisten, popmatrix, etc.

Getreu dem Motto:
***FIRST MAKE IT RUN: THEN MAKE IT BETTER***


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jan 25, 2006 22:55 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Ja das wird wohl das beste sein. Dadurch hast du dann auch schon ein Gefühl wie das mit dem OpenGL so richtig geht. Ich hab anfangs auch paar Tage gebraucht um dieses Statemaschine-AndauerndRendern-Dings zu verstehen. ;)

_________________
Blog: kevin-fleischer.de und fbaingermany.com


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 6 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.008s | 14 Queries | GZIP : On ]