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

Aktuelle Zeit: Sa Jul 19, 2025 04:53

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



Ein neues Thema erstellen Auf das Thema antworten  [ 11 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Mo Jun 25, 2007 16:22 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mär 30, 2007 18:35
Beiträge: 331
Hallo,

ich mal wieder :D.

Ist es möglich, Selections in einer Displayliste durchzuführen? Situation ist folgende:
Ich erstelle mir einen Octree von einer 2D-Map. Ich will jedes "Feld" auf der Map selecten können.
Mache ich das ohne Octree und Listen, funktioniert das richtig. Mit ner Displayliste im Octree würde ich natürlich noch viel mehr Performance bekommen.
Wenn ich jetzt aber beim rendern nur die liste aufrufe, gibts auch keine selection. Daher ist meine Frage ob man sowas hinbekommen kann, oder ab ich die Felder einzeln rendern soll.

Markus


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jun 26, 2007 09:09 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Eigentlich spricht nichts gegen die kombination von Selection und Displaylisten.

Laut Wiki glNewList gehören die Namestack-Operationen nicht zu den "bösen" funktionen die man nicht in Displaylisten verwenden kann.

Eventuell initialisierst du den Namestack vor dem Zeichnen der Displaylisten nicht neu bzw. hast diesen Teil nicht in der Liste enthalten.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jun 26, 2007 11:26 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mär 30, 2007 18:35
Beiträge: 331
Hallo,

danke, ich habe mal weiter probiert, und bekomme jetzt auch ein richtiges ergebnis. Wenn ich das richtig verstanden habe, wird ja die Liste (meistens) in den vram gelegt.
Das bedeutet dann doch auch, dass ich folgendes NICHT in einer Displayliste machen kann, oder?

Code:
  1.  
  2.    if (bfr = sbufferhit) then begin
  3.         glColor3f(0, 0, 1);
  4.         SelField:= @Map.playground[x,y];
  5.    end;
  6.  


bft ist der Name des Objekts und SbufferHit das Result der select procedure.

Sehe ich das richtig, dass ich das nicht in der liste machen kann, sondern das ergebnis hinterher auswerten muss? Klar, dass glColor3f() nicht funktioniert, ich kann ja die Liste nicht ändern, aber gibt es eine möglichkeit, die zweite Anweisung in die Liste zu packen?

Markus[/pascal]


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jun 26, 2007 12:53 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Die DL wird zur laufzeit (bei dir vermutlich) compiliert. Das heißt es werden nur die GL-Befehle in die DL gespeichert welche beim Compilierdurchlauf gerade gestimmt haben. Wenn also die Booleanvariable zum zeitpunkt des ersten durchlaufes "false" war, wird der entsprechende Teil NICHT ind die DL geschrieben.

DL sind statisch. Sie können nicht geändert werden. Sie eignen sich perfekt für komplexe Objekte (z.B. Kugeln) welche nicht verändert werden aber viele GL Anweisungen enthalten.

Willst du was dynamisches machen gibts die VBOs.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jun 26, 2007 13:03 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mär 30, 2007 18:35
Beiträge: 331
Kann ich das mit einem VBO so realsieren, wie ich das möchte? also während dem rendern etwas in SelField schreiben?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jun 26, 2007 13:05 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
grml. Essen und tippen. Kein Wunder, dass ich zu langsam bin. ;)

Das SelField ist doch nur etwas in deinem Programm, oder? Wenn du mit der klassischen Selektion arbeitest könntest du die Adresse des Elements als Name laden und nach der Selektion hättest du dann die Adresse des Elements. Aber das ist mit Vorsicht zu genießen. Bzw kann man das auch nicht überall bedenkenlos einsetzen. Sonst sieht es ziemlich schlecht aus. Aber ich denke das passende Objekt zu suchen ist eher nicht so tragisch.

Ich kann das Ganze aber nicht sinnvoll einschätzen, da ich den Aufbau/Struktur deines Programmes nicht kenne!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jun 26, 2007 13:46 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mär 30, 2007 18:35
Beiträge: 331
Lossy eX hat geschrieben:
Aber das ist mit Vorsicht zu genießen. Bzw kann man das auch nicht überall bedenkenlos einsetzen. Sonst sieht es ziemlich schlecht aus. Aber ich denke das passende Objekt zu suchen ist eher nicht so tragisch.


Verstehe nicht ganz was du damit meinst :D.

Ja, das SelField ist nur für mein Programm. Ich habe eine 2D Map in kleine "Felder" eingeteilt, und will jetzt die einzelnen Felder selecten können. SelField ist ein Pointer auf das Record, das ein solches Feld definiert. Ich will also später auf das Feld zugreifen können.

Wenn ich das mit einer Displayliste mache bekomme ich den Namen als Result und kann dann (nach dem rendern) davon auf das Feld schließen. ( Wenn ich mich nicht irre ).

Aber ich kann nicht beim rendern in der Displayliste erkennen ob ein Feld getroffen wurde und direkt dort den Pointer übergeben. Ich werde dann halt hinterher vom Result der Selection auf das Feld schließen.

Danke für die Antworten..

markus


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jun 26, 2007 14:37 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Was ich meinte ist folgendes. Du gibst ja bei der Selektion einen Namen an. Und da hindert dich ja niemand, wenn du als Namen den Pointer des Objektes verwendest. Ist ja beides 32 Bit. Würde bedeuten du selektierst das Objekt und könntest den selektierten Wert dann direkt als Objekt casten und fertig. Aber sobald du noch Dinge dazwischen hast die eine fortlaufende Nummer (oder so) haben dann sollte man das eher lassen, weil man dann nicht mehr sicher gehen kann. Und selbst wenn man nur Pointer als Namen hätte würde man der Selektion blind vertrauen müssen. Von daher wäre das immer etwas mit vorsicht zu genießen. Also aufpassen, dass die Objekte so lange leben und sich keine Pointer ändern.

Andere Möglichkeit wäre, dass du die X und Y Koordinate deines Feldes in den Namen kodierst. Also unterstes Byte ist X und Byte darüber ist Y. Falls das oberste Bit gesetzt ist handelt es sich bei den Bits um eine fortlaufende Zahl etc etc etc. Möglichkeiten gibt es ja zum Glück so gut wie kaum. ;)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jun 26, 2007 16:23 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mär 30, 2007 18:35
Beiträge: 331
Ich habe für die Map ganz einfach fortlaufende Zahlen genommen. [0 .. 1.000.000] (oder so)
Wenn ich selectet habe errechne ich mir einfach mit Mod und div die Koordinaten.
Aber kann es sein, dass das nicht sehr performant ist? Ich habe gehört "mod" dauert sehr lange.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jun 27, 2007 14:09 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Meine Aussagen betrafen die OpenGL-Selektion. Wenn man Selektion selber durchführt (also z.B. im Orthomodus) sind DL eigentlich kein Problem.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jun 27, 2007 15:19 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mär 30, 2007 18:35
Beiträge: 331
Jo, danke ich habe es jetzt hinbekommen :D


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 11 Beiträge ] 
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:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.008s | 14 Queries | GZIP : On ]