OpenGL 2.0の裁断とテスト

3577 ワード

クリップテスト
基本原理:レンダリング時にペイント領域を制限します.これにより、スクリーン(フレームバッファ)で矩形領域を指定できます.クリップテストを有効にすると、この矩形領域内のセルは破棄されず、この矩形領域内のセルのみがフレームバッファに入ることができます.そのため、実際には画面に小さなウィンドウを開き、指定した内容の描画を行うことができます.
コアコードは次のとおりです.
GLES20.glEnable(GLES20.GL_SCISSOR_TEST);//      
GLES20.glScissor(0,0,100,200);//    (     (0,0),  100,  200)
GLES20.glDisable(GLES20.GL_SCISSOR_TEST);//      

Alphaテスト
クリップテストの領域は長方形のみで、Alphaテストでは任意の形状のペイント領域を実現できます.基本原理:1つのセルを描画すると、まずそのAlpha値を検出し、Alpha値が要求を満たすと、テストによってセルを描画します.そうしないと、セルを破棄します.
コアコードは次のとおりです.
precision mediump float;//         
varing vec2 vTextureCoord; //               
uniform sampler2D sTexture;//      
void main{
    vec4 bcolor = texture2D(sTexture,vTextureCoord);//            
    if(bcolor.a < 0.6){discard;}// Alpha   0.6,     
    else{gl_FragColor = bcolor;}//             
}

テンプレートテスト
基本原理:描画を矩形の領域に限定することができ、テンプレートテストはマスクテストとも呼ばれます.
コアコードは次のとおりです.
GLES20.glClear(GLES20.GL_STENCIL_BUFFER_BIT);//      
GLES20.glEnable(GLES20.GL_STENCIL_TEST);//      
GLES20.glStencilFunc(GLES20.GL_ALWAYS, 1, 1);//        
GLES20.glStencilOp(GLES20.GL_KEEP,GLES20.GL_KEEP,GLES20.GL_REPLACE);//         
GLES20.glDisable(GLES20.GL_STENCIL_TEST);//      

メソッドglStencilFuncの最初のパラメータは比較モードで、2番目のパラメータは参照値で、3番目のパラメータはマスクです.Never:テンプレートテストalwaysに合格しない:常にテンプレートテストlessに合格する:equalより小さい:greaterに等しい:notequalより大きい:方法glStencilOpの最初のパラメータに等しくないテンプレートテストがセルのテンプレート値に合格しない場合はどのように変化するか、2番目のパラメータは深さテストがセルのテンプレート値に合格しない場合はどのように変化するかを表す.3番目のパラメータは、テンプレートテストと深さテストがいずれもチップのテンプレート値に合格していないことを示します.keepをどのように変化させるか:zeroを変更しない:ゼロに戻るreplace:現在のテンプレート値incr:+1の代わりにテスト条件の設定値を使用し、最大値であればincr_を維持します.wrap:+1、最大値の場合、ゼロ充填開始decr:-1、ゼロの場合、invert:ビット別逆
任意のクリップ平面