首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在OpenGL中工作的Z缓冲器

在OpenGL中工作的Z缓冲器
EN

Computer Graphics用户
提问于 2017-02-14 19:05:10
回答 1查看 462关注 0票数 4

在Z-缓冲区测试之后,片段着色器会在丢弃的片段上运行吗?Z-测试是在片段着色器运行之后发生的吗?

请告诉我Z测试中一步一步发生的事件.

还有什么是早期Z-测试和如何实现它?

EN

回答 1

Computer Graphics用户

回答已采纳

发布于 2017-02-15 02:55:06

当启用深度测试时,测试将在片段着色器执行后进行。这个过程相对简单(这里很清楚地说明了这一点):

  • 碎片深度
  • 测试深度缓冲器
  • 如果失败就丢弃

早期-z丢弃是当一个光栅化器在碎片着色器运行之前丢弃一个片段,因为很明显它在早期不会通过深度测试。但是,如果发生某些事情(例如调用discard()或修改片段着色器中的片段深度),则光栅程序无法安全地做到这一点。这是一种硬件优化,除非使用OpenGL 4.2或扩展名强制执行,否则不需要进行优化。

有些东西可以防止早-z丢弃的发生。为实现这一目标:

  • 不要在片段着色器中使用discard()
  • 不要修改片段着色器中片段的深度
  • 不要使用alpha测试(不推荐)
  • 一定要打开深度测试
  • 确保您有深度缓冲区。
票数 4
EN
页面原文内容由Computer Graphics提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://computergraphics.stackexchange.com/questions/4722

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档