glm::project の出力からオブジェクト位置の z バッファを計算したいと思います。以下のコードの z-buffer の計算は、https://en.wikipedia.org/wiki/Z-bufferingからのものです。
私が試したこと
int windowWidth = 800;
int windowHeight = 600;
float positions[] = {-42.5806f, 27.8838f, 49.9729f} // Example point
glm::mat4 model;
glm::mat4 view;
glm::mat4 proj;
view = glm::lookAt(
glm::vec3( 0.0f, 0.0f, 2.0f ),
glm::vec3( 0.0f, 0.0f, 0.0f ),
glm::vec3( 0.0f, 1.0f, 0.0f )
);
proj = glm::perspective( 45.0f, aspect, 0.1f, 10.0f );
// Get screen coordinates from an object point
glm::vec3 screenCoords = glm::project(
glm::vec3( positions[0], positions[1] , positions[2] ),
view*model,
proj,
glm::vec4( 0, 0, windowWidth, windowHeight )
);
// Calculating the z-buffer
int zFar = 10;
int zNear = 0.1;
float zBufferValue = (zFar+zNear ) / ( zFar-zNear ) + ( 1/screenCoords.z) * ( ( -2*zFar*zNear ) / ( zFar - zNear ) );
問題
モデルをどのように回転させても、どのポイントを使用しても、zBufferValue の値は 1 です。wiki ページによると、値は -1 (近い面) から 1 (遠い面) の間である必要があります。
計算で何が間違っていますか?