この投稿に従って、GluLookAt タイプ マトリックスを作成しました。
Method calculateLookAtMatrix(glm::vec3 eye, glm::vec3 center, glm::vec3 up)
glm::vec3 zaxis = glm::normalize(center - eye);
glm::vec3 xaxis = glm::normalize(glm::cross(up, zaxis));
glm::vec3 yaxis = glm::cross(zaxis, xaxis);
lookAtMatrix[0][0] = xaxis.x;
lookAtMatrix[0][1] = yaxis.x;
lookAtMatrix[0][2] = zaxis.x;
lookAtMatrix[1][0] = xaxis.y;
lookAtMatrix[1][1] = yaxis.y;
lookAtMatrix[1][2] = zaxis.y;
lookAtMatrix[2][0] = xaxis.z;
lookAtMatrix[2][1] = yaxis.z;
lookAtMatrix[2][2] = zaxis.z;
lookAtMatrix[3][0] = glm::dot(xaxis, -eye);
lookAtMatrix[3][1] = glm::dot(yaxis, -eye);
lookAtMatrix[3][2] = glm::dot(zaxis, -eye);
lookAtMatrix[3][3] = 1;
そのCPU側を計算して、透視行列と同じようにユニフォームとしてシェーダーに渡します。
シェーダーはこんな感じ。
gl_Position = lookAtMatrix * position * perspectiveMatrix;
単位行列として lookAtMatrix を渡すと、シーンは正しくレンダリングされますが、上記のコードを使用して行列を次のように設定します ...
eye(0.0f,0.0f,10.0f);
center(0.0f,0.0f,0.0f);
up(0.0f,0.0f,1.0f);
空白のシーンになります。シーンは X/Y に描画された 10x10 のグリッドであるため、ズームアウトされたシーンのビューを期待していました。
(行と列で遊んでみましたが、パースペクティブ マトリックスは問題ないので、99.9% は問題ないと確信しています)