2017-04-21 12 views
1

太い線を生成するためのジオメトリシェーダを作成しました。しかし、今私は問題がある、その属性は[clipplanes(...)]は動作しません。警告があります:クリッピングレーンを追加したジオメトリシェーダ

重大度コード説明プロジェクトファイルの行の抑制状態 警告X3554未知の属性clipplanes、またはこの文に無効な属性は、有効な属性です:maxvertexcount、MaxVertexCount、インスタンスCRenderer \シェーダ\ジオメトリシェーダ\ GS_GenerateThickLines。 hlsl

私は自分自身で三角形のクリッピングを書くオプションがあることを知っていますが、それは私にはあまりにもマッシュな努力のように思えます。ジオメトリシェーダに追加のクリッププレーンを使用する方法はありますか? ジオメトリシェーダがライン(2つの頂点)に入り、頂点シェーダの内側に[clipplanes(...)]という属性があります...ジオメトリシェーダの元の頂点の代わりに何らかの理由でクリッピングポイントを取得できますか?あなたがここに私のジオメトリシェーダを見つけることができます詳細については :Render thick lines with instanced rendering in directx 11

+0

フロートCDを使用する:cd = dot(clipPlane、vertexPosition);でGSの出力としてのSV_ClipDistance;同じことをする必要がありますか?あまりにも多くの努力をしているように見えませんか? – catflier

+0

@catflierご返信ありがとうございますが、そのアイデアを使用して私は1つのクリップを追加することができますか、またはこのテクニックを使用して複数のクリップを追加できますか? – Thomas

答えて

1

[clipplanes]

この属性は唯一のバーテックスシェーダ、 上で許可され、これは特に、ほとんど読んでここに(ロープロファイルのデバイスをサポートするために追加されました:電話)。

ジオメトリシェーダでカリングを実行する必要がある場合は、SV_ClipDistanceを使用するとD3D#_CLIP_OR_CULL_DISTANCE_ELEMENT_COUNTに制限されます。 2つの要素の制限のほかに

struct gs2ps 
{ 
    float4 pos: SV_Position; 
    float2 uv : TEXCOORD0; 
    float cd0 : SV_ClipDistance0; 
    float cd1 : SV_ClipDistance1; 
}; 

cbuffer cbClipPlanes : register(b1) 
{ 
    float4 clipPlane0; 
    float4 clipPlane1; 
}; 

gs2ps op; 
op.cd0 = dot(clipPlane0, position); 
op.cd1 = dot(clipPlane1, position); 

が、それは最終的にはもう少し柔軟性を提供してくださいいないことをあなたがあなた自身を提供することができますよう(:あたりとしてあなたは2つの変数を提供できるよう

この制限は、実際には2であります機能)

をクリッピング2面の制限はあなたのユースケースのための現実的な問題である場合には、他のオプションはピクセルシェーダで平面クリッピングを実行することです:

  • ゼロALPを使用してください

    :ヘクタール値(深さ/ステンシルが重要でない場合)
  • 使用クリップまたは第二のケースでは

を捨て、あなたは次のように、あなたのピクセルシェーダに別のセマンティックように画面空間値を渡す必要があります

struct psInput 
{ 
    float4 pos: SV_POSITION; 
    float4 screenPos : SCPOS; 
}; 

(POS/screenPosに同じ値を渡します)その場合

float4 PS(psInput input): SV_Target 
{ 
    clip(dot(clipPlane0, input.screenPos)); 
    clip(dot(clipPlane1, input.screenPos)); 
    return color; 
} 

あなたがクリップ面の無制限の量を持つことができますが、そのクリップがMSAではないことに注意してください。フレンドリーな人。

+0

ありがとうございます!あなたは私の日を救った!私は19時に恩恵の上であなたを処理します – Thomas

関連する問題