opengl es glEnable 方法设置图形显示能力
2014-04-21 16:45
267 查看
本文转载自http://fansofjava.iteye.com/blog/1503252
opengl es API里面有个glEnable方法,这个方法可以设置的常量很多,而且对于我等新入门的人来说也非常的难理解,网上的资料也是比较少,因此学习难度还是比较大的。下面还是以beginning android games的例子为例。
先讲一下GL_DEPTH_TEST模式,开启这个模式后,opengl 会起用深度测试模式,以下图为例:
上面的每当两个图相加时,总是显示颜色深度较小的那个颜色,这就是深度比较的结果,如果颜色深度一样,则还是显示原来的那个颜色。大体用法也很简单:
Java代码
、、、、
gl.glEnable(GL10.GL_DEPTH_TEST);
vertices.bind();
vertices.draw(GL10.GL_TRIANGLES, 0, 6);
vertices.unbind();
gl.glDisable(GL10.GL_DEPTH_TEST);
、、、、、
先开启深度测试模式,再画图,最后关闭此模式。例如先画一个红色的三角形,再画一个绿色的三角形,如果两个三角形的颜色深度一样,则会显示:
即还是显示原来的红色,如果没有启用深度测试模式,则绿色的三角形应该在前面。
下面再讲一个GL_BLEND即融合模式,这个东西的作用就是将重叠的图形融合在一起,用法大体如下:
Java代码
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);
显示如下:
需要注意的是上面的两个三角形颜色深度是不一样的,即红色三角形的颜色深度要浅一些,所以如果是先画红三角形的话,那么绿色三角形被遮挡的部分因为颜色太深就会显示不出来,结果就会像下面这样:
再说一点,颜色深浅是由RGBA中的A决定的,越小优先级越高。
本人理解的范围内就是这些了,不排除以后可能会有更多的理解,如果有且有那个时间精力的话再来完善此篇文章,在公司实在没什么事干,无聊时只得写写博客来打发时间了。
opengl es API里面有个glEnable方法,这个方法可以设置的常量很多,而且对于我等新入门的人来说也非常的难理解,网上的资料也是比较少,因此学习难度还是比较大的。下面还是以beginning android games的例子为例。
先讲一下GL_DEPTH_TEST模式,开启这个模式后,opengl 会起用深度测试模式,以下图为例:
上面的每当两个图相加时,总是显示颜色深度较小的那个颜色,这就是深度比较的结果,如果颜色深度一样,则还是显示原来的那个颜色。大体用法也很简单:
Java代码
、、、、
gl.glEnable(GL10.GL_DEPTH_TEST);
vertices.bind();
vertices.draw(GL10.GL_TRIANGLES, 0, 6);
vertices.unbind();
gl.glDisable(GL10.GL_DEPTH_TEST);
、、、、、
先开启深度测试模式,再画图,最后关闭此模式。例如先画一个红色的三角形,再画一个绿色的三角形,如果两个三角形的颜色深度一样,则会显示:
即还是显示原来的红色,如果没有启用深度测试模式,则绿色的三角形应该在前面。
下面再讲一个GL_BLEND即融合模式,这个东西的作用就是将重叠的图形融合在一起,用法大体如下:
Java代码
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);
显示如下:
需要注意的是上面的两个三角形颜色深度是不一样的,即红色三角形的颜色深度要浅一些,所以如果是先画红三角形的话,那么绿色三角形被遮挡的部分因为颜色太深就会显示不出来,结果就会像下面这样:
再说一点,颜色深浅是由RGBA中的A决定的,越小优先级越高。
本人理解的范围内就是这些了,不排除以后可能会有更多的理解,如果有且有那个时间精力的话再来完善此篇文章,在公司实在没什么事干,无聊时只得写写博客来打发时间了。
相关文章推荐
- linux启动系统不显示进度条设置方法
- TK模块写图形界面中文显示乱码的解决方法。
- android应用程序布局时选择皮肤和设置横屏、全屏显示的方法
- word 2010 标题行重复设置方法及表格标题行无法重复显示问题的解决方法
- maya的面选择显示模式,中心点或整个面的设置方法
- 设置字段显示格式的方法
- div+css总结—FF下div不设置高度背景颜色或外边框不能显示的解决方法
- C#画笔Pen保存和恢复图形对象的设置方法
- Win7系统设置PPT放映时显示备注的方法图解
- 外网访问内网服务器设置方法+远程图形终端
- 内存优化之设置图片显示所有方法对比
- cxGrid增加一栏显示checkBox的设置方法
- Intellij Idea 设置之方法快速显示
- Ubuntu中Eclipse菜单栏不显示解决方法以及Alt+/自动补全设置
- WinXP、Win7、Win8系统显示文件扩展名的设置方法(图文教程)
- Vista 不显示上次登陆用户名的设置方法
- JQury中设置元素淡入淡出(fadeIn/fadeOut/fadeToggle/fadeTo)以及显示隐藏(show/hide)方法
- div+css总结—FF下div不设置高度背景颜色或外边框不能显示的解决方法 (新浪博客 )
- android文本组件textView属性autolink设置为web,显示网址的处理方法
- 设置 Dialog 不显示标题的常用方法