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

来源:互联网 发布:发型设计软件破解版 编辑:程序博客网 时间:2024/05/01 17:57

本文转载自http://fansofjava.iteye.com/blog/1503252


opengl es API里面有个glEnable方法,这个方法可以设置的常量很多,而且对于我等新入门的人来说也非常的难理解,网上的资料也是比较少,因此学习难度还是比较大的。下面还是以beginning android games的例子为例。 

先讲一下GL_DEPTH_TEST模式,开启这个模式后,opengl 会起用深度测试模式,以下图为例: 

 
上面的每当两个图相加时,总是显示颜色深度较小的那个颜色,这就是深度比较的结果,如果颜色深度一样,则还是显示原来的那个颜色。大体用法也很简单: 
Java代码  收藏代码
  1. 、、、、  
  2. gl.glEnable(GL10.GL_DEPTH_TEST);  
  3.               
  4.  vertices.bind();  
  5.  vertices.draw(GL10.GL_TRIANGLES, 06);  
  6.  vertices.unbind();  
  7.               
  8.  gl.glDisable(GL10.GL_DEPTH_TEST);  
  9. 、、、、、  

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

 
即还是显示原来的红色,如果没有启用深度测试模式,则绿色的三角形应该在前面。 

下面再讲一个GL_BLEND即融合模式,这个东西的作用就是将重叠的图形融合在一起,用法大体如下: 
Java代码  收藏代码
  1. gl.glEnable(GL10.GL_BLEND);  
  2. gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA);  
  3.               
  4. vertices.bind();  
  5. vertices.draw(GL10.GL_TRIANGLES, 33);//绿色三角形  
  6. vertices.draw(GL10.GL_TRIANGLES, 03);//红色三角形  
  7. vertices.unbind();  
  8.               
  9. gl.glDisable(GL10.GL_BLEND);             
  10. gl.glDisable(GL10.GL_DEPTH_TEST);  

显示如下: 

 
需要注意的是上面的两个三角形颜色深度是不一样的,即红色三角形的颜色深度要浅一些,所以如果是先画红三角形的话,那么绿色三角形被遮挡的部分因为颜色太深就会显示不出来,结果就会像下面这样: 

 

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

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