javascript - 在 ThreeJS 中手动设置相机矩阵

标签 javascript matrix 3d camera three.js

我正在尝试在一个简单的 three.js 场景中手动设置相机的矩阵。我已经尝试结合 matrixAutoUpdate = false 调用 matrix.set 方法,但是当场景最初呈现时,它不会像我希望的那样随着时间而改变。我也尝试使用 camera.matrix = 设置矩阵,结果相同。让我觉得我错过了一些关于如何让对象“接受”手动设置值的信息。我也尝试过 applyMatrix ,但这似乎完全做了其他事情。

非常感谢任何建议 - 谢谢!

以下是实际代码中的一支笔:

http://codepen.io/heyscam/pen/phflL

这里只是 JS:

var WIDTH = 640;
var HEIGHT = 360;

var VIEW_ANGLE = 31.417;
var ASPECT = WIDTH / HEIGHT;
var NEAR = 0.1;
var FAR = 10000;

var $container = $('#container');
console.log($container);

var renderer = new THREE.WebGLRenderer();
renderer.setSize(WIDTH, HEIGHT);
$container.append(renderer.domElement);

var scene = new THREE.Scene();

var camera = new THREE.PerspectiveCamera(
  VIEW_ANGLE,
  ASPECT,
  NEAR,
  FAR
);
scene.add(camera);

var cube = new THREE.Mesh(
  new THREE.CubeGeometry(200, 200, 200)
);
scene.add(cube);

var frame = 0;

animate();

function animate() {
    camera.matrixAutoUpdate = false;
    camera.matrix.set(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 500 + (frame * 10), 0, 0, 0, 1);
    render();
    frame++;
    requestAnimationFrame(animate);
}

function render() {
    renderer.render(scene, camera);
}

最佳答案

设置好相机矩阵后,需要调用

camera.updateMatrixWorld( true );

你正在做的事情是不可取的。

three.js 不是为这种方式设计的。最好不要直接弄乱对象矩阵——除非你真的知道自己在做什么,并且了解库的内部工作原理。

相反,只需设置相机的 quaternion (或 rotation ),position , 和 scale ,并让库更新矩阵。

三.js r.60

关于javascript - 在 ThreeJS 中手动设置相机矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18470156/

相关文章:

javascript - 语义 UI 模式未正确显示

flash - Flash 中的透视

python - 如何对存储为嵌套列表的巨大矩阵 (100000x100000) 进行操作?

android - Opengl 纹理在某些 android 设备中闪烁

algorithm - 将网格划分为四面体?

javascript - 检测 div 何时溢出

javascript - 如何突出显示所有匹配的字符串

javascript - 检索.val()时,jQuery取消选择输入字段?

matlab - 创建包含来自另一个数组的连续数字的新矩阵

c++ - 如何在MFC C++中显示矩阵