在 OpenGL 中渲染透明对象

发布于 2024-12-07 23:54:16 字数 91 浏览 0 评论 0原文

我正在尝试使用 opengl 渲染一些 3d 对象。要求是我需要隐藏位于另一个透明对象后面的所有透明对象。所有三角形都在单个三角形缓冲区中,并且将立即绘制。请照亮一些。

Iam trying to render some 3d objects using opengl. Requirement is that i need to hide all the transparent objects which are z-behind another transparent object. All the triangles are in single triangle buffer and will be drawn at once. Please throw some light.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

羅雙樹 2024-12-14 23:54:16

尝试使用 glDepthMask():

    //Render all opaque objects
    glDepthMask(false); //disable z-testing
    //Render all transparent objects*
    glDepthMask(true); //enable z-testing (for the next frame)

*从技术上讲,您应该从后到前渲染透明对象,但如果不这样做,则很少会被注意到。

Try using glDepthMask():

    //Render all opaque objects
    glDepthMask(false); //disable z-testing
    //Render all transparent objects*
    glDepthMask(true); //enable z-testing (for the next frame)

*Technically, you should render the transparent objects from back to front, but it is rarely noticeable if you don't.

纸伞微斜 2024-12-14 23:54:16

您可以通过对场景进行排序来完成此操作,无论如何,为了使透明度正常工作,您都必须这样做。

以下是您需要执行的操作:

  1. 启用 z 缓冲区写入和测试
  2. 渲染所有不透明对象
  3. 从前到后渲染所有透明对象。 z 缓冲区将防止透明对象显示在其他透明对象后面。

You can do this by sorting your scene, which is what you have to do anyway to get transparency working correctly.

Here's what you need to do:

  1. Enable z-buffer writes and tests
  2. Render all opaque objects
  3. Render all transparent objects front to back. The z-buffer will prevent transparent objects from being displayed behind other transparent objects.
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文