ここで(アカウントを使用して)初めての場合、XNA 4.0(Earth2150をプレイしたことがある場合は、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)
);