void depthRange(float zNear, float zFar)
Arguments
Argument | Description | Valid values | Default |
---|---|---|---|
zNear | 視錐体の前方クリッピングプレーンの位置 | [0,1] | 0 |
zFar | 視錐体の後方クリッピングプレーンの位置 | [0,1] | 1 |
WebGL1, WebGL2では、zNearはzFar未満の値である必要があります。
What's this?
深度バッファに保存する深度値の範囲を指定する関数です。
GLは正規デバイス座標系のz範囲(glClipControlで変更しない限り、通常は[-1,1])を、この関数で指定した範囲にマッピングします。
Supported Version
- WebGL1
- WebGL2
- OpenGL ES 2.0 ~
- OpenGL 2.0 ~
近年のOpenGLでは、zNearはzFar未満であるべきという制約はなくなりました。
Note
デフォルト値として最大範囲をはじめから使うようになっていますので、後述のReversed Depthテクニックが仕様上使えないWebGLにおいて、この関数が必要になるケースはあまりないでしょう。
深度バッファの通常の見え方
zNearが0、zFarが1、とデフォルト値のままの場合、手前の物体ほど暗く、奥の物体ほど白く表示されます。さらにclearDelpthの値がデフォルトの1であれば、物体があまりない開けたシーンでは大半の領域が白く包まれていることでしょう。
Reversed Depthテクニックで用いられることがある
WebGLでは現行不可能ですが、OpenGLで可能なReversed Depthという、深度バッファの精度の向上テクニックがあります。これを行う場合はdepthRange関数でzNearを1、zFarを0と、通常の逆に設定し、さらにglClipControl関数で正規デバイス座標系のz範囲を[0,1]に変更します。