【问题标题】:View the inside of a cylinder查看圆柱体内部
【发布时间】:2012-07-11 17:57:16
【问题描述】:

如果我画一个gluCylinder,上面有一个gluDisk。在不启用剔除的情况下,我得到了带有盖子效果的所需圆柱体。但是,如果我启用剔除,磁盘(又名盖子)就会消失。 为什么会这样?这是主要问题。此外,启用剔除后,圆柱体的背面也不会被绘制。我明白为什么会发生这种情况,但我仍然希望看到圆柱体内部的绘制。代码是:

    glPushMatrix()
    quadratic = gluNewQuadric()
    gluQuadricNormals(quadratic, GLU_SMOOTH)
    gluQuadricTexture(quadratic, GL_TRUE)
    glRotatef(90, 1, 0, 0)
    glTranslate(0, 0, -3*sz)
    gluCylinder(quadratic, 0.75*sz, 0.75*sz, 3.0*sz, 32, 32)
    gluDisk(quadratic, 0.0, 0.75*sz, 32, 32)
    glPopMatrix()

【问题讨论】:

  • 这里的问题到底是什么?您启用剔除并出现预期的效果(背面被移除)。如果您想查看圆柱体的内部,为什么不再次禁用剔除?还是我误会了你?
  • 我宁愿启用剔除以提高渲染速度。大多数情况下,主要问题是为什么磁盘会随着剔除启用而消失。问题已编辑。

标签: opengl glu


【解决方案1】:

您的磁盘朝向错误的方向(错误的绕组)。因此,它被淘汰。您可以尝试使用gluQuadricOrientation 反转其方向,这应该可以解决问题。有关详细信息,请参阅 gluDiskglCullFace 的 OpenGL 规范。

【讨论】:

    【解决方案2】:

    圆盘只是一个没有任何厚度的平面。所以一侧在前面,另一侧在后面,启用剔除后,其中一个会被剔除。你可能只是看到被淘汰的一面。如果这不是您想看到的那一面,只需旋转圆盘即可。没有什么比它更棒的了。所以只需将其包装成:

    glPushMatrix();
    glRotatef(180.0f, 0.0f, 1.0f, 0.0f);
    gluDisk(quadratic, 0.0, 0.75*sz, 32, 32);
    glPopMatrix();
    

    或者,就像 kroneml 建议的那样,改变其三角形的方向。自己决定哪一个在您的情况下在概念上更正确。

    【讨论】:

    • 我认为glPush/PopMatrixglRotate 的组合应该比仅仅改变磁盘的方向效率低一些(对于这个小例子来说并不重要)。但是,这当然是解决此问题的有效替代解决方案!
    • @kroneml 确实如此。在我阅读您的答案之前,我没有想到改变方向(就像每个人都应该使用的那样,很久没有使用 GLU 二次曲线了),所以我只是让它作为替代方案。由于他使用 GLU 二次曲线和固定函数矩阵堆栈,因此无论如何性能都不是一个选项,但您可能是正确的,方向更改应该是免费的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-07
    • 2013-11-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多