gpt4 book ai didi

c - opengl中的半圆柱体/封闭圆柱体

转载 作者:太空宇宙 更新时间:2023-11-04 08:40:44 24 4
gpt4 key购买 nike

我现在有一个圆柱体

glPushMatrix();
glTranslatef(cylinder->pos[0], cylinder->pos[1], cylinder->pos[2]);
glRotatef(cylinder->angle, -1.0, 0, 0);
gluDisk(quad, 0.0, cylinder->radius, 300, 90);
gluCylinder(quad, cylinder->radius, cylinder->radius, cylinder->height, 30, 1);
gluDeleteQuadric(quad);
glPopMatrix();

但它只渲染了半个圆柱体而不是整个圆柱体(一半朝向 View )。第二个问题是我不知道如何关闭气缸。 gludisk 只能关闭圆柱体的底部,我不确定如何关闭顶部。

最佳答案

如果我理解您的描述,听起来您可能启用了背面剔除。您的代码中是否有 glEnable(GL_CULL_FACE) 调用?这将消除所有背对您的多边形。无论如何,一旦你画了一个两边都封闭的圆柱体,让它保持启用状态就可以了。

在应用将其移动到 (0, 0, height) 的平移后,您可以使用另一个 gluDisk() 调用关闭顶部的圆柱体。为了正确起见,我相信您需要旋转关闭底部圆柱体的圆盘。否则它将面向圆柱体的内部而不是外部,这会影响法线,并且会在它应该可见时通过背面剔除将其消除。

对于完整的东西,它应该看起来像这样(未经测试):

glPushMatrix();
glTranslatef(cylinder->pos[0], cylinder->pos[1], cylinder->pos[2]);
glRotatef(cylinder->angle, -1.0f, 0.0f, 0.0f);
gluCylinder(quad, cylinder->radius, cylinder->radius, cylinder->height, 30, 1);
glPushMatrix();
glTranslatef(0.0f, 0.0f, cylinder->height);
gluDisk(quad, 0.0f, cylinder->radius, 30, 1);
glPopMatrix();
glRotatef(180.0f, 1.0f, 0.0f, 0.0f);
gluDisk(quad, 0.0f, cylinder->radius, 30, 1);
gluDeleteQuadric(quad);
glPopMatrix();

关于c - opengl中的半圆柱体/封闭圆柱体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23710913/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com