Frage

Ich baue eine einfache 3D -Drag & Drop -Schnittstelle in der Verarbeitung auf und möchte erkennen, wann die Maus über ein Objekt rollt. Ich würde mir vorstellen, dass ich einige Matrixübersetzungen in die 3D -Modellkoordinaten durchführen muss, um sie in den Bildschirmbereich zu bringen, und so weiter ...

Ich habe eine einfache Version dieser Arbeit. Das Problem ist, dass ich, wenn die Kamera in der Szene bewegt wird, die Koordinaten, die ich werde, Heuwirblichkeit.

Wie übersetzt ich die Fliesenkoordinaten in den Bildschirmraum (da der ScreenX & Screeny nicht richtig funktioniert)?

AKTUALISIEREN:Ich habe schließlich zwei Beispiele von der Verarbeitungsstelle dazu gefunden, wie das geht. Dank an Villintehaspam.

http://processing.org/hacks/hacks:picking

War es hilfreich?

Lösung

Dieses Problem heißt Picking. Suchen Sie nach Mausauspflanzen und Sie erhalten viele, viele Hits.

Grundtheorie ist Folgendes:

  1. Holen Sie sich X-, Y -Koordnungen aus dem Mausklick.
  2. Konvertieren Sie diese in Augenkoordinaten in X-, Y-, Z -Koordinaten (dh -1 <= x <= 1, -1 <= y <= 1, z = nahe/far Clip -Entfernung, wenn Sie eine normale Projektion haben).
  3. Verwandeln Sie diese Koordinaten durch die Umkehrung der Projektionsmatrix, um Weltkoordinaten zu erhalten.
  4. Sie haben jetzt einen Strahl von der Kameraposition mit der Richtung zu den Weltkoordinaten, die Sie gerade erhalten haben.
  5. Machen Sie einen Strahl-Objekt-Schnitt-Test mit den Objekten, die Sie berücksichtigen möchten. Wählen Sie das Objekt aus, das den Strahl schneidet, der dem Strahlungsursprung am nächsten ist (Kameraposition).
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top