「ハーフベクトル」の版間の差分

編集の要約なし
 
(同じ利用者による、間の1版が非表示)
9行目: 9行目:
2個の[[ベクトル]]を足し算するとその中間のベクトルが得られるので、 ハーフベクトルを求めるには物体表面([[頂点]]または[[ピクセル]])の位置を基準とした「視点」と「光源」のベクトルを足し合わせればよい。 また、光の強さは0.0~1.0の範囲で表すのが一般的なので、その範囲になるよう[[正規化]](normalize)しておく。
2個の[[ベクトル]]を足し算するとその中間のベクトルが得られるので、 ハーフベクトルを求めるには物体表面([[頂点]]または[[ピクセル]])の位置を基準とした「視点」と「光源」のベクトルを足し合わせればよい。 また、光の強さは0.0~1.0の範囲で表すのが一般的なので、その範囲になるよう[[正規化]](normalize)しておく。


[[頂点シェーダー]]での実装例。
[[頂点シェーダー]]での実装例(超抜粋)。
<source lang="HLSL">
<source lang="HLSL">
float4x4 World;
float4x4 World;
float3 LightDirection;
float3 CameraPosition;


struct VSIn {
struct VSIn {
28行目: 30行目:
      
      
     // カメラベクトルを求める
     // カメラベクトルを求める
     float3 cameraVector  = normalize(worldPosition.xyz - cameraPosition.xyz);
     float3 cameraVector  = normalize(worldPosition.xyz - CameraPosition.xyz);


     // ハーフベクトルを求める
     // ハーフベクトルを求める
     vsout.HalfVector    = normalize(LightPosition.xyz + cameraVector.xyz);
     vsout.HalfVector    = normalize(LightDirection.xyz + cameraVector.xyz);
      
      
     return vsout;
     return vsout;