2012-05-09 15 views
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); 
      } 

私はは、あなたがこれを行うことがを想定し、それが二回、別のコントロールポイントと幅(この場合、カーブで)を引きます。これは当てはまりません。最も新しいプリミティブのセットだけが描画されます。どんな助けでも大歓迎です。

答えて

0

私はばかだと判明しました。パラメータを設定した後でパスを適用()する必要があります。

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

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); 
} 
関連する問題