首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

OpenGL如何在模板测试失败和深度测试成功的情况下写入模板缓冲区?

在OpenGL中,可以通过使用模板缓冲区来实现在模板测试失败但深度测试成功的情况下写入模板缓冲区的操作。模板缓冲区是一个与颜色缓冲区类似的缓冲区,用于存储每个像素的模板值。

要在模板测试失败和深度测试成功的情况下写入模板缓冲区,可以按照以下步骤进行操作:

  1. 启用模板缓冲区:在渲染之前,需要启用模板缓冲区。可以使用以下代码进行启用:
  2. 启用模板缓冲区:在渲染之前,需要启用模板缓冲区。可以使用以下代码进行启用:
  3. 设置模板测试和深度测试:在进行渲染之前,需要设置模板测试和深度测试的条件。可以使用以下代码进行设置:
  4. 设置模板测试和深度测试:在进行渲染之前,需要设置模板测试和深度测试的条件。可以使用以下代码进行设置:
  5. 渲染对象:在进行渲染时,可以通过绘制对象的方式来实现在模板测试失败但深度测试成功的情况下写入模板缓冲区。可以使用以下代码进行渲染:
  6. 渲染对象:在进行渲染时,可以通过绘制对象的方式来实现在模板测试失败但深度测试成功的情况下写入模板缓冲区。可以使用以下代码进行渲染:
  7. 禁用模板缓冲区:在渲染完成后,可以禁用模板缓冲区以节省资源。可以使用以下代码进行禁用:
  8. 禁用模板缓冲区:在渲染完成后,可以禁用模板缓冲区以节省资源。可以使用以下代码进行禁用:

总结起来,要在模板测试失败和深度测试成功的情况下写入模板缓冲区,需要启用模板缓冲区,设置模板测试和深度测试的条件,渲染对象,并在渲染完成后禁用模板缓冲区。

腾讯云相关产品和产品介绍链接地址:

  • 腾讯云GPU云服务器:https://cloud.tencent.com/product/cvm/gpu
  • 腾讯云云原生容器服务:https://cloud.tencent.com/product/tke
  • 腾讯云云数据库MySQL版:https://cloud.tencent.com/product/cdb_mysql
  • 腾讯云云服务器负载均衡:https://cloud.tencent.com/product/clb
  • 腾讯云云安全中心:https://cloud.tencent.com/product/ssc
  • 腾讯云云点播:https://cloud.tencent.com/product/vod
  • 腾讯云人工智能:https://cloud.tencent.com/product/ai
  • 腾讯云物联网通信:https://cloud.tencent.com/product/iotexplorer
  • 腾讯云移动推送:https://cloud.tencent.com/product/tpns
  • 腾讯云对象存储:https://cloud.tencent.com/product/cos
  • 腾讯云区块链服务:https://cloud.tencent.com/product/baas
  • 腾讯云游戏多媒体引擎:https://cloud.tencent.com/product/gme
  • 腾讯云云游戏引擎:https://cloud.tencent.com/product/gse
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

NDK OpenGLES3.0 开发(十一):模板测试

OpenGL ES 模板测试 模板测试深度测试类似,主要作用是利用模板缓冲区(Stencil Buffer)所保存模板值决定当前片段是否被丢弃,且发生于深度测试之前。 ?...,但是深度测试失败时将如何更新模板值; dppass:如果深度测试模板测试都通过,将如何更新模板值。...一样将模板值 -1 ,如果模板值已经是最小值则设为最大值 GL_INVERT 按位反转当前模板缓冲区值 绘制物体轮廓是模板测试常见应用,其步骤一般如下: 启动深度测试模板测试,清空模板缓冲和深度缓冲...; 在绘制物体前,用 1 更新物体将被渲染片段对应模板值; 渲染物体,写入模板缓冲区; 关闭模板写入深度测试; 将物体放大一定比例; 使用一个不同片段着色器用来输出一个纯颜色(物体轮廓颜色);...再次绘制物体,当片段模板值不为 1 时,片段通过测试进行渲染; 开启模板写入深度测试

70910

NDK OpenGLES3.0 开发(十):深度测试

深度缓冲区通常颜色缓冲区有着相同宽度高度,一般由窗口系统自动创建并将其深度值存储为 16、 24 或 32 位浮点数。 当深度测试开启时候, OpenGL 才会测试深度缓冲区深度值。...如果此测试通过,深度缓冲内值可以被设为新深度值;如果深度测试失败,则丢弃该片段。 深度测试是在片段着色器运行之后(并且在模板测试运行之后)在屏幕空间中执行。...不启用深度测试 开启深度测试后,如果片段通过深度测试OpenGL 自动在深度缓冲区存储片段 gl_FragCoord.z 值,如果深度测试失败,那么相应地丢弃该片段。...OpenGL 深度测试是通过深度测试函数 glDepthFunc 控制深度测试是否通过如何更新深度缓冲区深度测试函数接收比较运算符: ?...深度测试函数接收比较运算符 深度测试启用后,默认情况下深度测试函数使用 GL_LESS,这将丢弃深度值高于或等于当前深度缓冲区片段。 深度测试中,深度冲突现象需要值得注意。

94730

《Unity Shader入门精要》笔记(一)

这个阶段有几个主要任务: 决定每个片元可见性,涉及:深度测试模板测试等。 通过测试片元与颜色缓冲区颜色进行合并/混合。 深度测试模板测试简化流程图: 模板测试 高度可配置。...不管模板测试有没有通过,我们都可以根据模板测试深度测试结果来修改模板缓冲区,操作修改可由开发者指定。 深度测试 高度可配置。...与模板测试类似,将当前片元深度深度缓冲区深度值进行比较,比较函数可由开发者设置,通常这个比较函数是小于等于关系,也就是显示距离相机更近物体。...如果深度测试没有通过,它没有权利更改深度缓冲区值;如果通过了,开发者可以指定是否用这个片元深度值盖掉缓冲区深度值——通过开启/关闭深度写入来控制。 混合 高度可配置。...开发者可选择开启/关闭混合模式,来控制是直接覆盖,还是将源颜色(当前片元颜色)目标颜色(颜色缓冲区颜色)进行混合后写入颜色缓冲区

1K11

OpenGL ES 3.0 简介

光栅化阶段 生成 颜色、深度模板 屏幕坐标位置(Xw,Yw) 变成 OpenGL ES 3.0管线 逐片段操作 阶段输入。...剪裁测试—— 确定(Xw,Yw)是否位于OpenGL ES 状态一部分裁剪矩形范围内,抛弃范围之外片段。...模板测试深度测试—— 这些测试在输入片段 模板 深度值 上进行 ,以确定片段是都该被拒绝。 混合——将新生成颜色保存在帧缓冲区(Xw,Yw)位置颜色值组合起来。...抖动——用于最小化 因为使用有限精度在帧缓冲区中保存颜色值而产生伪像。 在逐片段操作阶段最后,片段 被拒绝 或者 在帧缓冲区(Xw,Yw)位置写入片段颜色、深度或者模板值。...写入片段颜色、深度或者模板值 取决于 启用相应写入掩码。写入掩码可以更精细控制写入值。例如,可以设置颜色缓冲区写入掩码 使得 任何红色值都不被写入到颜色缓冲区

1.2K20

三维图形渲染显示全过程

输入一般是一个变换矩阵一个相对坐标;输出为眼空间中坐标及每个顶点所附带其他属性,颜色、纹理坐标 曲面细分着色器:用于细分图元,分为3个阶段。...如果一个片元通过了所有的测试,新生成片元才能颜色缓冲区中已存在像素颜色进行Alpha混合,并写入颜色缓冲区 • Alpha测试: ?...注1:若建立模板缓冲区为8bits,则模板范围为:[0, 255]整数;其初始值为清理模板缓冲区所设置值 注2:若在模板测试时,关闭了深度测试,则深度测试始终通过 • 深度测试: ?...注1:深度值范围(D3D:[0.0, 1.0] OpenGL:[-1.0, 1.0]),建立深度缓冲区位数越多,则深度精度就会越高;其初始值为清理深度缓冲区所设置值 注2:关闭了深度测试,意味着该片元始终通过深度测试...由于只是将前台缓冲区指针后备缓冲区指针做一个简单交换,提交是一个运行速度很快操作。

3.9K41

20分钟让你了解OpenGL ——OpenGL全流程详细解读

通过了深度测试模板测试,会缓冲区颜色附着(FrameBuffer上ColorAttachment)上颜色进行混合,决定最终留在画布上颜色是什么。 ? ?...测试主要可以分为像素所有者测试(PixelOwnershipTest)、裁剪测试(ScissorTest)、模板测试(StencilTest)深度测试(DepthTest),执行顺序也是按照这个顺序进行执行...深度测试,主要是通过对像素运算出来深度,也就是像素离屏幕距离进行对比,根据OpenGL设定好深度测试程序,决定是否最终渲染到画布上。...模板测试深度测试执行原理一致,但是执行顺序是在深度测试之前,放在后面 主要是比深度测试更加难以理解一些,初学者可以暂时跳过这个部分。...模板测试同样也是通过模板测试程序去决定最终像素是否丢弃,同样也是根据OpenGL模板覆写状态决定是否更新像素模板值。

7.7K44

OpenGLES_理论01_介绍

用于指定物体操作, 创建交互式三维应用程序 问题3: OpenGL 提供函数能完成那些任务不能完成那些任务 OpenGL 只提供了一些简单图元描述(点,直线多变形),没有提供描述三维物体模型高级函数...,(汽车,身体某些关节等) 理解OpenGL 渲染原理 操作顺序 [名词解释] 顶点数据对象 比如你要绘制一个三角形,三角形有三个顶点,你要把三个顶点数据,放到内存中一个区域中,这个内存对象...),每个片段都具有各自颜色深度值 纹理内存 存放纹理图片内存区域 片段着色器 对最终像素点,显示颜色做一些,运算或者处理操作,比如你想让显示图片变模糊,你就在这里干....片段操作 我们在片段着色器上纹理图片或者颜色数据进行了处理操作,但是还没有显示到片段上,前面的一些操作,生成了最终颜色深度,如果有效,执行可用裁剪测试,alpha测试模板测试深度缓冲测试,某种测试失败将放弃最终片段方块继续处理...如果成功,执行是混合,抖动,逻辑操作以及根据一个位掩码屏蔽操作,完成处理片段就会被绘制到适当缓冲区上。

59710

OpenGL ES 3.0 深度测试(OC)(二)

这几个步骤同文章一,下面主要讲解下申请缓存区(深度测试),渲染步骤。 1.申请缓存区(深度测试) 一般情况下我们要申请渲染缓存区,帧缓存区,如果使用深度测试也需要申请深度缓存区。...,还需要绑定下 // 在帧缓存 渲染缓存创建 绑定结束后需要 // 渲染缓存作为帧缓存某种(颜色、深度模板)附件 glFramebufferRenderbuffer(...3.什么是深度测试 深度测试概念: 深度其实就是该像素点在3D世界中距离摄像机距离Z值 什么是深度缓冲区深度缓存区,就是一块内存区域,专门储存着每个像素点(绘制在屏幕上深度值。...有了深度缓冲区后,绘制 物体顺序就不那么重要。实际上,只要存在深度缓冲区OpenGL都会把像素深度写入缓冲区中。除非调用glDepthMask(GL_FALSE)来禁止写入。...如果启用了深度缓冲区,在绘制每个像素之前,OpenGL会把它深度已经存储在这个像素深度值进行比较。

90110

OpenGL ES简介

光栅化阶段产生颜色、深度模板屏幕坐标(Xw, Yw)成为流水线中pre-fragment阶段(FragmentShader之后)输入。...Stencil and depth tests:模板深度测试传入片元模板深度值,决定是否丢弃片元。...逐片元操作之后,片元要么被丢弃,要么一个片元颜色,深度或者模板值被写入到framebuffer(Xw,Yw)位置,不过是否真的会写入还得依赖于write masks启用与否。...write masks能更好控制颜色、深度模板写入到合适缓冲区。例如:颜色缓冲区write mask可以被设置成没有红色值写入到颜色缓冲区。...另外,Opengl ES 2.0提framebuffer中获取像素接口,不过需要记住是像素只能从颜色缓冲区读回,深度模板值不能读回。

1.9K70

【专业技术】OpenGL操作技巧介绍

在最终像素数据写入到帧缓冲区之前,这两种类型数据都将经过相同最终步骤(光棚化基于 片断操作)。下面,我们更为详细地介绍OpenGL渲染管线一些关键阶段。...接下来所进行是视口(viewport)深度(z 坐标)操作。如果启用了剔除功能(culling)并且该图元是个多边形,那么它就有可能被剔除测试所拒绝。...处理结果先进行截取,然后或者写入到纹理内存,或者发送到光棚化阶段。如果像素数据时从帧缓冲区读取,就对他们执行像素转换操作(缩放、偏移、映射截取)。...这样,在数据写入到纹理内存或者写回到帧缓冲区之前,只需要进行一道像素转换就可以了。...接着可能进行是雾计算,然后是剪裁测试,alpha测试模板测试深度缓冲区 测试(深度缓冲区用于消除被隐藏表面)。如果一个片断无法通过一个启用测试,它连续处理过程可能会被中断。

1.3K20

OpenGL ES简介

光栅化阶段产生颜色、深度模板屏幕坐标(Xw, Yw)成为流水线中pre-fragment阶段(FragmentShader之后)输入。...Stencil and depth tests:模板深度测试传入片元模板深度值,决定是否丢弃片元。...逐片元操作之后,片元要么被丢弃,要么一个片元颜色,深度或者模板值被写入到framebuffer(Xw,Yw)位置,不过是否真的会写入还得依赖于write masks启用与否。...write masks能更好控制颜色、深度模板写入到合适缓冲区。例如:颜色缓冲区write mask可以被设置成没有红色值写入到颜色缓冲区。...另外,Opengl ES 2.0提framebuffer中获取像素接口,不过需要记住是像素只能从颜色缓冲区读回,深度模板值不能读回。

1.8K50

模板阴影理论概述

箭头末尾数字是渲染阴影卷后留在模版缓冲区值。具有非零模板片段被认为是阴影。在模板缓冲区中生成值是以下模板操作结果: 渲染阴影卷正面。如果深度测试通过,增加模板值,否则不执行任何操作。...禁止绘制到帧深度缓冲区。 渲染阴影卷背面。如果深度测试通过,减少模板值,否则不执行任何操作。禁止绘制到帧深度缓冲区。...当我们渲染阴影卷正面时,深度测试将通过,模板值将增加到1.当我们渲染阴影卷背面时,深度测试失败,因为阴影卷背面位于封堵器后面。...如果深度测试失败,则增加模板值,否则不执行任何操作。禁止绘制到帧深度缓冲区。 渲染阴影卷正面。如果深度测试失败,减少模板值,否则不执行任何操作。禁止绘制到帧深度缓冲区。...实施模板阴影卷步骤一般列表将是: 使用环境照明任何其他表面阴影属性渲染所有对象。渲染不应该依赖于任何特定光源。确保深度缓冲区写入

1.1K30

14.opengl高级-模板测试

1.3 stencil test在graphics pipeline里面的位置,模板测试深度测试之前 ?...); // 每一位写入模板缓冲时都保持原样 glStencilMask(0x00); // 每一位在写入模板缓冲时都会变成0(禁用写入) // 测试规则 glStencilFunc(GL_EQUAL,...1, 0xFF) GL_ALWAYS //永远通过深度测试 GL_NEVER //永远不通过深度测试 GL_LESS //在片段深度值小于缓冲深度值时通过测试 GL_EQUAL //...在片段深度值等于缓冲区深度值时通过测试 GL_LEQUAL //在片段深度值小于等于缓冲区深度值时通过测试 GL_GREATER //在片段深度值大于缓冲区深度值时通过测试 GL_NOTEQUAL...//在片段深度值不等于缓冲区深度值时通过测试 GL_GEQUAL 在片段深度值大于等于缓冲区深度值时通过测试 // 测试完,有三种结果,每一种测试结果可以设置是否通过(决定要不要绘制) glStencilOp

1K30

OpenGL 深度测试与精度值那些事

这就是在没有开启深度测试情况下,本来应该被遮挡,绘制在后面的面却绘制到了其他面之上。 要解决这种问题,就得使用深度测试了。...OpenGL 会执行一个深度测试,如果这个测试通过了的话,深度缓冲将会更新为新深度值,如果深度测试失败了,该片段将会被丢弃。 深度缓冲是在片段着色器运行之后,在屏幕空间中运行。...OpenGL 运行我们禁用深度缓冲写入,只需要设置它深度掩码为 GL_FALSE 即可。...在片段深度值等于缓冲区深度值时通过测试 GL_LEQUAL 在片段深度值小于等于缓冲区深度值时通过测试 GL_GREATER 在片段深度值大于缓冲区深度值时通过测试 GL_NOTEQUAL 在片段深度值不等于缓冲区深度值时通过测试...GL_GEQUAL 在片段深度值大于等于缓冲区深度值时通过测试 默认情况下使用是 GL_LESS,它将丢弃深度值大于当前深度缓冲值所有片段。

1.6K30

一看就懂 OpenGL 基础概念(4):各种 O 之 FBO丨音视频基础

一般来讲,必要是颜色缓冲区深度缓冲区模板缓冲区、累加缓冲区是可选。...FBO 虽然也叫缓冲区对象,但是它并不是一个真正缓冲区,因为 OpenGL 并没有为它分配存储空间去存储渲染所需几何、像素数据,我们可以认为它是一个指针集合,这些指针指向了颜色缓冲区深度缓冲区、...模板缓冲区、累积缓冲区等这些真正缓冲区对象,我们把这里『指向关系』叫做附着,而 FBO 中附着点类型有:颜色附着、深度附着模板附着。...渲染缓冲区对象(Render Buffer Object,RBO)则是一个由应用程序分配 2D 图像缓冲区,可以分配存储颜色、深度或者模板值,可以用作 FBO 中颜色、深度或者模板附着。...1)使用纹理附件 当把一个纹理(Texture)附加到 FBO 上时候,所有渲染命令会写入到纹理上,就像它是一个普通颜色/深度或者模板缓冲一样。

1.6K30

OpenGLOpenGL在移动端应用

renderbuffer可以用来分配存储颜色、深度模板值,也可以用作framebuffer对象中颜色、深度模板附件。渲染缓冲区类似于屏幕外窗口系统提供可绘制表面,例如pbuffer。...frameBuffer:framebuffer对象(通常称为FBO)是颜色、深度模板缓冲区连接点集合;描述附加到FBO颜色、深度模板缓冲区大小格式等属性状态;以及附加到FBO纹理renderbuffer...,GL_DEPTH_BUFFER_BITGL_STENCIL_BUFFER_BIT 也可组合:glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT...6).Per-Fragment Operations (逐片段操作) 它包含像素归属测试(Pixel Ownership Test)、裁剪测试(Scissor Test)、模板深度测试(Stencil...setupCubeProjectionAndCamara]; [self drawOutLine]; //画轮廓 [self drawTopPoi]; //画顶层poi 里面有多次深度测试开启关闭

2.6K30

OpenGL API 简介

创建 aux库是为了学习编写 OpenGL 程序,它更像是一个用于测试创意预备基础接管。Aux 库在 windows 实现有很多错误,因此很容易导致频繁崩溃。...为深度缓冲区指定用于清除值 glClearStencil 为模板缓冲区指定用于清除值 glClipPlane 定义被裁剪一个平面几何体 glColor 设置当前色彩 glColorMask...定义用于深度缓冲区对照数据 glDepthMask 允许或不允许写入深度缓冲区 glDepthRange 定义 z 值从标准设备坐标映射到窗口坐标 glDrawArrays 定义渲染多个图元...glScissor 定义裁减框 glSelectBuffer 为选择模式值建立一个缓冲区 glShadeModel 选择平直或平滑着色 glStencilFunc 为模板测试设置功能参照值...glStencilMask控制在模板面写单独位 glStencilOp 设置激活模式测试 glTexCoord 设置当前纹理坐标 glTexCoordPointer 定义一个纹理坐标数组 glTexEnvf

2.2K41

OpenGL学习笔记 (一)- 综述、渲染管线

因此,OpenGL绘制操作结果,是向内存/显存中一段连续空间(也就是帧缓存,Frame buffer)写入若干像素信息,作为屏幕显示内容。而OpenGL接受,通常是若干三维空间内数据。...通过图元装配,顶点数据将会被转化为完整几何图元,也就是根据颜色、深度等等进行了变化裁剪顶点。由于早期图元装配已经做了装配图元工作(没错,装配图元不是这个时候进行!)...可能测试有剪裁测试、alpha测试模板测试深度缓冲区测试等等。如果失败(比如发现片段被另一个片段遮挡)将会抛弃这个片段。 之后将会进行混合、抖动、逻辑操作、写掩码等等复杂处理。...不过通常情况下,程序采用双缓冲(double buffer)形式。因为如果仅采用一个缓冲,那渲染新一帧过程中写入新数据与旧数据混杂,会导致画面撕裂。因此通常程序会设置两个缓冲区。...矩阵后使用“行x列”形式表示大小(mat2x4),对于方阵可以直接使用一位数字(mat4)。向量矩阵维度最多支持4维。

1.4K11
领券