Basit bir 3B motoru geliştiririm (API'nin herhangi bir kullanımı olmadan), sahneyi dünyaya başarılı bir şekilde dönüştürdüm ve mekanı görüntüledim ancak bakış açımı kullanarak sahneyi yansıtan bir sorunum var (görüş alanından) izdüşüm matrisi (OpenGL stili). Fov, yakın ve uzak değerler hakkında emin değilim ve aldığım sahne çarpıtılmış. Birisi örnek kodlar ile perspektif izdüşümü matrisini nasıl oluşturup kullanacağımı bana yönlendirirse umarım. Herhangi bir yardım için şimdiden teşekkür ederiz.Perspektif izdüşümü matrisi oluşturma (API yok)
matris oluşturma:
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 }
};
matris kullanımı:
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...
}
http://www.scratchapixel.com/lessons/3d-basic-rendering:
Bu seferki sağ/sol/üst/alt/(OpenGL kullanılan) uzak/yakın parametrelerine dayalıdır/perspektif ve ortografik yansıtma matrisi Ayrıca önceki dersleri de öneriyorum (projeksiyon noktaları ve 3D görüntüleme). – user18490