Matrix WebGL LookAt在-z上工作,但在+;Z

Matrix WebGL LookAt在-z上工作,但在+;Z,matrix,graphics,3d,webgl,Matrix,Graphics,3d,Webgl,我正在尝试在WebGL中构建自己的camera类,以便于学习。它几乎完成了,但是我对lookAt函数有一个小问题。如果我在-z方向上平移对象,那么它会工作得很好,但一旦我在+z方向上移动它,它的行为就好像它在做相反的事情,如果我上下移动相机,对象将开始在屏幕上伸展 这就是我目前拥有的: var zAxis = new Vector(cameraPosition.x, cameraPosition.y, cameraPosition.z) .subtract(target) .no

我正在尝试在WebGL中构建自己的camera类,以便于学习。它几乎完成了,但是我对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);

有人知道我做错了什么吗?

我想你需要发布更多的代码。你是如何使用这个矩阵的?你的着色器是什么样子的。我认为您需要在着色器中使用该矩阵的逆矩阵。您应该将
lookAt
实现与glMatrix实现进行比较,看看它们是否返回相同的结果。