「ハーフベクトル」を編集中
この編集を取り消せます。 下記の差分を確認して、本当に取り消していいか検証してください。よろしければ変更を保存して取り消しを完了してください。
最新版 | 編集中の文章 | ||
9行目: | 9行目: | ||
2個の[[ベクトル]]を足し算するとその中間のベクトルが得られるので、 ハーフベクトルを求めるには物体表面([[頂点]]または[[ピクセル]])の位置を基準とした「視点」と「光源」のベクトルを足し合わせればよい。 また、光の強さは0.0~1.0の範囲で表すのが一般的なので、その範囲になるよう[[正規化]](normalize)しておく。 | 2個の[[ベクトル]]を足し算するとその中間のベクトルが得られるので、 ハーフベクトルを求めるには物体表面([[頂点]]または[[ピクセル]])の位置を基準とした「視点」と「光源」のベクトルを足し合わせればよい。 また、光の強さは0.0~1.0の範囲で表すのが一般的なので、その範囲になるよう[[正規化]](normalize)しておく。 | ||
− | [[頂点シェーダー]] | + | [[頂点シェーダー]]での実装例。 |
<source lang="HLSL"> | <source lang="HLSL"> | ||
float4x4 World; | float4x4 World; | ||
− | |||
− | |||
struct VSIn { | struct VSIn { | ||
30行目: | 28行目: | ||
// カメラベクトルを求める | // カメラベクトルを求める | ||
− | float3 cameraVector = normalize(worldPosition.xyz - | + | float3 cameraVector = normalize(worldPosition.xyz - cameraPosition.xyz); |
// ハーフベクトルを求める | // ハーフベクトルを求める | ||
− | vsout.HalfVector = normalize( | + | vsout.HalfVector = normalize(LightPosition.xyz + cameraVector.xyz); |
return vsout; | return vsout; |