opengl es glEnable 方法设置图形显示能力

本文详细介绍了OpenGL ES中的两种关键渲染模式:深度测试(GL_DEPTH_TEST)和混合模式(GL_BLEND)。深度测试确保只有颜色深度较浅的对象可见,而混合模式则用于融合重叠的图形。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

opengl es API里面有个glEnable方法,这个方法可以设置的常量很多,而且对于我等新入门的人来说也非常的难理解,网上的资料也是比较少,因此学习难度还是比较大的。下面还是以beginning android games的例子为例。
先讲一下GL_DEPTH_TEST模式,开启这个模式后,opengl 会起用深度测试模式,以下图为例:

[img]http://dl.iteye.com/upload/attachment/0067/3046/f6b90719-2427-38bf-8ca1-06dbbd8c5308.png[/img]
上面的每当两个图相加时,总是显示颜色深度较小的那个颜色,这就是深度比较的结果,如果颜色深度一样,则还是显示原来的那个颜色。大体用法也很简单:

、、、、
gl.glEnable(GL10.GL_DEPTH_TEST);

vertices.bind();
vertices.draw(GL10.GL_TRIANGLES, 0, 6);
vertices.unbind();

gl.glDisable(GL10.GL_DEPTH_TEST);
、、、、、

先开启深度测试模式,再画图,最后关闭此模式。例如先画一个红色的三角形,再画一个绿色的三角形,如果两个三角形的颜色深度一样,则会显示:

[img]http://dl.iteye.com/upload/attachment/0067/3058/b0a846ff-5e77-3f8c-a36b-400853d838a4.png[/img]
即还是显示原来的红色,如果没有启用深度测试模式,则绿色的三角形应该在前面。

下面再讲一个GL_BLEND即融合模式,这个东西的作用就是将重叠的图形融合在一起,用法大体如下:

gl.glEnable(GL10.GL_BLEND);
gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA);

vertices.bind();
vertices.draw(GL10.GL_TRIANGLES, 3, 3);//绿色三角形
vertices.draw(GL10.GL_TRIANGLES, 0, 3);//红色三角形
vertices.unbind();

gl.glDisable(GL10.GL_BLEND);
gl.glDisable(GL10.GL_DEPTH_TEST);

显示如下:

[img]http://dl.iteye.com/upload/attachment/0067/3060/184f28a2-0f9d-3266-a68e-15c0014b8b98.png[/img]
需要注意的是上面的两个三角形颜色深度是不一样的,即红色三角形的颜色深度要浅一些,所以如果是先画红三角形的话,那么绿色三角形被遮挡的部分因为颜色太深就会显示不出来,结果就会像下面这样:

[img]http://dl.iteye.com/upload/attachment/0067/3062/1f20fad5-1f44-3302-99ec-d7d7a07a4059.png[/img]

再说一点,颜色深浅是由RGBA中的A决定的,越小优先级越高。

本人理解的范围内就是这些了,不排除以后可能会有更多的理解,如果有且有那个时间精力的话再来完善此篇文章,在公司实在没什么事干,无聊时只得写写博客来打发时间了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值