0

いくつかのワールド ポイントの非正規化された射影 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?

ご協力いただきありがとうございます。私の用語のいずれかが正しくないか混乱している場合は、修正してください。

4

1 に答える 1

0

Z 値は深度ソートに使用されます。「非正規化」することを意図したものではありません。

near平面は z = -1 にマッピングされ、平面farは z = 1 にマッピングされます。

フラスタム内のポイントは、-1 から 1 の間の Z 値にマッピングされます (ただし、マッピングは線形ではありません)。

于 2013-02-02T14:56:47.780 に答える