「ハーフベクトル」の版間の差分
Administrator (トーク | 投稿記録) 編集の要約なし |
Administrator (トーク | 投稿記録) |
||
| (同じ利用者による、間の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 - | float3 cameraVector = normalize(worldPosition.xyz - CameraPosition.xyz); | ||
// ハーフベクトルを求める | // ハーフベクトルを求める | ||
vsout.HalfVector = normalize( | vsout.HalfVector = normalize(LightDirection.xyz + cameraVector.xyz); | ||
return vsout; | return vsout; | ||