我想找到某个世界点的去标准化投影Z值。
我目前能够通过mrdoob在这里显示的内容得到投射X,Y值:https://stackoverflow.com/a/11605007
该示例显示了如何对投影X,Y进行去标准化(将其从范围[-1,1]取为实际的屏幕坐标)。它没有显示如何对投影Z进行去标准化。这些投射Z值也在[-1,1]的范围内,但我不知道如何对它们进行去标准化。
在代码中构建问题,建立在mrdoob的答案上面:
var width = 640, height = 480;
var widthHalf = width / 2, heightHalf = height / 2;
var projector = new THREE.Projector();
// this could be any point; using example from mrdoob's answer
var someWorldPoint = object.matrixWorld.getPosition().clone();
var vector = projector.projectVector(someWorldPoint, camera );
vector.x = ( vector.x * widthHalf ) + widthHalf;
vector.y = - ( vector.y * heightHalf ) + heightHalf;
// what does vector.z represent and how do I de-normalize vector.z?
感谢您的帮助。如果我的任何术语不正确或令人困惑,请更正。
答案 0 :(得分:0)
z值用于深度排序。它并不打算“去标准化”。
near
平面映射到z = -1,far
平面映射到z = 1.
平截头体内的点将映射到介于-1和1之间的z值。(但是,映射不是线性的。)