C# xna中的斜投影

C# xna中的斜投影,c#,math,xna,directx,projection-matrix,C#,Math,Xna,Directx,Projection Matrix,我正在尝试在xna框架中实现斜投影() float cos = (float)Math.Cos(DegreeToRadian(45)) * -1; float sin = (float)Math.Sin(DegreeToRadian(45)) * -1; Matrix obliqueProjection = new Matrix( 1, 0, cos, 0,

我正在尝试在xna框架中实现斜投影()

float cos = (float)Math.Cos(DegreeToRadian(45)) * -1; 
float sin = (float)Math.Sin(DegreeToRadian(45)) * -1; 

Matrix obliqueProjection = new Matrix( 
                                  1, 0, cos, 0, 
                                  0, 1, sin, 0, 
                                  0, 0, 1,   0, 
                                  0, 0, 0,   1); 

Matrix orthographicProjection = Matrix.CreateOrthographic(10, 10, -1, 100000); 

projection = orthographicProjection*obliqueProjection; 
正如你们所看到的,我只是将正交投影和斜投影相乘

我得到的是:

这基本上就是正交投影的样子,但是有一些奇怪的远剪裁

如何实现正确的斜投影?
Thx提前

对于初学者,您可以实施正确的公式


维基百科的文章说,投影矩阵使用了
0.5*cos
0.5*sin
,而您的版本只使用了
cos
sin

,对于初学者,您可以实现正确的公式

维基百科的文章说,投影矩阵使用
0.5*cos
0.5*sin
,而您的版本只使用
cos
sin

,Diki回答:

代码需要这样更改:

Matrix obliqueProjection = new Matrix(  
                                  1,   0,   0,   0,  
                                  0,   1,   0,   0,  
                                  cos, sin, 1,   0,  
                                  0,   0,   0,   1);  

projection = obliqueProjection * orthographicProjection;  
迪基回答:

代码需要这样更改:

Matrix obliqueProjection = new Matrix(  
                                  1,   0,   0,   0,  
                                  0,   1,   0,   0,  
                                  cos, sin, 1,   0,  
                                  0,   0,   0,   1);  

projection = obliqueProjection * orthographicProjection;  

注意,矩阵乘法通常是不可交换的,AB和BA不一样。没有im使用cos(45)*-1,根据这篇文章:注意矩阵乘法通常是不可交换的,AB和BA不一样。没有im使用cos(45)*-1,根据这篇文章:如果你想做正交投影,那么斜投影,你必须颠倒乘法的顺序。在第三列中应该是cos/2,sin/2,0,0,如果你想用斜投影,你必须颠倒乘法的顺序。第三列应该是cos/2,sin/2,0,0