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

如何在xna中定义正交视图?,xna,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) * Mat

如果我想要区域的正交视图(-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);
我假设这个转换顺序:(正确吗?)

我这样做的动机是,projectionMatrix将世界框转换为标准化设备坐标:(-10,-1)->(-1,1),(-2,-1)->(1,1),(-2,-7)->(1,-1),(-10,-7)->(-1,-1),然后我将这个单位正方形移动到第四象限,将其缩放到屏幕大小(800x600)并翻转y方向。但我做错了,因为我什么也看不见。

解决了

我的问题是,我把视图转换误认为是视口转换,即应该映射-1。。1到屏幕

但在xna中从未讨论过视口变换,它们是隐式的。这一见解帮助很大。结果证明,解决方案非常简单:

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

断然的!我的问题是,我把视图转换误认为是视口转换,即应该映射-1。。1到屏幕。但在xna中,视口变换是较新的,它们是隐式的。这一见解帮助很大。结果证明,解决方案非常简单:worldMatrix=Matrix.Identity;viewMatrix=Matrix.Identity;projectionMatrix=矩阵。创建正交偏心(-10,-2,-7,-1,-1.0f,100.0f);你能把它作为你自己问题的答案,并把它标记为答案,这样它就不会出现在“未回答的问题”部分吗?
worldMatrix = Matrix.Identity; 
viewMatrix = Matrix.Identity; 
projectionMatrix = Matrix.CreateOrthographicOffCenter(-10, -2, -7, -1, -1.0f, 100.0f);