剪裁与测试的使用

一 、剪裁测试

它主要在渲染场景时限制绘制区域,用它可以方便地实现同时在屏幕上绘制主视角与次视角场景的功能 。

工作原理 :先绘制主视角场景,再启用剪裁测试设置剪裁窗口,然后绘制次视角场景。

二、模板测试

        剪裁测试可以将绘制限定在一个距形区域,模板测试可以将绘制限定在一个任意形状的区域内,也称为蒙板测试。

模板测试需要绘制两次,第一次产生存储特殊区域信息模板值的模板缓冲,第二次利用模板缓冲中的值 进行测试,使绘制仅限于在特定区域内。

三、任意剪裁平面

视景体除了六个剪裁平面(左,右,底,顶,远)之外,还可以再指定其它任意平面以进行剪裁,剪裁平面 可以删除 场景中无关的物体 ,例如显示物体 的剖面视图,WebGL使用 剪裁平面时只需给出参数即可。具体步骤如下:

(1)给出定义剪裁平面的4个参数A、B、\C、D这个4 个参数分别是平面解析方程Ax+By+Cz+D=0的4个系数。

(2)传递4个参数至渲染管线,以备着色器使用。

(3) 在顶点着色器中判断顶点是否在平面的一侧,具体方法为: 将顶点坐标代入平面方程计算后,将值传入片元着色器。

(4)在片元着色器中根据接收到平面方程的值0与之间的关系得出顶点与剪裁平面之间的位置关系,决定是否丢弃片元。

着色器中相关代码 :

顶点着色器:

#version 300 es
.....
uniform vec4  u_clipPlane;   //剪裁平面
out float u_clipDist;  //传递给片元着色器的剪裁信息
.....
void main(){
    //将顶点位置代入平面方程,>0则顶点在平面的上侧,反之在平面的下侧。
    u_clipDist=dot(aPostion.xyz,u_clipPlane.xyz)+u_clipPlane.w;
}

片元着色器

#version 300 es
.....
in float u_clipDist;  //接收从顶点着色器传来的参数

void main(){
    ......
    if(u_clipDist<0.0) discard;   //根据剪裁信息值是否小于0决定是否丢弃片元。
    ......
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值