2012-07-11 79 views
0

如果我绘制一个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() 
+1

这里的问题究竟是什么?您启用剔除并发生预期效果(删除背面)。如果你想看到你的圆筒内部,为什么不再次禁用剔除?或者我误解了你? – kroneml 2012-07-11 09:35:15

+0

我宁愿剔除启用渲染速度。大多数情况下,主要问题是*为什么磁盘在启用剔除后消失*。编辑的问题。 – Sardathrion 2012-07-11 09:40:46

回答

4

您的磁盘面朝错误的方向(错误的绕组)。因此,它被淘汰。你可以尝试使用gluQuadricOrientation来改变其方向,这应该可以做到。有关更多信息,请参阅OpenGL规范gluDiskglCullFace

2

磁盘只是一个没有任何厚度的平面。所以一面是正面,另一面是背面,并通过剔除使其中一个被剔除。你可能只是看到了被剔除的一面。如果这不是您想要看到的一面,只需旋转磁盘即可。没有什么奇怪的。因此,只需将其包装成:

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

或者像kroneml所示,改变其三角形的方向。自己决定哪一个在你的情况下更符合概念。

+0

我认为'glPush/PopMatrix'和'glRotate'的组合应该比改变磁盘方向的效率要低一些(对于这个小例子来说并不重要)。但是,这当然是解决这个问题的有效方法! – kroneml 2012-07-11 10:17:56

+0

@kroneml是的。改变方向直到我读到你的答案(没有使用GLU quadrics的年龄,像所有人都应该),所以我只是让它作为替代方案。由于他使用GLU quadrics和固定功能矩阵堆栈,所以无论如何,性能并不是一种选择,但是你可能是正确的,方向改变应该是免费的。 – 2012-07-11 10:49:43