`

Android OpenGL ES 开发教程(24):Depth Buffer

 
阅读更多

OpenGL ES 中Depth Buffer 保存了像素与观测点之间的距离信息,在绘制3D图形时,将只绘制可见的面而不去绘制隐藏的面,这个过程叫”Hidden surface removal” ,采用的算法为”The depth buffer algorithm”。

一般来说,填充的物体的顺序和其顺序是一致的,而要准确的显示绘制物体在Z轴的前后关系,就需要先绘制距离观测点(ViewPoint)最远的物体,再绘制离观测点较远的物体,最后绘制离观测点最近的物体,因此需要对应所绘制物体进行排序。OpenGL ES 中使用Depth Buffer存放需绘制物体的相对距离。

The depth buffer algorithm 在OpenGL ES 3D绘制的过程中这个算法是自动被采用的,但是了解这个算法有助于理解OpenGL ES 部分API的使用。

这个算法的基本步骤如下:

  1. 将Depth Buffer中的值使用最大值清空整个Depth Buffer,这个最大值缺省为1.0 ,为距离viewPoint 最远的裁剪的距离。最小值为0,表示距离viewPoint 最近的裁剪面的距离。距离大小为相对值而非实际距离,这个值越大表示与Viewpoint之间的距离越大。因此将初值这设为1.0 相当于清空Depth Buffer。
  2. 当OpenGL 栅格化所绘制基本图形(Primitive),将计算该Primitive 与viewpoint 之间的距离,保存在Depth Buffer中。
  3. 然后比较所要绘制的图形的距离和当前Depth Buffer中的值,如果这个距离比Depth Buffer中的值小,表示这个物体离viewPoint 较近,Open GL则更像相应的Color Buffer 并使用这个距离更新Depth Buffer,否则,表示当前要绘制的图形在已绘制的部分物体后面,则无需绘制该图形(删除)。

这个过程也称为”Depth Test” (深度测试)。

下面给出了OpenGL ES中与Depth Buffer相关的几个方法:

  • gl.Clear(GL10.GL_DEPTH_BUFFER_BIT) 清空Depth Buffer (赋值为1.0)通常清空Depth Buffer和Color Buffer同时进行。
  • gl.glClearDepthf(float depth) 指定清空Depth Buffer是使用的值,缺省为1.0,通常无需改变这个值,
  • gl.glEnable(GL10.GL_DEPTH_TEST) 打开depth Test
  • gl.glDisable(GL10.GL_DEPTH_TEST) 关闭depth Test
分享到:
评论

相关推荐

    OpenGL ES应用开发实践指南:iOS卷(源码)

    OpenGL ES应用开发实践指南:iOS卷是一本专为iOS开发者设计的深度学习资源,它涵盖了在iOS设备上使用OpenGL ES进行图形编程的核心概念和技术。OpenGL ES(OpenGL for Embedded Systems)是OpenGL的一个轻量级版本,...

    Android OpenGL 教程(6-10)

    在Android上,OpenGL ES(Embedded Systems的缩写)被广泛用于游戏开发、复杂用户界面和视觉效果。这个系列的教程,"Android OpenGL 教程(6-10)",是从经典的Nehe OpenGL教程移植到Android平台的,旨在帮助开发者...

    android开发之OpenGL ES教程

    本教程将聚焦于Android上的OpenGL ES 3D游戏开发,介绍如何设置OpenGL ES视图,这是任何图形应用的基础。 首先,我们要了解的是`GLSurfaceView`。在Android 1.5版本中引入的`GLSurfaceView`是一个API类,它为编写...

    opengles画中画功能

    在Android系统中,OpenGL ES是主要的图形库,它允许开发者创建丰富的视觉体验,包括“画中画”功能。 画中画(Picture-in-Picture,简称PiP)是一种显示技术,它可以在主屏幕显示的同时,小窗口显示另一个视频或...

    OpenGLES demo - 5. 深度测试

    在"OpenGLES demo - 5. 深度测试"这个项目中,我们将深入探讨如何利用OpenGL ES实现深度测试,并通过源码分析来理解其实现细节。 首先,深度测试的基本概念是基于每个像素的Z值(或称为深度值),它表示该像素在3D...

    Opengl ES 3.x游戏开发(上)源码

    OpenGL ES 3.x是针对移动设备的图形处理API,它为开发者提供了强大的3D图形渲染能力,被广泛应用于游戏开发、虚拟现实、增强现实等领域。OpenGL ES 3.x相较于之前的版本,增加了许多新特性和改进,提升了性能和功能...

    OpenGL-ES-tutorials:完成一组适用于 Android 的 OpenGL ES 教程

    这些教程旨在帮助开发者了解如何在 Android 平台上使用 OpenGL ES 进行图形渲染。 在 Android 开发中,OpenGL ES 是一个重要的组件,它允许开发者创建复杂的3D图形和动态视觉效果。OpenGL ES 通常用于游戏开发、...

    《OpenGL ES 3.x游戏开发 上卷》源码

    本书《OpenGL ES 3.x游戏开发 上卷》专注于使用这一技术进行游戏开发,提供了丰富的源码实例,帮助读者深入理解OpenGL ES 3.x的工作原理和实践应用。 在Android平台上,OpenGL ES是通过Android的SurfaceView和...

    OpenGL ES 3.0 Programming Guide, 2nd Edition

    All code has been built and tested on iOS 7, Android 4.3, Windows (OpenGL ES 3.0 Emulation), and Ubuntu Linux, and the authors demonstrate how to build OpenGL ES code for each platform. Coverage ...

    Android Studio中利用OPenGL ES绘制一个三棱锥,并对三棱锥进行纹理贴图

    在Android开发中,OpenGL ES(OpenGL for Embedded Systems)是一个广泛使用的图形库,用于在移动设备上绘制复杂的2D和3D图形。本教程将详细讲解如何在Android Studio中利用OpenGL ES绘制一个三棱锥,并对其表面进行...

    openGLES2.0 游戏开发源码

    在Android系统中,OpenGLES2.0是广泛用于2D和3D图形渲染的标准,它提供了丰富的图形功能,为游戏开发提供了强大的支持。下面我们将深入探讨OpenGLES2.0在Android游戏开发中的关键知识点。 1. **顶点着色器(Vertex ...

    西蒙iPhone-OpenGL ES 教程【中文翻译版PDF】

    本教程是关于OpenGL ES在iPhone平台上的应用,它是一份专业的iOS开发技术文档。OpenGL ES(Open Graphics Library for Embedded Systems)是用于嵌入式设备的跨语言、跨平台的图形API标准,它基于OpenGL。这份教程...

    OpenGL ES 教程 for iphone

    首先,要创建一个基于OpenGL ES的应用程序,你需要使用Xcode,这是苹果的集成开发环境。在Xcode中,选择"OpenGL ES Application"模板来创建一个新的项目。这个模板提供了一个基础的框架,其中包括一个预设的旋转彩色...

    opengl es 3.0源代码

    同时,理解EAGL、OpenGLES和GLKit框架(iOS)、Android的SurfaceView和GLSurfaceView(Android)以及WGL、GLFW或SDL库(Windows)的应用也是必不可少的。 这个压缩包中的"opengles3-book-master"很可能包含了各种...

    android opengl-es 2.0 java 实现绘制三角形

    <uses-feature android:name="android.hardware.opengles.aep" android:required="true" /> ``` 接着,创建一个新的Activity,该Activity继承自`GLSurfaceView.Renderer`,并实现其三个方法:`onSurfaceCreated()`,...

    OpenGLES_Chapter_iOS:OpenGL ES应用开发实践指南iOS卷演示

    OpenGLES_Chapter_iOS是针对iOS平台的OpenGL ES应用开发实践指南,它包含了丰富的示例代码和教程,帮助开发者深入理解并掌握OpenGL ES的使用。 在iOS上,OpenGL ES被广泛用于游戏开发、科学可视化、图像处理等场景...

    android使用OPENGL ES绘制圆柱体

    Android 使用 OPENGL ES 绘制圆柱体 Android 使用 OPENGL ES 绘制圆柱体是一种常见的图形绘制技术,通过使用 OpenGL ES 库,可以在 Android 平台上实现三维图形绘制。下面将详细介绍 Android 使用 OPENGL ES 绘制...

    android opengl 代码

    1. **Android OpenGL ES API**:Android提供了`javax.microedition.khronos.opengles.GL10`接口和`GLSurfaceView`类来与OpenGL ES交互。`GLSurfaceView`是一个特殊的SurfaceView,它处理OpenGL ES的渲染线程和缓冲...

    OpenGL ES应用开发实践指南 iOS卷

    1. **基础概念**:理解OpenGL ES的基本架构,包括上下文(Context)、绘图表面(Framebuffer)、帧缓冲区(Frame Buffer)、颜色缓冲区(Color Buffer)、深度缓冲区(Depth Buffer)以及模板缓冲区(Stencil Buffer...

Global site tag (gtag.js) - Google Analytics