Three.js: Flächenauswahl

Erstellt am 27. Apr. 2012  ·  5Kommentare  ·  Quelle: mrdoob/three.js

Hallo, erstens tut es mir wirklich leid, wenn ich hier nicht allgemeine Fragen stellen soll?

Gibt es ein Beispiel für die "Flächenauswahl" mehrerer 3D-Objekte? Das heißt, einen Rahmen mit der Maus ziehen und alle darin enthaltenen Objekte auswählen?

Ich habe mit dem THREE.Ray-Objekt und seinen Schnittmethoden gespielt, aber es fehlt mir, jede XY-Koordinate zu durchlaufen und zu verfolgen, um alle Schnittpunkte zu finden. Ich bin ein bisschen verloren.

Ich habe mich im Internet und durch Github- und Stack-Überlauf umgesehen, aber keine Hilfe gefunden.
Jede Hilfe sehr geschätzt.

Danke im Voraus
Julz

Question

Hilfreichster Kommentar

Ich habe das Auswahlbeispiel für three.js an die Bereichsauswahl angepasst, indem ich einen Subfrustum verwendet habe, der auf einem Rechteck des Bildschirms basiert. Klicken und ziehen Sie zur Auswahl. Es fühlt sich nicht so genau an, als würde man alle 3D-Objekte auf den 2D-Bildschirmbereich projizieren und sich dann mit dem Bildschirmrechteck schneiden , aber es funktioniert anständig und ich denke, es ist schneller.

Relevante Fragen beim Stapelüberlauf:
THREE.js So erkennen Sie den Schnittpunkt eines 2D-Quadrats und eines 3D-Objekts
THREE.js So wählen Sie alle Objekte in einem Bereich aus

Alle 5 Kommentare

Es ist besser, wenn Sie Ihre Objekte in der Szene nachverfolgen, als alle XY-Koordinaten zu durchlaufen. In diesem Fall können Sie THREE.Ray nicht verwenden und müssen eine benutzerdefinierte Logik implementieren, um herauszufinden, ob sich ein Objekt innerhalb des Frames befindet. Ich glaube, dieser Ansatz wird Ihren Code drastisch beschleunigen.

Hmmm, das ist ein interessantes Problem.

Ich denke, das Rechteck auf dem Bildschirm sollte einem Teilfrustum der Kamera entsprechen. Wenn Sie eine Matrix für diesen Kegelstumpf erstellen könnten, könnten Sie versuchen, die gleiche Prüfung wie bei der Kegelstumpf-Keulung durchzuführen.

Ja, das macht Sinn.
Ich bin nicht viel für 3D-Koordinaten oder komplexe Matrizen.
Wenn ich eine THREE.Matrix4 definiere, indem ich rechteckige Scheitelpunkte (Ziehen mit der Maus) und nahe ferne Punkte an die Matrix4.makeFrustum-Methode übergebe.
Könnte ich dann ein THREE.Frustum erstellen, indem ich die Matrix4 an die Frustum.setFromMatrix-Methode übergebe?
Verwenden Sie dann die Methode Frustum.contains, um festzustellen, ob sich ein Objekt darin befindet.

Klingt das so, als hätte es eine Hoffnung auf die Hölle der Arbeit?

Beziehen sich die Mauskoordinaten auf 3D-Weltkoordinaten? Wie ist die Mausposition relativ zu den Kameras in der Nähe des Flugzeugs oder so ähnlich?

Entschuldigung, wenn ich nur ein n00b bin, brauche ich wirklich eine Antwort darauf.

Sie müssen die Mauskoordinaten auf die 3D-Welt projizieren. Schauen Sie sich dieses Beispiel an:
http://mrdoob.github.com/three.js/examples/webgl_interactive_cubes.html

Ich habe das Auswahlbeispiel für three.js an die Bereichsauswahl angepasst, indem ich einen Subfrustum verwendet habe, der auf einem Rechteck des Bildschirms basiert. Klicken und ziehen Sie zur Auswahl. Es fühlt sich nicht so genau an, als würde man alle 3D-Objekte auf den 2D-Bildschirmbereich projizieren und sich dann mit dem Bildschirmrechteck schneiden , aber es funktioniert anständig und ich denke, es ist schneller.

Relevante Fragen beim Stapelüberlauf:
THREE.js So erkennen Sie den Schnittpunkt eines 2D-Quadrats und eines 3D-Objekts
THREE.js So wählen Sie alle Objekte in einem Bereich aus

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen