如何在xna中定义正交视图?

时间:2010-02-07 16:15:11

标签: xna

如果我想要区域(-10,-1),( - 2,-1),( - 2,-7),( - 10,-7)的正交视图,我该如何定义视图和投影矩阵? (我将世界矩阵设置为标识)。我试过这个,但它不起作用:

worldMatrix = Matrix.Identity;
projectionMatrix = Matrix.CreateOrthographicOffCenter(-10,-2,-7,-1,-1.0f,100.0f);
viewMatrix = Matrix.CreateTranslation(1, -1, 0) * Matrix.CreateScale(400,-300,1);

我假设这个转换顺序:(它是否正确?)

screenPoint = worldPoint*worldMatrix*projectionMatrix*viewMatrix

我的动机是projectionMatrix将世界框转换为正常设备坐标:( - 10,-1) - >( - 1,1),( - 2,-1) - >(1, 1),( - 2,-7) - >(1,-1),( - 10,-7) - >( - 1,-1)然后我将该单位正方形移动到第四象限的刻度它到屏幕尺寸(800x600)并翻转y方向。但我做错了,因为我什么也看不见。

1 个答案:

答案 0 :(得分:4)

解决!

我的问题是我错误地将视图转换视为视口转换,即应将-1 .. 1映射到屏幕。

但是在xna中从未谈到视口转换,它们是隐含的。这种见解帮助了很多。解决方案变得非常简单:

worldMatrix = Matrix.Identity; 
viewMatrix = Matrix.Identity; 
projectionMatrix = Matrix.CreateOrthographicOffCenter(-10, -2, -7, -1, -1.0f, 100.0f);