我使用 glMatrix 的方法:mat4.lookAt(out, eye, center, up)
在渲染 WebGL 模型时设置相机视图。
渲染模型后,我需要center
从视图/透视矩阵中检索属性。我知道如何检索该eye
属性,但我不知道如何获取该属性center
。我怎样才能做到这一点?
这是mat4.lookAt
我使用的方法:http:
//glmatrix.net/docs/mat4.js.html#line1366
我使用 glMatrix 的方法:mat4.lookAt(out, eye, center, up)
在渲染 WebGL 模型时设置相机视图。
渲染模型后,我需要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
是三个单位,等等。
这是一个测试
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>