我正在尝试将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);
}
}
答案 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方法。
然后在实例化多维数据集时,您会传递不同的纹理,具体取决于您创建的多维数据集:)