从 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.
我使用 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.