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 轴的哪个位置吗?

4

1 回答 1

1

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

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

碰巧这个空间总是 - 无论屏幕大小 - 从视口左下角的(-1,-1)到右上角的(1,1)(以及从 0 到 1 Z 轴表示深度)。

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


另一种方法是仅使用SpriteBatch并绘制一个与Viewport.

于 2012-08-30T12:29:00.303 回答