从 view/perspective 矩阵中检索观众正在看的中心点

Retrieve center point the viewer is looking at from view/perspective matrix

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

渲染模型后,我需要从 view/perspective 矩阵中检索 center 属性。我知道如何检索 eye 属性,但不知道如何获取 center 属性。我该怎么做?

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

您无法获得实际的中心,因为它已被标准化。您可以获得将产生相同外观的中心位置。我想应该是这样。

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 是前面 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>

This article explains the parts of a camera matrix and what a view matrix is.