GLES2.0中文API-glDepthFunc

本文详细介绍了OpenGL中的glDepthFunc函数,该函数用于指定深度缓冲区的比较方式,包括GL_NEVER、GL_LESS、GL_EQUAL等选项,以及这些选项如何影响像素的绘制过程。文章还提到了深度测试的启用和禁用状态,以及错误处理。

名称

glDepthFunc - 指定用于深度缓冲区比较的值

C规范

void glDepthFunc(    GLenum func);

参数

func

指定深度比较功能。接受符号常量GL_NEVERGL_LESSGL_EQUALGL_LEQUALGL_GREATERGL_NOTEQUALGL_GEQUALGL_ALWAYS。初始值为GL_LESS

描述

glDepthFunc指定用于将每个输入像素深度值与深度缓冲区中存在的深度值进行比较的函数。仅在启用深度测试时才执行比较。 (参见GL_DEPTH_TESTglEnableglDisable。)

func指定绘制像素的条件。比较功能如下:

GL_NEVER

永远不通过。

GL_LESS

如果传入深度值小于存储的深度值(离观看者更近),则通过。

GL_EQUAL

如果传入深度值等于存储的深度值,则通过。

GL_LEQUAL

如果传入深度值小于或等于存储的深度值,则通过。

GL_GREATER

如果传入深度值大于存储的深度值,则通过。

GL_NOTEQUAL

如果传入的深度值不等于存储的深度值,则通过。

GL_GEQUAL

如果传入的深度值大于或等于存储的深度值,则通过。

GL_ALWAYS

总是通过。

func的初始值是GL_LESS。最初,深度测试被禁用。如果禁用深度测试或不存在深度缓冲,则就好像深度测试总是通过一样。

注意

即使存在深度缓冲区且深度掩模不为零,如果禁用深度测试,也不会更新深度缓冲区。

错误

GL_INVALID_ENUMfunc不是可接受的值

相关Gets

glGet 参数GL_DEPTH_FUNC

glIsEnabled 参数GL_DEPTH_TEST

另见

glDepthRangefglEnableglPolygonOffset

版权

https://www.khronos.org/registry/OpenGL-Refpages/es2.0/xhtml/glDepthFunc.xml

https://blog.csdn.net/flycatdeng

Copyright © 1991-2006 Silicon Graphics, Inc.本文档的许可是根据SGI Free Software B License.详见http://oss.sgi.com/projects/FreeB/.

Android,OpenGL ES,图形学
OpenGLES是一个专门用于嵌入式系统和移动设备的图形渲染API,可以用来绘制各种2D和3D图形。下面是一个简单的使用OpenGLES绘制图形的步骤: 1. 创建OpenGL ES上下文,需要使用EGL来完成这个步骤。 2. 配置OpenGL ES的状态,包括背景颜色、深度缓冲区、清除颜色和深度缓冲区等。 3. 创建OpenGL ES对象,包括着色器程序、顶点缓冲区、纹理等。 4. 绘制图形,使用绑定的着色器程序、顶点缓冲区、纹理等,调用OpenGL ES绘制函数进行绘制。 5. 交换前后缓冲区,将绘制结果显示到屏幕上。 下面是一个简单的OpenGL ES绘制三角形的示例代码: ```c++ #include <GLES2/gl2.h> #include <EGL/egl.h> EGLDisplay display; EGLSurface surface; EGLContext context; GLuint programObject; const GLfloat vertices[] = { 0.0f, 0.5f, 0.0f, -0.5f, -0.5f, 0.0f, 0.5f, -0.5f, 0.0f }; const char *vertexShaderSource = "attribute vec4 a_Position;\n" "void main() {\n" " gl_Position = a_Position;\n" "}\n"; const char *fragmentShaderSource = "precision mediump float;\n" "void main() {\n" " gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);\n" "}\n"; void init() { // 创建OpenGL ES上下文 EGLint configAttribs[] = { EGL_SURFACE_TYPE, EGL_WINDOW_BIT, EGL_RED_SIZE, 8, EGL_GREEN_SIZE, 8, EGL_BLUE_SIZE, 8, EGL_NONE }; EGLint majorVersion; EGLint minorVersion; EGLConfig config; EGLint numConfigs; EGLDisplay display = eglGetDisplay(EGL_DEFAULT_DISPLAY); eglInitialize(display, &majorVersion, &minorVersion); eglChooseConfig(display, configAttribs, &config, 1, &numConfigs); EGLSurface surface = eglCreateWindowSurface(display, config, nativeWindow, NULL); EGLContext context = eglCreateContext(display, config, EGL_NO_CONTEXT, NULL); eglMakeCurrent(display, surface, surface, context); // 配置OpenGL ES状态 glClearColor(0.0f, 0.0f, 0.0f, 0.0f); glClearDepthf(1.0f); glEnable(GL_DEPTH_TEST); glDepthFunc(GL_LEQUAL); // 创建OpenGL ES对象 GLuint vertexShader = glCreateShader(GL_VERTEX_SHADER); glShaderSource(vertexShader, 1, &vertexShaderSource, NULL); glCompileShader(vertexShader); GLuint fragmentShader = glCreateShader(GL_FRAGMENT_SHADER); glShaderSource(fragmentShader, 1, &fragmentShaderSource, NULL); glCompileShader(fragmentShader); programObject = glCreateProgram(); glAttachShader(programObject, vertexShader); glAttachShader(programObject, fragmentShader); glLinkProgram(programObject); glViewport(0, 0, width, height); } void render() { // 清除颜色缓冲区和深度缓冲区 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // 绑定着色器程序 glUseProgram(programObject); // 绑定顶点缓冲区 GLuint vbo; glGenBuffers(1, &vbo); glBindBuffer(GL_ARRAY_BUFFER, vbo); glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW); // 设置顶点属性 GLuint positionLocation = glGetAttribLocation(programObject, "a_Position"); glEnableVertexAttribArray(positionLocation); glVertexAttribPointer(positionLocation, 3, GL_FLOAT, GL_FALSE, 0, 0); // 绘制三角形 glDrawArrays(GL_TRIANGLES, 0, 3); // 交换前后缓冲区 eglSwapBuffers(display, surface); } int main() { init(); while (true) { render(); } return 0; } ``` 这是一个OpenGL ES 2.0的示例代码,包含了创建OpenGL ES上下文、配置OpenGL ES状态、创建OpenGL ES对象、绘制三角形等步骤。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值