C# MonoGame VertexPositionColor绘制位置不正确

C# MonoGame VertexPositionColor绘制位置不正确,c#,xna,monogame,C#,Xna,Monogame,我正在尝试为monogame制作一个渲染库,目前正在绘制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];

我正在尝试为monogame制作一个渲染库,目前正在绘制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, 0);  
 vert[1].Position = new Vector3(100, 0, 0);  
 vert[2].Position = new Vector3(0, 100, 0);  
 vert[3].Position = new Vector3(100, 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, 0, vert.Length, ind, 0, ind.Length / 3);

}
basicfect basicfect=新的basicfect(图形设备);
VertexPositionColor[]vert=新的VertexPositionColor[4];
顶点[0]。位置=新向量3(0,0,0);
顶点[1]。位置=新向量3(100,0,0);
顶点[2]。位置=新向量3(0,100,0);
顶点[3]。位置=新向量3(100,100,0);
short[]ind=新的short[6];
ind[0]=0;
ind[1]=2;
ind[2]=1;
ind[3]=1;
ind[4]=2;
ind[5]=3;
foreach(基本fect.currentTechnology.passs中的EffectPass EffectPass)
{  
effectPass.Apply();
GraphicsDevice.DrawUserIndexedPrimitives(
基本类型。三角形列表,垂直,0,垂直长度,索引,0,索引长度/3);
}

结果:

MonoGame对二维和三维坐标系使用不同的原点。在2D中,(0,0)是左上角,Y向屏幕底部增加。在3D中,(0,0,0)是屏幕的中心,坐标网格的工作原理与数学中的工作原理非常相似——如果“展平”z轴,请在数学中考虑4个象限


您正在象限I中绘图。如果希望绘图基于左上角,则需要将顶点平移视口宽度的-1/2和视口高度的+1/2。

谢谢!单位长度还是一样的吗?(例如:在3D中向x坐标添加1是否等同于在2D中向x坐标添加1?)。通常,您会使用3D相机,这会显著改变图形的表示方式。我可以在2D中画一个2x2像素的正方形,然后让它占据整个屏幕。。。因此,添加1将更改1个单位,但生成的图形可能根本不会更改1个像素。您知道在二维坐标处绘制这些顶点或将坐标转换为二维坐标或从二维坐标转换为二维坐标的方法吗?顺便说一句,我真的很感谢你的帮助。看看-很多很酷的附加功能,包括2D摄像头和
SpriteBatch
扩展(如
SpriteBatch.DrawCircle()
等)。它是开源的,MIT许可证,所以你可以使用它,适应你的需要,等等。谢谢,我会去看看。祝你度过愉快的一天/晚上/晚上/上午/下午!