OpenGL Selection

Jetzt fange ich an mir nicht mehr sicher zu sein. Ich bin nämlich eher in DirectX tätig :D Ich persönlich speichere immer die Position von einzelnen Objekten in Vektoren und setze dann vor dem Rendern die Translationsmatrix als Weltmatrix. Außerdem speicher ich immer eine ID oder ein String zur Beschreibung des Objektes. Anderst kann ich zumindest mir nicht vorstellen wie man das abfragen soll wo das Objekt liegt. Also wenn du die ID hast oder gleich ein Vektor im Objekt gespeichert hast, kannst du den/die auslesen und dann hast du die Position ;) Jetzt empfehle ich auch ein eigenen Modellverwalter zu schreiben, um solche Infos zu speichern. Also was mir noch einfallen würde, das du mir OpenGL irgendwie User Daten in Objekte speichern kannst. Aber so direkt kenn ich nichts, wie man aus dem angeklickten Objekt eine Position rauskriegt. Aber ich glaube du fragst auch so was wie eine ID in deine Picking Funktion ab, oder? Also ich würde dir empfelen für jedes Objekt die Position zu speichern. Wenn jemand eine bessere Methode hat, bitte schreiben. und falls ich jetzt Müll erzählt habe muss ich mich entschuldigen ;) Aber so mach ich das nur halt mit einer PhysikEngine :D
 
Also, so weitn ich weiß, wird dem Objekt ein Name zugewiesen, der dann später genauso wie Z-Werte im Buffer gespeichert werden. Ich gehe von diesem Tutorial (ist zwar in Delphi geschrieben, aber das macht ja nicht) http://wiki.delphigl.com/index.php/Tutorial_Selection. was jetzt alles funktioniert. Ich kann den Namen und Z-Werte auslesen. Diese Z-Werte sortiere ich dann und nimm den kleinsten (nahstes Objekt) Wert. Allerdings sind diese Z-Wetre unpropoortional (z.B. 10 Einheiten = -42526442 & 4 = -106957512). Jetzt kann ich zwar ungefähr sagen, wie weit das Objekt weg ist, aber eben nicht genau. Die zweite Frage stell ich eher aus Interesse. :)
 
Zuletzt bearbeitet:
Passt ja eigentlich soweit ganz gut was du da als Werte angibst.

Punkt 1:
Die Werte sind immer positiv.

Punkt 2:
Teile ich die Werte durch UINT_MAX kommen ganz vernünftige Sachen raus:
C++:
	int i1 = -42526442;
	int i2 = -106957512;
	unsigned int a1 = *(unsigned int*)&i1;
	unsigned int a2 = *(unsigned int*)&i2;

	float d1 = a1 / (float)UINT_MAX; // -> 0.99f;
	float d2 = a2 / (float)UINT_MAX; // -> 0.97f;

Objekt 2 ist also näher als Objekt 1.
 
Zurück