簡體   English   中英

Threejs相機旋轉問題

[英]Threejs camera rotation problems

我知道這是一個有據可查的問題,我已經進行了廣泛搜索,嘗試了所有發現的解決方案,但是,我無法走最后一步。 我有一個添加了相機的3D對象,並且正在嘗試使第一人稱設置工作(相機的順序設置為YXZ),並且當我嘗試在x軸上旋轉對象時,產生的運動是。 ..奇。 y旋轉(即向左/向右看)工作正常。 如果我在模擬開始時更改x旋轉,則向上和向下搜索也可以,但只要我向左或向右看,然后嘗試向上/向下搜索,它就會以最奇怪的角度旋轉,從而形成場景螺旋。 這是一些代碼:

                camera = new THREE.PerspectiveCamera( 75, window.innerWidth / window.innerHeight, 1, 1000 );             

                neck = new THREE.Object3D();
                neck.rotateOnAxis(new THREE.Vector3(1, 0, 0), degInRad(90));
                neck.up = new THREE.Vector3(0, 0, 1);
                neck.position.z = 10;
                neck.position.y = -5;
                neck.add(camera);
                scene.add(neck);

                if (leftPressed) {
                        neck.rotation.y += degInRad(1);  //look left
                } else if (rightPressed) {
                    neck.rotation.y -= degInRad(1);      //look right
                }
                if (upPressed) {
                    neck.rotation.x += degInRad(1);      //look up
                } else if (downPressed) {
                    neck.rotation.x -= degInRad(1);      //look down
                }

編輯我已經閱讀了關於這個問題的更多github問題,並了解了訂單旋轉的問題。 我猜我的問題的一個或更尖銳的版本是:如何更改lookAt()(或使用任何其他方法),以便更改x旋轉不會影響y旋轉?

如何為頸部創建另一個節點(Object3D)。 這個想法是使用兩個分開的坐標進行旋轉。 然后,您可以在y軸旋轉新節點,並在x軸旋轉頸部。 提示:不要忘記將頸部添加到新的Object3d節點。

.......
var neckNode = new THREE.Object3D();
neckNode.add(neck);
scene.add(neckNode);
.......
if (leftPressed) {
    neckNode.rotation.y += degInRad(1);  //look left
} else if (rightPressed) {
    neckNode.rotation.y -= degInRad(1);  //look right
}
if (upPressed) {
    neck.rotation.x += degInRad(1);      //look up
} else if (downPressed) {
    neck.rotation.x -= degInRad(1);      //look down
}

希望能幫助到你。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM