Der Titel sagt so ziemlich alles. Ich arbeite an einem einfachen Projekt, bei dem wir uns an das Würfeln gewöhnen müssen, bei dem der Zauberwürfel manipuliert wird, und ich kann nicht herausfinden, auf welche Seite / welches Quadrat der Benutzer zeigt.
9
Antworten:
Sie möchten die 3D-Auswahl verwenden. Hier ist ein Code, den ich in meinem Spiel verwende.
Zuerst warf ich einen Strahl von meiner Kamera. Ich benutze die Maus, aber wenn Sie nur dort verwenden, wo der Benutzer hinschaut, können Sie einfach die Mitte des Fensters verwenden. Dies ist der Code aus meiner Kameraklasse:
Dann folge ich dem Strahl, bis er sich mit einem Objekt schneidet. Sie können dies mit Begrenzungsrahmen oder Ähnlichem tun, da dies spezifisch für Ihr Spiel ist. Ich werde Sie damit umgehen lassen. Im Allgemeinen geschieht dies, indem Sie dem Strahl folgen (indem Sie die Richtung des Strahls immer wieder zu seinem Startpunkt hinzufügen, bis Sie auf etwas stoßen).
Als nächstes möchten Sie sehen, welches Gesicht ausgewählt wird. Sie können dies tun, indem Sie über die Dreiecke in Ihrem Würfel iterieren, um zu sehen, ob der Strahl sie schneidet. Die folgende Funktion macht das und gibt den Abstand zum ausgewählten Gesicht zurück. Dann verwende ich nur das geschnittene Gesicht, das der Kamera am nächsten liegt (damit Sie nicht das hintere Gesicht auswählen).
Das Dreieck mit dem kürzesten Abstand ist das ausgewählte Dreieck. Außerdem, schamloser Plug für mein Spiel, solltest du es dir ansehen, ihm folgen und in den Umfragen abstimmen, die ich gelegentlich herausbringe. Vielen Dank! http://byte56.com
quelle
Die Technik, nach der Sie suchen, heißt "Kommissionieren" oder "3D-Kommissionieren". Es gibt verschiedene Möglichkeiten, dies zu tun. Eine der gebräuchlichsten ist die Umwandlung eines 2D-Punkts auf dem Bildschirm in den Augenraum unter Verwendung der Umkehrung der Projektionstransformation. Auf diese Weise können Sie einen Strahl im Ansichtsraum erzeugen, mit dem Sie die Kollision mit der physischen Darstellung Ihrer verschiedenen Teile der Szenengeometrie testen können, um zu bestimmen, welches Objekt der Benutzer "getroffen" hat.
Sie können auch einen "Kommissionierpuffer" (oder "Auswahlpuffer") verwenden, den der GL unterstützt. Dies beinhaltet im Wesentlichen das Schreiben einer eindeutigen Objektkennung in einen Puffer für jedes Pixel und das einfache Testen dieses Puffers.
Die OpenGL-FAQ enthält kurze Erläuterungen zu beiden Themen (sie konzentriert sich mehr auf den Auswahlpuffer, da dies vollständig eine GL-Funktion ist; Ray Picking ist API-unabhängig, außer möglicherweise zum Extrahieren der aktiven Matrizen aus der Pipeline). Hier ist ein spezifischeres Beispiel für die Ray-Picking-Technik (für iOS, aber es sollte leicht genug zu übersetzen sein). Diese Site enthält Quellcode zu einigen der auf LWJGL portierten OpenGL Red Book-Beispiele, einschließlich einer Auswahldemo.
Siehe auch diese Frage zu SO.
quelle