【问题标题】:OpenGL render interior faces with occlusionOpenGL 使用遮挡渲染内部面
【发布时间】:2020-02-05 10:31:05
【问题描述】:

在 OpenGL 中有没有办法只渲染内部面,而外部面仍然覆盖/遮挡内部面?为了更好地理解我想要完成的任务,如果我切片一个随机定位的圆柱体,我只会看到一个椭圆。

我试过了:

    glEnable(GL_CULL_FACE);
    glEnable(GL_BACK);

但在这种情况下,我看到了圆柱体的整个内部,而外部面只是消失了,没有覆盖任何东西。

谢谢

【问题讨论】:

  • 我在发布的命令中犯了一个错误。编辑它们。不知道解决方法是不是跟剔除有关
  • 仅使用 Z 缓冲区渲染外表面(glColorMask false),然后正常渲染内表面(glColorMask true)?

标签: opengl occlusion occlusion-culling


【解决方案1】:

GL_BACK 不能“启用”。被剔除的面被glCullFace选中:

glEnable(GL_BACK);

glCullFace(GL_BACK);

注意,glEnable(GL_BACK) 将导致 INVALID_ENUM 错误。

面部剔除取决于缠绕顺序。另见Face Culling

例如如果你的脸是顺时针的并且你想剔除背面,那么你必须:

glFrontFace(GL_CW​);
glCullFace(GL_BACK);
glEnable(GL_CULL_FACE);

请注意,重要的是,所有面都具有相同的缠绕顺序(顺时针或逆时针)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-08
    • 2010-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-12
    相关资源
    最近更新 更多