0

我使用 glMatrix 的方法:mat4.lookAt(out, eye, center, up)在渲染 WebGL 模型时设置相机视图。

渲染模型后,我需要center从视图/透视矩阵中检索属性。我知道如何检索该eye属性,但我不知道如何获取该属性center。我怎样才能做到这一点?

这是mat4.lookAt我使用的方法:http: //glmatrix.net/docs/mat4.js.html#line1366

4

1 回答 1

1

由于它已标准化,因此您无法获得实际的中心。您可以获得一个中心位置,该位置将产生相同的外观。我想会是这样。

camera = mat4.inverse(mat4.create(), view);
up = camera.slice(4, 7);
eye = camera.slice(12, 15);
negativeZ = camera.slice(8, 11);
center = vec3.scaleAndAdd(vec3.create(), eye, negativeZ, -1);

该中心将是眼前的一个单位。更改-1-1 * units使其远离眼睛。换句话说-2,前面是两个单位,前面-3是三个单位,等等。

这是一个测试

const eye = [1, 2, 3];
const center = [4, 5, 6];
const up = [0, 1, 0];
const view = mat4.lookAt(mat4.create(), eye, center, up);

const camera = mat4.invert(mat4.create(), view);
const newUp = camera.slice(4, 7);
const newEye = camera.slice(12, 15);
const negativeZ = camera.slice(8, 11);
const newCenter = vec3.scaleAndAdd(vec3.create(), newEye, negativeZ, -1);

const newView = mat4.lookAt(mat4.create(), newEye, newCenter, newUp);

// show difference between view and newView
console.log(view.map((v, i) => (v - newView[i]).toFixed(6)));
<script src="https://cdnjs.cloudflare.com/ajax/libs/gl-matrix/2.4.0/gl-matrix-min.js"></script>

本文解释了相机矩阵的组成部分以及视图矩阵是什么

于 2018-04-04T14:34:47.130 回答