【问题标题】:how to draw 3d cylinder with flat shading如何绘制带有平面阴影的 3d 圆柱体
【发布时间】:2013-03-21 22:02:55
【问题描述】:

我想知道如何绘制一个带有平面阴影的圆柱体。

这是我到目前为止所做的。

void drawCylinder(int numMajor, int numMinor, float height, float radius)
{
   double majorStep = height / numMajor;
   double minorStep = 2.0 * M_PI / numMinor;
   int i, j;

   for (i = 0; i < numMajor; ++i) {
   float z0 = 0.5 * height - i * majorStep;
   float z1 = z0 - majorStep;

   glBegin(GL_TRIANGLE_STRIP);
   for (j = 0; j <= numMinor; ++j) {
   double a = j * minorStep;
   float x = radius * cos(a);
   float y = radius * sin(a);
   glNormal3f(x / radius, y / radius, 0.0);
   glTexCoord2f(j / numMinor, i / numMajor);
   glVertex3f(x, y, z0);

   glTexCoord2f(j / numMinor, (i + 1) / numMajor);
   glVertex3f(x, y, z1);
   }
   glEnd();
   }
}

我知道我知道定义一个法线,但是这个法线给了我平滑的阴影而不是平坦的。我可以知道如何在 OpenGL 和 GLUT 中使它变平吗?

【问题讨论】:

    标签: opengl 3d glut flat


    【解决方案1】:

    如果你想要平面阴影,你只需要指定这个。

    glShadeModel(GL_FLAT);
    

    【讨论】:

    • 没有这种方法有没有办法做到这一点,因为这样做会导致我的高光和平滑阴影出现问题
    • 您可以根据需要打开和关闭它。如果您不想使用它,则需要为面的所有顶点提供相同的法线。因此,有些顶点需要多次指定,只是法线不同。
    猜你喜欢
    • 2011-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-10
    • 2018-03-21
    • 2013-07-29
    相关资源
    最近更新 更多