1

水の効果に少し問題があります

ここでわかるように、正しい方法で表示されません。異なるテクスチャが適用された別の画面は、変換のエラーをより明確に示しています。私の HLSL コードは次のとおりです。

V2P vs(float4 inPos : POSITION, float2 inTex: TEXCOORD)
{    
    V2P Output = (V2P)0;

    float4x4 viewproj = mul (matView, matProjection);
    float4x4 worldviewproj = mul (matWorld,viewproj);

    float4x4 reflviewproj = mul (matRLView, matProjection);
    float4x4 reflworldviewproj = mul (matWorld, reflviewproj);

    Output.Position = mul(inPos, worldviewproj);
    Output.RLMapTex = mul(inPos, reflworldviewproj);

    return Output;
}
P2F ps(V2P PSIn)
{
    P2F Output = (P2F)0;        

    float2 ProjectedTexCoords;
    ProjectedTexCoords.x =   PSIn.RLMapTex.x / PSIn.RLMapTex.w /2.0f + 0.5f;
    ProjectedTexCoords.y =  -PSIn.RLMapTex.y / PSIn.RLMapTex.w /2.0f + 0.5f;    

    float2 ProjectedRefCoords;
    ProjectedRefCoords.x = ( PSIn.Position.x / PSIn.Position.w) /2.0f + 0.5f;
    ProjectedRefCoords.y = (-PSIn.Position.y / PSIn.Position.w) /2.0f + 0.5f; 

    Output.Color = tex2D(samRLMap, ProjectedTexCoords);    

    return Output;
}

水の高さに沿って目の y 値を反転させながら、反射マップをレンダー ターゲットにレンダリングします。(およびアップ ベクトル 0,-1,0 を使用)

だから、私の質問:これの原因は何ですか?

4

3 に答える 3

0

x を変更する理由がよくわかりません。y をひっくり返しても変わらない?のように

    float2 ProjectedTexCoords;
    ProjectedTexCoords.x =   PSIn.RLMapTex.x / PSIn.RLMapTex.w;
    ProjectedTexCoords.y =  -PSIn.RLMapTex.y / PSIn.RLMapTex.w /2.0f + 0.5f;
于 2009-02-28T20:40:09.480 に答える
0

エッジ ピクセルを繰り返しているテクスチャのように見えます。つまり、テクスチャ境界を越えてテクスチャ ルックアップを行っている可能性があります。あなたの反射マップは十分な大きさですか?

テクスチャ座標が範囲外の場合、出力カラーを赤に設定してみてはいかがでしょうか? (私は HLSL を話せないので、これの構文はわかりませんが、可能であると確信しています。)

または、反射マップを拡大しますか?

この種の問題は、完全なソース コードを表示できたとしてもデバッグが困難な場合があるため、実際の回答ではなく、どこを参照すればよいかを示すものです。サイキックデバッグの試み。

于 2009-02-28T20:59:49.073 に答える