OpenGL:尝试使用三角形创建实心圆柱体

OpenGL:尝试使用三角形创建实心圆柱体,opengl,Opengl,我试图创建一个使用三角形风扇实心圆柱体。 到目前为止,我所做的是: float base = 0.5; float height = 20; float radius = 2.0f; glBegin(GL_TRIANGLE_FAN); for(float j=0; j<=height; j+=0.1) { glVertex3f(0,j,0); for(int i=0; i<360; i++) { glVertex3f(radius*sin((f

我试图创建一个使用三角形风扇实心圆柱体。 到目前为止,我所做的是:

float base = 0.5;
float height = 20;
float radius = 2.0f;
glBegin(GL_TRIANGLE_FAN);
for(float j=0; j<=height; j+=0.1)
{
    glVertex3f(0,j,0);
    for(int i=0; i<360; i++)
    {
        glVertex3f(radius*sin((float)i),j, radius*cos((float)i));
    }   
}
glEnd();
glPopMatrix();
float base=0.5;
浮子高度=20;
浮动半径=2.0f;
glBegin(GLU三角形风扇);

for(float j=0;j
for(int i=0;i
for(int i=0;i首先要注意的是(编辑:我有点误读了您的代码。您使用三角形风扇做得很好)是三角形风扇的工作原理如下:

glVertex: Center point
for each outer point p
    glVertex: p
例如:

                  p2__
                 /|   ---___p1
                /  |         /
               /    |       /
            p3/      |     /
              |\      |   /
              |   \    | /
               |     \_O   Center
               | __---
               p4
第二件事是圆柱体由三部分组成:

               __
              /  \
              \__/        <---- circle on top (facing up)
              |  |
              |  |
              |  |
              |  |        <---- tube in the middle
              |  |
              |  |
              |  |
              \__/        <---- circle on the bottom (facing down)
__
/  \

\__/您应该注意的第一件事(编辑:我有点误读了您的代码。您使用三角形风扇做得很好)是三角形风扇的工作原理如下:

glVertex: Center point
for each outer point p
    glVertex: p
例如:

                  p2__
                 /|   ---___p1
                /  |         /
               /    |       /
            p3/      |     /
              |\      |   /
              |   \    | /
               |     \_O   Center
               | __---
               p4
第二件事是圆柱体由三部分组成:

               __
              /  \
              \__/        <---- circle on top (facing up)
              |  |
              |  |
              |  |
              |  |        <---- tube in the middle
              |  |
              |  |
              |  |
              \__/        <---- circle on the bottom (facing down)
__
/  \

\__/这不是问题。这是真的,但他做了很多轮,不少于一轮。你至少可以把它改成
glVertex3fv
。它在度上运行得很好。弧度看起来会更好吗?这不是问题。这是真的,但他做了很多轮,不少于一轮。你至少可以把它改成
glVertex3fv
。它对度的效果很好。弧度看起来更好吗?谢谢你的回答!现在看起来很好!我想让你解释一下为什么第二个是按相反的顺序排列的?在OpenGL中,如果你通过引入点“a,B,C”或“a,C,B”来创建三角形,您可以创建相同的三角形,但面朝另一个方向。例如,您可以调用(GL_BACK)以防止OpenGL绘制位于对象不可见一侧的三角形。背面和正面也会影响照明。因此,最好保持点的顺序,以便法线(使用右手规则)会朝外。谢谢你的回答!现在看起来很好!我想让你解释一下为什么第二个是按相反的顺序排列的?在OpenGL中,如果你通过引入点“a,B,C”或“a,C,B”来创建一个三角形,你会创建一个相同的三角形,但面向另一个方向。例如,你可以调用(GL_BACK)防止OpenGL绘制对象不可见面上的三角形。背面和正面也会影响照明。因此,最好保持点的顺序,以便法线(使用右手规则)朝外。