MonoGame VertexPositionColor绘制在错误的位置

问题描述

我正在尝试为单人游戏制作渲染库,目前正在绘制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);

}

结果:https://imgur.com/GkyqmlY

解决方法

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

您要在第I象限中进行绘制。如果要基于左上角进行绘制,则需要按-1/2视口宽度和+ 1 /来平移顶点2您的视口高度。