`

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

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


上面的每当两个图相加时,总是显示颜色深度较小的那个颜色,这就是深度比较的结果,如果颜色深度一样,则还是显示原来的那个颜色。大体用法也很简单:
、、、、
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即融合模式,这个东西的作用就是将重叠的图形融合在一起,用法大体如下:
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决定的,越小优先级越高。

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

相关推荐

    OpenGL的Alpha混合(演示程序)

    此资源是演示程序,可以免费下载。 ---------------------------------------- 有很久都没有使用OpenGL了。一直都只是看书,一旦实践...glEnable( GL_BLEND ); glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );

    OPENGL三维混合图形

    glEnable(GL_LIGHTING);//打开光照 glEnable(GL_LIGHT0);//打开第一个光源 glEnable(GL_DEPTH_TEST);//启动深度探测

    OpenGl实验报告.doc

    实验目的与要求 1、学习和掌握OpenGL的使用 2、掌握矩阵堆栈的实现方法 3、根据自己的创意实现实验内容,进一步掌握和理解OpenGL的使用 2. 实验内容 1、请编写地球围绕太阳自动旋转的方式 2、请再加上一个月亮, 并...

    fog.rar_GL_FOG_glEnable

    在openGL的glEnable()函数中使用GL_FOG函数来启用雾效果。示例程序绘制了5个红色球体,每个球体和观察点的距离各不相同。

    OpenGL图元重启基础绘制

    If you use at least OpenGL 4.3, or OpenGL ES 3.0, you can also replace the above with: glEnable(GL_PRIMITIVE_RESTART_FIXED_INDEX); 1 2 Then you set up an index array where you insert a 0xffff value...

    用opengl绘制一个旋转正方体.cpp

    //颜色设置为白色 glVertex3f(50.0f, 50.0f, 50.0f); glColor3f(1.0f,1.0f,0.0f);//颜色设置为黄色 glVertex3f(50.0f, -50.0f, 50.0f); glColor3f(1.0f,0.0f,0.0f);//颜色设置为红色 glVertex3f(-50.0f, -...

    opengl 期末复习资料

    opengl 期末复习资料 第一、二章: 1、 OpenGL中能渲染的基本元素是什么?GLU 可以渲染哪些基本元素? 第三章 2、 用框图说明OpenGL的渲染流程,并简要说明每个坐标系。 第四、五章 3、 写出OpenGL中局部光照的...

    OpenGL编程实践

    OpenGL编程实践 适用于初学者,帮助OPENGL的上手

    opengl的太阳系模型

    // 初始化OpenGL void InitGL(void) { glClearColor(0.0f, 0.0f, 0.0f, 0.5f); //设置黑色背景 glClearDepth(2.0f); // 设置深度缓存 glEnable(GL_DEPTH_TEST); //启动深度测试 glDepthFunc(GL_LEQUAL); //深度...

    opengl橡皮筋

    glEnable(GL_DEPTH_TEST); glShadeModel(GL_SMOOTH); makeStripeImage(); glPixelStorei(GL_UNPACK_ALIGNMENT, 1); #ifdef GL_VERSION_1_1 glGenTextures(1, &texName;); glBindTexture(GL_TEXTURE_1D, ...

    gertt点阵图读取器(opengl)

    glEnable(GL_DEPTH_TEST); // Enables Depth Testing glDepthFunc(GL_LEQUAL); // The Type Of Depth Testing To Do glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); // Really Nice ...

    高级OpenGL-深度测试

    OpenGL-Depthtest 1. 深度测试 深度测试被启用时,将该片段的深度值与深度缓冲中的深度值比较,如果测试通过则更新缓冲中的深度值。深度测试在片段着色器运行后,模板测试之后进行。并且仅对屏幕空间中的片段进行...

    计算机图形学实验报告.docx

    目录 实验一 OpenGL图形编程 3 1. 实验目的 3 2. 实验内容 3 3. 实验代码与实验结果 4 (1) 画矩形 4 (2) 画点 6 (3) 画直线 7 (4) 画等边三角形 8 实验二 直线绘制实验 9 1. 实验目的和实验内容 9 2. 实验代码和...

    OpenGL-POC:用于计算机图形作业的OpenGL测试4

    该项目是为CMake设置的。 编译每个示例非常简单-位于examples目录中。 确保在设备上安装了SDL,否则编译将无法进行。 在MacOS上,我将brew用于SDL。 例子 三角形彩色 立方体3D 立方光 型号加载 问题 Q1 调用SDL ...

    opengl画图程序附带源代码

    glEnable(GL_DEPTH_TEST); // Enables Depth Testing glDepthFunc(GL_LEQUAL); // The Type Of Depth Testing To Do glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); // Really Nice Perspective Calculations ...

    opengl 帮助文档

    Name glScalef , glScalex - multiply the current matrix by a general scaling matrix C Specification void glScalef(GLfloat x, ...glEnable, glMatrixMode, glMultMatrix, glPushMatrix, glRotate, glTranslate

    OopenGL习题讲解

    //设置背景色为蓝色 glShadeModel ( GL_SMOOTH ); glLightfv ( GL_LIGHT0, GL_POSITION, light_position); glEnable (GL_LIGHTING); glEnable (GL_LIGHT0); glEnable (GL_DEPTH_TEST); } /*调用GLUT函数,绘制一个球...

    计算机图形学作业实验报告.doc

    计算机图形学作业实验报告 计算机图形学实验报告班级:学号:姓名:指导教师:完成日期:实验一:多边形填充 1、实验目的了解多边形属性,熟悉相关函数的调用。 二、实验内容步骤和实现:首先进行初始化工作,进行...

    openGL程序

    glEnable(GL_CULL_FACE); glEnable(GL_DEPTH_TEST); glEnable(GL_LIGHTING); glLigntModelfv(GL_LIGHT_MODEL_AMBIENT,noLight); glLightfv(GL_LIGHTO,GL_AMBIENT,ambientLight); glLightfv(GL_LIGHTO,GL_...

    opengl中的剪裁变换

    通过定义剪裁平面实现对三维物体的剪裁,所使用的函数是:GLdouble eqn[4] = {1.0, 0.0, 0.0, 0.0}; //截平面定义 glClipPlane (GL_CLIP_PLANE0, eqn);...glEnable (GL_CLIP_PLANE0); //开启截平面

Global site tag (gtag.js) - Google Analytics