0

一般的な質問:

シェーダー パラメータ (たとえば、レーザー幅など) に基づいて、何かを描画するためにエフェクトに渡す頂点のリストがあるとします。同じ頂点を渡したいのですが、異なるシェーダー パラメーターを使用します。ただし、これは機能しません。

問題のコードは次のとおりです。

           foreach (EffectPass pass in quinticFX.CurrentTechnique.Passes)
            {
                quinticFX.Parameters["NumPoints"].SetValue(CurvedVertices.Count());
                pass.Apply();
                GraphicsDevice.SamplerStates[0] = LinearMirrorState;
                GraphicsDevice.Textures[0] = solid;

                quinticFX.Parameters["radiusOfBeam"].SetValue(8);
                GraphicsDevice.DrawUserPrimitives<VertexPositionTexture>(PrimitiveType.TriangleStrip, CurvedVertices.ToArray(), 0, CurvedVertices.Count() - 2);
                pass.Apply();

                quinticFX.Parameters["radiusOfBeam"].SetValue(4);
                quinticFX.Parameters["P"].SetValue(cp1);
                GraphicsDevice.DrawUserPrimitives<VertexPositionTexture>(PrimitiveType.TriangleStrip, CurvedVertices.ToArray(), 0, CurvedVertices .Count() - 2);
            }

あなたがこれを行うことができると仮定し、異なる制御点と幅で 2 回 (この場合は曲線) を描画します。これは当てはまりません。最新のプリミティブ セットのみが描画されます。どんな助けでも大歓迎です。

4

1 に答える 1

0

私はばかであることがわかりました-パラメーターを設定した後、パスを Apply() する必要があります。

修正されたコードは次のとおりです。

foreach (EffectPass pass in quinticFX.CurrentTechnique.Passes)
{
    quinticFX.Parameters["NumPoints"].SetValue(CurvedVertices.Count());
    //GraphicsDevice.SamplerStates[0] = SamplerState.LinearWrap;
    GraphicsDevice.SamplerStates[0] = LinearMirrorState;
    GraphicsDevice.Textures[0] = solid;

    quinticFX.Parameters["radiusOfBeam"].SetValue(12);
    pass.Apply();
    GraphicsDevice.DrawUserPrimitives<VertexPositionTexture>(PrimitiveType.TriangleStrip, CurvedVertices.ToArray(), 0, CurvedVertices.Count() - 2);

    quinticFX.Parameters["radiusOfBeam"].SetValue(6);
    quinticFX.Parameters["P"].SetValue(cp1);
    pass.Apply();
    GraphicsDevice.DrawUserPrimitives<VertexPositionTexture>(PrimitiveType.TriangleStrip, CurvedVertices.ToArray(), 0, CurvedVertices.Count() - 2);

    quinticFX.Parameters["radiusOfBeam"].SetValue(3);
    quinticFX.Parameters["P"].SetValue(cp2);
    pass.Apply();
    GraphicsDevice.DrawUserPrimitives<VertexPositionTexture>(PrimitiveType.TriangleStrip, CurvedVertices.ToArray(), 0, CurvedVertices.Count() - 2);
}
于 2012-05-11T17:00:54.860 に答える