opengl:lefthand
差分
このページの2つのバージョン間の差分を表示します。
両方とも前のリビジョン前のリビジョン次のリビジョン | 前のリビジョン次のリビジョン両方とも次のリビジョン | ||
opengl:lefthand [2014/04/16 16:15] – [Clip (Device) 座標系] oga | opengl:lefthand [2014/04/16 17:54] – [Tangent 座標系] oga | ||
---|---|---|---|
行 33: | 行 33: | ||
===== OpenGL と Direct3D の座標系の違い ===== | ===== OpenGL と Direct3D の座標系の違い ===== | ||
- | ^ ^ Direct3D | + | ^ ^ Direct3D |
- | ^ 3D 座標系 | + | ^ 3D 座標系 |
- | ^ Clip (device) 座標系 | + | ^ Clip (device) 座標系 |
^ Screen 座標系 | ^ Screen 座標系 | ||
- | ^ UV 座標系 | + | ^ UV 座標系 |
- | ^ Tangent 座標系 | + | ^ Tangent 座標系 |
行 112: | 行 112: | ||
</ | </ | ||
- | ↑またこの変換は、OpenGL で Shadow map を用いる場合にも必要になります。 | + | ↑同様の変換は、OpenGL で Shadow map を用いる場合にも行っていることになります。 |
- | Shadow | + | Depth Map sampling 時は Z 範囲が 0~1.0 になるため。 |
Shader 側で調整する場合は、Projection Matrix の相互変換は不要です。 | Shader 側で調整する場合は、Projection Matrix の相互変換は不要です。 | ||
行 142: | 行 142: | ||
API 上は制限がなく、あくまでデータがどちらのルールで作られているか次第になります。 | API 上は制限がなく、あくまでデータがどちらのルールで作られているか次第になります。 | ||
- | D3D と OpenGL では原点位置が異なりますが、外部で作られたデータを用いる場合はプログラム的には特に何も手を加える必要がありません。 | + | D3D と OpenGL では原点位置が異なりますが、外部で作られたデータを用いる場合はプログラム的には特に手を加える必要はありません。 |
* D3D : v 原点を上とみなす。メモリには 上から下に向かって画像が格納されているとみなす。 | * D3D : v 原点を上とみなす。メモリには 上から下に向かって画像が格納されているとみなす。 | ||
行 151: | 行 151: | ||
- | ただし、動的に Rendering して生成した Texture の場合は GL と D3D は上下反転しているので要注意。 | + | ただし、動的に Rendering して生成した Texture の場合は GL と D3D は上下反転しているので要注意です。 |
- | 次の Screen 座標系とも関係しますが、Viewport や Scissor 、Framebuffer は左下原点とみなしてレンダリングが行われるからです。 | + | 次の Screen 座標系とも関係しますが、Viewport や Scissor 、Framebuffer は左下原点とみなしてレンダリングが行われるため。 |
===== Screen 座標系 ===== | ===== Screen 座標系 ===== | ||
- | OpenGL | + | OpenGL |
- | 例えば Viewport や Scissor 範囲の設定がこれに相当します。 | + | 関連する API 郡、例えば Viewport や Scissor 範囲の設定も左下原点です。 |
- | 固定機能なので、残念ながら自由に座標系を決めることができません。 | + | 固定機能なので自由に座標系を決めることができません。 |
- | RenderBuffer | + | また Texture へのレンダリングを行った場合も左下原点とみなすため、 |
- | OpenGL は左下原点で格納されるために、D3D とちょうど上下逆のイメージが生成されます。 | + | 生成されたイメージは Direct3D |
- | ===== Tangent 座標系 ===== | + | |
+ | |||
+ | |||
+ | ===== Tangent 座標系 | ||
行 173: | 行 176: | ||
ObjectSpace の Normal Map であっても右手座標系 (RH) が用いられている場合が多くなります。 | ObjectSpace の Normal Map であっても右手座標系 (RH) が用いられている場合が多くなります。 | ||
- | そのため | + | よって |
- | 符号反転は Shader 内で低コストに実現できるため、Normal Map の座標系の違いはほとんど問題になりませんでした。 | + | 符号反転は Shader 内で低コストに実現できるため、Normal Map の座標系の違いはあまり問題になりませんでした。 |
- | また Normal Map はデータ圧縮のため、Tangent Space でリピートやミラーを併用する場合があります。 | + | また Normal Map はデータ圧縮のため、地形データなどは |
- | この場合の座標系は一定ではなくなります。 | + | そもそもこの場合の座標系は |
Matrix (Normal, Binormal, Tangent) で表現する場合は座標系の自由度が高いこと、 | Matrix (Normal, Binormal, Tangent) で表現する場合は座標系の自由度が高いこと、 | ||
- | API と関係なく Shader 内部の事情にすぎないことから、 | + | API と関係なく Shader 内部の事情にすぎないことから、特に問題なく相互利用が可能となります。 |
- | やはり特に問題にはなりません。 | + | |
opengl/lefthand.txt · 最終更新: 2014/04/16 17:57 by oga