как нарисовать 3d цилиндр с плоской заливкой

Я хотел бы знать, как нарисовать цилиндр с плоской заливкой.

Это то, что я сделал до сих пор.

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?


person You Hock Tan    schedule 21.03.2013    source источник


Ответы (1)


Если вы хотите плоское затенение, вам просто нужно указать это.

glShadeModel(GL_FLAT);
person Nico Schertler    schedule 21.03.2013
comment
есть ли способ сделать это без этого метода, потому что это вызывает проблемы с моей подсветкой и плавным затенением - person You Hock Tan; 21.03.2013
comment
Вы можете включать и выключать его по мере необходимости. Если вы не хотите его использовать, вам нужно указать одинаковые нормали для всех вершин грани. Поэтому некоторые вершины нужно указывать более одного раза, просто с разными нормалями. - person Nico Schertler; 21.03.2013