问题描述
我正在尝试为单人游戏制作渲染库,目前正在绘制2D多边形。但是,这些职位没有任何意义。以某种方式将它们绘制在(0,0,0),(100。0,0),(0,100,0)和(100,100,0)不会到达左上角坐标(0,0 )。我该如何解决?
我的代码:
BasicEffect basicEffect = new BasicEffect(GraphicsDevice);
VertexPositionColor[] vert = new VertexPositionColor[4];
vert[0].Position = new Vector3(0,0);
vert[1].Position = new Vector3(100,0);
vert[2].Position = new Vector3(0,100,0);
vert[3].Position = new Vector3(100,0);
short[] ind = new short[6];
ind[0] = 0;
ind[1] = 2;
ind[2] = 1;
ind[3] = 1;
ind[4] = 2;
ind[5] = 3;
foreach (EffectPass effectPass in basicEffect.CurrentTechnique.Passes)
{
effectPass.Apply();
GraphicsDevice.DrawUserIndexedPrimitives<VertexPositionColor>(
PrimitiveType.TriangleList,vert,vert.Length,ind,ind.Length / 3);
}
解决方法
MonoGame对2D和3D坐标系使用不同的原点。在2D中,(0,0)是左上角,Y朝屏幕底部增加。在3D中,(0,0)是屏幕的中心,并且坐标网格的工作方式与数学中的非常相似-如果“展平” z,请在数学中考虑4个象限轴。
您要在第I象限中进行绘制。如果要基于左上角进行绘制,则需要按-1/2视口宽度和+ 1 /来平移顶点2您的视口高度。