Frage

Ich verwende gluUnProject einen Strahl in die Szene zu werfen und das Hinzufügen eines primitiven dort. Was ich versuche jetzt zu tun ist, bestehende Primitiven genau auswählen, also wenn ich 3 Kugeln habe ich auf einem Klick könnte es zu löschen.

ich glaube, die Lösung wäre irgendwie überprüfen, ob der Strahl mit einem Objekt und zu überprüfen, ob sie der Nähe des Guss Herkunft durchteuft. Meine Lösung so weit ist primitiv und umgibt alle Objekte mit einem begrenzenden Würfel, ist es trotzdem einfach dieses für etwa Kugeln genau zu tun mit:

does the ray intersect with ( object)

oder

returnRayIntersections(ray);

Das Letzte, was ich bin mit OpenGL mit GLUT.

Danke an alle, Laurence

War es hilfreich?

Lösung

Eine weitere gute Möglichkeit in OpenGL zu implementieren Kommissionierung ist wie folgt aus:

Zeichnen Sie Ihre Szene in den Rückpuffer, eine einzigartige Farbe für jeden primitiven, die Sie auswählen möchten. Wenn Sie einen 24-Bit-Modus verwenden, können die Farben einfach # 000001, # 000002 usw. seine Beleuchtung ausschalten, Nebel etc., so dass die Farben, die Sie die genauen Farben die Pixel gehen nehmen angeben sind.

Do blitten den Back-Puffer nicht auf den Bildschirm (nicht glSwapBuffers verwenden). Verwenden Sie stattdessen glReadPixels den GL Back-Puffer in einen Speicherpuffer zu lesen. Danach haben Sie einen Speicher-Bitmap, die Sie einen Pixelwert aus, entsprechend der Position der Maus auf dem Bildschirm lesen kann. Der Farbwert Sie von diesem auslesen kann leicht dann auf den primitiven abgebildet werden (da es # 000001, # 000002 usw. gehen sein).

Hier einige mehr Informationen über diese Art der Auswahl . Dies ist, was ich mag zu verwenden, da es einen Vorteil gegenüber dem GL_SELECTION Modus hat. Wenn die 3D-Szene unveränderlich ist und die Maus darüber bewegt wird, kann ich einer der Back-Puffer kopiert und dann schätzen, schnell die Einheit unter der Maus ist, einfach durch Bezugnahme auf das entsprechende Pixel in meinem Speicher-Bitmap. Ich muss erst die Szene ändert überhaupt keine GL Anrufe verwenden. Da meine Anwendung viel die Maus über eine 3D-Szene hat, und ich muss schnell wissen, welche Unternehmen die Maus über schwimmt, fand ich diese Methode wirklich schnell.

Andere Tipps

Mit OpenGL Auswahlmodus ist der beste Weg, dies zu tun, da es beliebig komplexen Rendering verarbeiten kann, nicht nur Kugeln. Sie können viele Tutorials für diese sehen, aber in etwa: Sie starten von GL im Auswahlmodus einstellen:

glRenderMode (GL_SELECT);

Dann Sie die Szene ziehen, nachdem ein Selektionspuffer Einrichten dass Captures die Namen der Fragmente, die Sie machen. Diese Artikel erhalten Sie begonnen haben.

Nehe ist Tutorial ist lang, aber auch sehr gut .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top