1

ここで(アカウントを使用して)初めての場合、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)
);
4

1 に答える 1

1

コメントで言ったように、これがあなたが探しているものかどうかはわかりませんが、とにかく先に進みます。

おそらくあなたが欲しいものはここに記述されていると思います。

基本的に、各テクスチャの重みを格納し、ベクトル内の個々の要素によって重み付けされた4つのテクスチャすべての加重平均をとるVector 4があります(4つのブレンド重みとして機能します)。

すべてのテクスチャにブレンド要素を持たなくてもテクスチャをブレンドしたい場合は、物事がもっと楽しくなります。

単一のブレンドウェイトを使用できます。これにより、基本的に2つの隣接するテクスチャのブレンドが順番に選択されます。だからあなたが持っているなら:

ブレンド重量=0.5

グラス(0.25)とロック(0.75)のブレンドを選びます。等量でブレンド(中間にあるため)。

たくさんのテクスチャが必要な場合、シェーダーは最大50のテクスチャサンプラーで非常に面倒になります。これだけ多くのテクスチャが本当に必要な場合は、テクスチャアトラスを検討するか、生成時にすでにブレンドが行われている、 手続き的に生成された仮想テクスチャを検討する必要があります。

于 2012-11-18T20:57:46.030 に答える