Monogame多顶点纹理

时间:2014-06-28 12:05:11

标签: c# xna monogame

我正在尝试将2D游戏转换为3D,并且在纹理方面遇到了一些麻烦。整个游戏由立方体组成,因此我使用顶点创建一个立方体并从绘制方法中调用它。但是我似乎只能使用基本效果用一个纹理为所有立方体着色。我认为我需要使用其他一些效果,所以我可以为每个立方体选择纹理,但不能确定该做什么。任何帮助表示赞赏

将使用如下所示的循环在屏幕上绘制多维数据集。不知何故,每个立方体需要纹理不同

foreach (EffectPass pass in basicEffect.CurrentTechnique.Passes)
{
  pass.Apply();

  for (int i=0;i<mapsize;i++)
  {
      vertices = createCubeTexture(-1.0f, 0.5f);
      device.DrawUserPrimitives(PrimitiveType.TriangleList, vertices, 0, 2, VertexPositionTexture.VertexDeclaration);
  }
}

1 个答案:

答案 0 :(得分:0)

看到你的问题:

for (int i=0;i<mapsize;i++)
  {
      vertices = createCubeTexture(-1.0f, 0.5f);
      device.DrawUserPrimitives(PrimitiveType.TriangleList, vertices, 0, 2, VertexPositionTexture.VertexDeclaration);
  }

每次循环遍历mapsize(大概是int)时,你都会循环遍历整个地图,创建一个带纹理的立方体。这很好,但问题在于该方法将为所有立方体创建相同的纹理。你需要做的是这样的事情:

public class Cube
{
    public Vector3 Position { get; set; }
    public Texture2D Texture { get; set; }

    public Cube(Vector3 position, Texture2D texture)
    {
        Position = position;
        Texture = texture;
    }

    public void Draw(GraphicsDevice device)
    {
        var vertices = createCubeTexture(position);
        device.DrawUserPrimitives(PrimitiveType.TriangleList, vertices, 0, 2, VertexPositionTexture.VertexDeclaration);
    }
}

请注意,我在很长一段时间内都没有使用手动绘制立方体,所以我不记得这是不是很精确,但如果没有,它就非常相似。只需遍历每个多维数据集,然后调用Draw方法。

然后在实例化多维数据集时,您会传递不同的纹理,具体取决于您创建的多维数据集:)