我正在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轴上的哪个位置?
答案 0 :(得分:1)
这样做的诀窍是直接在栅格空间中绘制矩形。这是GPU在实际渲染内容时所处的空间。
通常,您的模型从其自己的模型空间开始,您应用世界变换将其放入世界空间。然后应用视图变换来移动相机周围的点(以获得相机在世界各地移动的效果)。然后应用投影矩阵将所有这些点放入GPU用于绘制的空间中。
恰好这个空间总是 - 无论屏幕大小 - 从视口左下角的( - 1,-1)到(1, 1)在右上角(和Z轴上的0到1为深度)。
所以诀窍是将所有矩阵(世界,视图,项目)设置为Matrix.Identity
,然后从(-1,-1,0)到(1,1,0)绘制一个矩形。您可能还想设置DepthStencilState.None
,以便它不会影响深度缓冲区。
另一种方法是使用SpriteBatch
并绘制一个与Viewport
大小相同的矩形。