这是我第一次来这里(有一个帐户),我希望用 XNA 4.0 制作一个高度图编辑器(如果你玩过的话,有点类似于 Earth2150)。
我在这里写了一个自定义效果文件:http: //pastebin.com/CUFtB8Z9
它很好地融合了纹理,除了它融合了整个地图。
我真正想要的是能够在我的高度图上有多个纹理(然后我将与最近的其他纹理混合),我正在寻找方法来做到这一点。
我考虑过float
在我的顶点声明中分配一个,然后使用纹理数组将纹理“分配”到特定顶点。但是我将如何让我的效果文件为每个顶点上的纹理获取不同的值?
抱歉不是很清楚,这是我的绘制代码和顶点声明:
(请原谅随机数的变化,这是我尝试让每个顶点选择随机纹理的尝试)
public void Draw(Texture2D[] TextureArray)
{
RasterizerState rs = new RasterizerState();
rs.CullMode = CullMode.None;
//rs.FillMode = FillMode.WireFrame;
EditGame.Instance.GraphicsDevice.RasterizerState = rs;
Random rnd = new Random();
foreach (EffectPass pass in EditGame.Instance.baseEffect.CurrentTechnique.Passes)
{
if (SlowCounter == 60)
{
EditGame.Instance.baseEffect.Parameters["xTexture"].SetValue(TextureArray[rnd.Next(0, 2)]);
EditGame.Instance.baseEffect.Parameters["bTexture"].SetValue(TextureArray[rnd.Next(0, 2)]);
SlowCounter = 0;
}
pass.Apply();
EditGame.Instance.GraphicsDevice.DrawUserIndexedPrimitives(PrimitiveType.TriangleList, vertices, 0, vertices.Length, indices, 0, indices.Length / 3, VP2TC.VertexDeclaration);
}
SlowCounter++;
}
public readonly static VertexDeclaration VertexDeclaration = new VertexDeclaration(
new VertexElement(0, VertexElementFormat.Vector3, VertexElementUsage.Position, 0),
new VertexElement(12, VertexElementFormat.Vector2, VertexElementUsage.TextureCoordinate,0),
new VertexElement(20, VertexElementFormat.Vector2, VertexElementUsage.TextureCoordinate,1),
new VertexElement(28, VertexElementFormat.Single, VertexElementUsage.BlendWeight,0),
new VertexElement(32, VertexElementFormat.Vector3,VertexElementUsage.Normal,0),
new VertexElement(44, VertexElementFormat.Color,VertexElementUsage.Color,0)
);