シンプルな 3D エンジン (API を使用せずに) を開発し、シーンをワールドとビュー空間に正常に変換しましたが、透視投影マトリックス (OpenGL スタイル) を使用して (ビュー空間から) シーンを投影するのに問題があります。fov、near、far の値がよくわからず、取得したシーンが歪んでいます。サンプルコードを使用して、透視投影マトリックスを適切に構築および使用する方法を誰かが教えてくれることを願っています。助けてくれてありがとう。
マトリックス ビルド:
double f = 1 / Math.Tan(fovy / 2);
return new double[,] {
{ f / Aspect, 0, 0, 0 },
{ 0, f, 0, 0 },
{ 0, 0, (Far + Near) / (Near - Far), (2 * Far * Near) / (Near - Far) },
{ 0, 0, -1, 0 }
};
マトリックスの使用:
foreach (Point P in T.Points)
{
.
. // Transforming the point to homogen point matrix, to world space, and to view space (works fine)
.
// projecting the point with getProjectionMatrix() specified in the previous code :
double[,] matrix = MatrixMultiply( GetProjectionMatrix(Fovy, Width/Height, Near, Far) , viewSpacePointMatrix );
// translating to Cartesian coordinates (from homogen):
matrix [0, 0] /= matrix [3, 0];
matrix [1, 0] /= matrix [3, 0];
matrix [2, 0] /= matrix [3, 0];
matrix [3, 0] = 1;
P = MatrixToPoint(matrix);
// adjusting to the screen Y axis:
P.y = this.Height - P.y;
// Printing...
}