Erste-Person-Simulation mit three.js mit Tastaturpfeilen

8

Besuchen Sie für meine Quelle Ссылка

Hintergrund

Ich habe eine einfache 3D-Simulation mit drei .js, bei denen die Kamera in drei Dimensionen von Würfeln umgeben ist. Diese Würfel sollen helfen, zu visualisieren, wohin die Kamera schaut, bis die Ansichtssteuerungen codiert und getestet sind. Ich möchte eine einfache 3D-Anwendung erstellen, bei der die Kamera über hoch , runter , links und rechts gesteuert wird Schlüssel. So wie du deinen Kopf bewegst.

Probleme

In meiner aktuellen Anwendung sind wir erfolgreich, wenn wir nach vorne blicken und anfangen zu schauen. Wenn wir jedoch um 90 Grad nach links abbiegen, drücken wir den Aufwärtspfeil ... Das Falsche passiert. Die Kamera inkrementiert die X-Achse, aber da wir in eine andere Richtung schauen, ist das Ändern der X-Achse ALONE WRONG ...

Nun gehe ich davon aus, dass eine Trigonometrie erforderlich ist, um die richtigen Werte für die z-Achse zu berechnen. Meine Trigonometrie ist jedoch nicht brillant.

Aktuell

Um zu verstehen, was ich meine, besuchen Sie bitte meine Jsfiddle: Ссылка

UP Taste erhöht NUR X

DOWN Taste NUR dekrementiert X

LINKS Taste erhöht NUR Y

RECHTS Taste NUR dekrementiert Y

Q Taste erhöht nur Z

W Taste NUR dekrementiert Z

(Q und W wurden nur codiert, um zu versuchen, mir zu helfen zu verstehen.)

Nach meinem derzeitigen Verständnis muss X, wenn ich die AUFWÄRTS-Taste drücke, inkrementieren und die Z-Achse muss basierend auf der aktuellen Y-Achse geändert werden. Allerdings kenne ich den Algorithmus nicht: (

Also müssen X und Z im KEYUP-Code geändert werden (ich denke, korrigiere mich bitte, wenn ich falsch liege)

%Vor%     
AlexMorley-Finch 06.11.2012, 23:52
quelle

3 Antworten

4

Es gibt eine Reihe von Lösungen für dieses Problem, aber da die Kamera nur nach oben, unten, links und rechts gedreht werden soll, ist die Antwort in diesem Fall einfach.

Sie müssen nur die Kamera Euler-Ordnung wie folgt auf "YXZ" setzen:

%Vor%

Wenn Sie das tun, wird alles sehr intuitiv.

Hier ist eine aktualisierte Geige: Ссылка (diese Demo verwendet jedoch r.54)

Sobald Sie camera.rotation.z vom Standardwert von zero ändern, werden die Dinge sehr verwirrend. Also tu das nicht. : -)

drei.js r.65

    
WestLangley 07.11.2012, 03:12
quelle
3

Obwohl dies Ihren Code nicht direkt repariert, dachte ich mir, dass Three.js zwei vorgefertigte Controller zur Verfügung stellt, um im FPS-Modus zu navigieren. Sie benutzen beide die Maus zum Schauen und können sich bewegen, sollten aber relativ einfach an das Aussehen der Tastatur angepasst werden und bei Bedarf die Bewegung entfernen. Sie sind:

Ich würde letzteres als einen Anfangspunkt empfehlen, weil es ziemlich einfach ist und der erstere verwirrend den suchenden Code zweimal hat, wahrscheinlich als ein Artefakt von alten Merkmalen.

    
Tapio 07.11.2012 07:14
quelle
3
___ qstnhdr ___ Erste-Person-Simulation mit three.js mit Tastaturpfeilen ___ tag123javascript ___ JavaScript (nicht zu verwechseln mit Java) ist eine dynamische Sprache mit mehreren Paradigmen auf hoher Ebene, die sowohl für das clientseitige als auch für das serverseitige Scripting verwendet wird. Verwenden Sie dieses Tag für Fragen zu ECMAScript und seinen verschiedenen Dialekten / Implementierungen (außer ActionScript und Google-Apps-Script). ___ tag123canvas ___ Canvas ist ein generisches Element für die Ausgabe von Grafiken in freier Form. ___ tag123webgl ___ WebGL erweitert die Fähigkeit des HTML-Canvas-Elements, beschleunigte Grafiken in jedem kompatiblen Webbrowser darzustellen. ** NICHT TAG FRAGEN ÜBER 3D-BIBLIOTHEKEN (wie THREE.js) MIT DIESEM TAG **, es sei denn, die Frage bezieht sich speziell auf eine WebGL-API-Funktion ___ tag123threejs ___ Three.js ist eine browserübergreifende JavaScript-Bibliothek / API, mit der animierte 3D-Computergrafiken in einem Webbrowser erstellt und angezeigt werden können. Three.js-Skripte können in Verbindung mit dem HTML5-Canvas-Element SVG oder WebGL verwendet werden. ___ answer13264858 ___

Obwohl dies Ihren Code nicht direkt repariert, dachte ich mir, dass Three.js zwei vorgefertigte Controller zur Verfügung stellt, um im FPS-Modus zu navigieren. Sie benutzen beide die Maus zum Schauen und können sich bewegen, sollten aber relativ einfach an das Aussehen der Tastatur angepasst werden und bei Bedarf die Bewegung entfernen. Sie sind:

Ich würde letzteres als einen Anfangspunkt empfehlen, weil es ziemlich einfach ist und der erstere verwirrend den suchenden Code zweimal hat, wahrscheinlich als ein Artefakt von alten Merkmalen.

    
___ qstntxt ___

Besuchen Sie für meine Quelle Ссылка

Hintergrund

Ich habe eine einfache 3D-Simulation mit drei .js, bei denen die Kamera in drei Dimensionen von Würfeln umgeben ist. Diese Würfel sollen helfen, zu visualisieren, wohin die Kamera schaut, bis die Ansichtssteuerungen codiert und getestet sind. Ich möchte eine einfache 3D-Anwendung erstellen, bei der die Kamera über hoch , runter , links und rechts gesteuert wird Schlüssel. So wie du deinen Kopf bewegst.

Probleme

In meiner aktuellen Anwendung sind wir erfolgreich, wenn wir nach vorne blicken und anfangen zu schauen. Wenn wir jedoch um 90 Grad nach links abbiegen, drücken wir den Aufwärtspfeil ... Das Falsche passiert. Die Kamera inkrementiert die X-Achse, aber da wir in eine andere Richtung schauen, ist das Ändern der X-Achse ALONE WRONG ...

Nun gehe ich davon aus, dass eine Trigonometrie erforderlich ist, um die richtigen Werte für die z-Achse zu berechnen. Meine Trigonometrie ist jedoch nicht brillant.

Aktuell

Um zu verstehen, was ich meine, besuchen Sie bitte meine Jsfiddle: Ссылка

UP Taste erhöht NUR X

DOWN Taste NUR dekrementiert X

LINKS Taste erhöht NUR Y

RECHTS Taste NUR dekrementiert Y

Q Taste erhöht nur Z

W Taste NUR dekrementiert Z

(Q und W wurden nur codiert, um zu versuchen, mir zu helfen zu verstehen.)

Nach meinem derzeitigen Verständnis muss X, wenn ich die AUFWÄRTS-Taste drücke, inkrementieren und die Z-Achse muss basierend auf der aktuellen Y-Achse geändert werden. Allerdings kenne ich den Algorithmus nicht: (

Also müssen X und Z im KEYUP-Code geändert werden (ich denke, korrigiere mich bitte, wenn ich falsch liege)

%Vor%     
___ antwort13291338 ___

Ich habe ein Beispiel für genau das geschaffen, wonach du suchst - eine Jagdkamera (die einer Kiste folgt) unter:

Ссылка

    
___ answer13262612 ___

Es gibt eine Reihe von Lösungen für dieses Problem, aber da die Kamera nur nach oben, unten, links und rechts gedreht werden soll, ist die Antwort in diesem Fall einfach.

Sie müssen nur die Kamera Euler-Ordnung wie folgt auf "YXZ" setzen:

%Vor%

Wenn Sie das tun, wird alles sehr intuitiv.

Hier ist eine aktualisierte Geige: Ссылка (diese Demo verwendet jedoch r.54)

Sobald Sie %code% vom Standardwert von %code% ändern, werden die Dinge sehr verwirrend. Also tu das nicht. : -)

drei.js r.65

    
___
Lee Stemkoski 08.11.2012 14:50
quelle

Tags und Links