Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Zum Thema "Color Picking" kenn ich zwar kein Tutorial, aber was spricht dagegen den Selectionmodus von OpenGL zum Ausfindigmachen des geklickten Objektes zu nutzen?Damit erreichst du im Prinzip genau das selbe. Ein Tut zu diesem Thema gibts übrigens auf meiner Homepage.
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
chuckylein hat geschrieben:
weil ich auf delphi3d gelesen hab, dass color picking die schnellste methode sei und namestack hat nur platz für 64 objekte bzw 128 ab gf2 glaub ich
Colorpicking ist eher langsamer, da das Zurücklesen von Pixeln aus dem Framebuffer schon immer langsam war und auch auf modernen Grafikkarten recht zeitaufwendig ist.Da ist der Selectionmodus weitaus schneller.
Und die Begrenzung des Namestacks bezieht sich nicht auf die Anzahl der Objekte die man auf den Stack legen kann, sondern auf die Zahl der getroffenen Objekte, die von OpenGL zurückgeliefert werden.
D.h. also, das du unendlich viele Objekte auf den Namestack legen kannst, aber wenn z.B. 136 Objekte unter der Maus liegen, und deine Graka nur 128 unterstützt, OpenGL dir "nur" 128 getroffene Objekte zurückliefert...Probleme wirst du damit (solange du keine superaufwendige 3D-Visualisierungssoftware schreibts) nie bekommen.
thx, bin das tutorial mal grad durchgegangen... ich bekomme keinen fehler, aber es tut sich nichts wenn ich getselectbufferhit(mousex,mousey: integer) aufrufe.. ich bekomme immer den Wert -1 geliefert
Und die Begrenzung des Namestacks bezieht sich nicht auf die Anzahl der Objekte die man auf den Stack legen kann, sondern auf die Zahl der getroffenen Objekte, die von OpenGL zurückgeliefert werden.
So ganz stimmt das auch nicht - wie viele Objekte zurückgeliefert werden können, hängt nur von der Größe des Buffers ab, den du OpenGL übergibst. Vielmehr stellt die Größe des Namestacks die Maximale Verschachtelungstiefe dar, die du mittels glPushName auf dem Stack ablegst. Meist kommst du mit einem einzigen glPushName aus und führst die Selektion mittels glLoadName Kommandos aus. Mehrere glPushNames sind nur dann notwendig wenn du z.B. in folgender Objektstruktur
Auto2 >>Rad >>>>Nabe
nur die Nabe selektierst, und dann gleichzeitig Auto2 und Rad unter den zurückgelieferten Namen haben willst (weil die Nabe ja zum Rad und das Rad zum Auto2 gehört).
Möchtest du hingegen wissen, welches von drei Autos selektiert worden ist, machst du das mit
Wenn jetzt die drei Autos übereinanderliegen bekommst du bei einer Selektion auch alle drei Autos zurückgeliefert - das hat aber überhaupt nichts mit der Größe des Namestacks zu tun - es könnten auch zehntausend Autos sein, und sie würden dennoch nur eine Stacktiefe von eins beanspruchen!
Mitglieder in diesem Forum: 0 Mitglieder und 13 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.