当前位置: 首页 > news >正文

android openGL中模板测试、深度测试功能的先后顺序

目录

一、顺序

二、模板测试

1、概念

2、工作原理

3、关键函数

三、深度测试

1、概念

2、工作原理

3、关键函数

三、模板测试和深度测试的先后顺序


一、顺序

在Android OpenGL中,模板测试(Stencil Testing)是在深度测试(Depth Testing)之前执行的

二、模板测试

1、概念

模板测试是一种用于控制像素绘制的方式。它允许开发者根据模板缓冲区(Stencil Buffer)中的值来决定是否绘制某个像素。模板测试通常用于实现一些高级的图形效果,如阴影、反射、折射、物体轮廓描边等。

2、工作原理

当片段着色器处理完片段之后,模板测试就开始执行。它会将设定的模板参考值与片段对应位置的模板值进行比较,符合条件的片段通过测试,不符合条件的则被丢弃,不进行渲染。

3、关键函数

  • glEnable(GL_STENCIL_TEST):启用模板测试。

  • glStencilFunc(GLenum func, GLint ref, GLuint mask):设置模板测试函数。该函数决定了模板测试通过的条件。其中,func是测试函数,ref是参考值,mask是掩码,用于在比较前对模板值和参考值进行按位与运算。

  • glStencilOp(GLenum sfail, GLenum dpfail, GLenum dppass):设置模板测试通过或失败时的操作。其中,sfail是模板测试失败时的操作,dpfail是模板测试通过但深度测试失败时的操作,dppass是模板测试和深度测试都通过时的操作。

三、深度测试

1、概念

深度测试是指在片段着色器执行之后,利用深度缓冲所保存的深度值决定当前片段是否被丢弃的过程。它用于确定哪个物体在另一个物体的前面,从而正确地渲染场景。

2、工作原理

深度缓冲区通常和颜色缓冲区有着相同的宽度和高度,存储着每个像素的深度值。当深度测试开启时,OpenGL会比较当前片段的深度值与深度缓冲区中的值。如果当前片段的深度值小于深度缓冲区中的值(表示它更接近观察者),则通过测试,并更新深度缓冲区中的值;否则,丢弃该片段。

3、关键函数

  • glEnable(GL_DEPTH_TEST):启用深度测试。

  • glDepthFunc(GLenum func):设置深度测试函数。该函数决定了深度测试通过的条件。常用的选项有GL_LESS(小于)、GL_LEQUAL(小于等于)等。

  • glClear(GL_DEPTH_BUFFER_BIT):清除深度缓冲区。在渲染之前,通常需要清除深度缓冲区以避免使用上一次渲染时留下的深度值。

三、模板测试和深度测试的先后顺序

在渲染管线中,模板测试发生在深度测试之前。首先,OpenGL会执行模板测试,根据模板缓冲区和参考值来决定是否丢弃某些片段。然后,对于通过模板测试的片段,OpenGL会执行深度测试,进一步决定哪些片段应该被保留并渲染到屏幕上。

综上所述,Android OpenGL中模板测试和深度测试的先后顺序是先进行模板测试,然后进行深度测试。这种顺序允许开发者利用模板测试来实现复杂的图形效果,如物体轮廓描边等,同时仍然能够利用深度测试来正确地渲染场景中的物体。

http://www.lryc.cn/news/479742.html

相关文章:

  • CCF PTA 编程培训师资认证2021年7月真题- C++兑换礼品
  • 火山引擎云服务docker 安装
  • 【taro react】 ---- 常用自定义 React Hooks 的实现【六】之类渐入动画效果的轮播
  • 基础算法练习--滑动窗口(已完结)
  • 深度学习经典模型之ZFNet
  • Linux系统-ubuntu系统安装
  • 2-Ubuntu/Windows系统启动盘制作
  • 你使用过哪些MySQL中复杂且使用不频繁的函数?
  • Redis-07 Redis哨兵
  • 7.qsqlquerymodel 与 qtableview使用
  • 状态模式(State Pattern)详解
  • ajax微信静默登录不起效不跳转问题
  • 参数估计理论
  • mybatis插入数据运行成功但数据库没有数据,id却在增长,是什么原因??
  • Hadoop简介及单点伪分布式安装
  • 网站架构知识之Ansible模块(day021)
  • 是时候用开源降低AI落地门槛了
  • 操作系统学习笔记-5.1-IO设备
  • 页面、组件、应用、生命周期(微信小程序)
  • 书生第四期实训营进阶岛——L2G4000 InternVL 多模态模型部署微调实践
  • 国内 ChatGPT中文版镜像网站整理合集(2024/11/08)
  • SpringBoot整合Liquibase对数据库管理和迁移
  • 太空旅游:科技能否让星辰大海变为现实?
  • [JAVAEE] 面试题(四) - 多线程下使用ArrayList涉及到的线程安全问题及解决
  • Elasticsearch-linux环境部署
  • LeetCode 每日一题 长度为 K 的子数组的能量值
  • 人工智能——小白学习指南
  • go 集成Gin Web开发框架
  • c++ 多态性
  • 块存储、文件存储和对象存储详细介绍