1

鏡面照明を機能させるのに問題があります。私のアプリケーションには、追跡できない何らかのバグがあるようです。

光は正面から来ています (スクリーンショットはカメラが -z 方向を見ていることを示しています。左側は -x です)。

単純なスペキュラー出力は、次の失敗を示しています。

ここに画像の説明を入力

使用したコード:

    float3 n = normalize(input.normal); // world space normal, mul(float4(normal, 0.0), modelMatrix)
    float3 l = normalize(-sDirection); // constant direction (like 0.7, -0.8, -0.7)
    float3 v = normalize(viewPos.xyz - input.vertexWorldSpace.xyz); // viewpos = world space camera position
    float3 LightReflect = normalize(reflect(n,l));
    float SpecularFactor = dot(v, LightReflect);

    color = float4(SpecularFactor, SpecularFactor, SpecularFactor, 1.0);

変数エラーの可能性を確認するために、input.VertexWorldSpace を確認しました。

ここに画像の説明を入力

ライトの方向と法線も確認するために、拡散項を確認しました。

ここに画像の説明を入力

頂点ビュー ベクトル (v) へのカメラ: ここに画像の説明を入力

私にとっては、すべての部分がきれいに見えますが、鏡面反射光は原点(0,0,0)で黒くなり、光の方向に垂直になります。

また、原点(0, 0, 0)でのビュー方向ベクトルで何が起こるかを示すGIFも作成しました

http://imgur.com/2YlqcGP

カメラの位置と鏡面反射光が黒くなる場所を示す別の gif: http://i.imgur.com/ajUaekA.gifv

v の計算が間違っていますか?

4

1 に答える 1