使用XNA将矩形拟合到屏幕中

时间:2012-08-30 12:06:05

标签: c# xna xna-4.0

我正在XNA中绘制一个带基元的矩形。宽度为:

width = GraphicsDevice.Viewport.Width 

,高度为

height = GraphicsDevice.Viewport.Height

我试图在屏幕上使用这个矩形(使用不同的屏幕和设备),但我不确定将相机放在Z轴上的哪个位置。有时候相机太近了,有时候太远了。

这是我用来获取相机距离的原因:

//Height of piramid
float alpha = 0;
float beta = 0;
float gamma = 0;

alpha = (float)Math.Sqrt((width / 2 * width/2) + (height / 2 * height / 2));
beta = height / ((float)Math.Cos(MathHelper.ToRadians(67.5f)) * 2);
gamma = (float)Math.Sqrt(beta*beta - alpha*alpha);

position = new Vector3(0, 0, gamma);

知道将相机放在Z轴上的哪个位置?

1 个答案:

答案 0 :(得分:1)

这样做的诀窍是直接在栅格空间中绘制矩形。这是GPU在实际渲染内容时所处的空间。

通常,您的模型从其自己的模型空间开始,您应用世界变换将其放入世界空间。然后应用视图变换来移动相机周围的点(以获得相机在世界各地移动的效果)。然后应用投影矩阵将所有这些点放入GPU用于绘制的空间中。

恰好这个空间总是 - 无论屏幕大小 - 从视口左下角的( - 1,-1)(1, 1)在右上角(和Z轴上的0到1为深度)。

所以诀窍是将所有矩阵(世界,视图,项目)设置为Matrix.Identity,然后从(-1,-1,0)到(1,1,0)绘制一个矩形。您可能还想设置DepthStencilState.None,以便它不会影响深度缓冲区。


另一种方法是使用SpriteBatch并绘制一个与Viewport大小相同的矩形。