WebGL LookAt适用于-z但是打破了+ z?

时间:2016-03-19 23:00:04

标签: matrix graphics 3d webgl

我试图在WebGL中构建自己的相机类用于学习目的。它几乎完成了但是我对lookAt函数有一个小问题。如果我在-z方向上翻译我的对象然后它会正常工作但是一旦我在+ z方向上移动它就好像它正在做相反的操作,如果我移动,对象将开始在屏幕上伸展相机向上或向下。

这就是我目前所拥有的:

var zAxis = new Vector(cameraPosition.x, cameraPosition.y, cameraPosition.z)
    .subtract(target)
    .normalize();

var xCross = math.cross(up.flatten(3), zAxis.flatten(3));
var xAxis = new Vector(xCross[0], xCross[1], xCross[2]).normalize();

var yCross = math.cross(zAxis.flatten(3), xAxis.flatten(3));
var yAxis = new Vector(yCross[0], yCross[1], yCross[2]).normalize();

var orientation = [
    xAxis.x, xAxis.y, xAxis.z, 0,
    yAxis.x, yAxis.y, yAxis.z, 0,
    zAxis.x, zAxis.y, zAxis.z, 0,
    0, 0, 0, 1
];

var translation = [
    1, 0, 0, 0,
    0, 1, 0, 0,
    0, 0, 1, 0,
    cameraPosition.x, cameraPosition.y, cameraPosition.z, 1
];

this.multiply(translation);
this.multiply(orientation);

有谁知道我做错了什么?

0 个答案:

没有答案