2013-04-05 3 views
1

Мне нужно добавить правильное освещение к нерегулярному многоугольнику OpenGL, который я заполнил, используя TRIANGLE_FAN.Как добавить вершины в OpenGL C++ triangle_fan

glBegin(GL_TRIANGLE_FAN); 

glNormal3f(0.0, 0.0, 1.0); 
glVertex3f(0.0f, 0.0f,0.0f); 
glVertex3f(b[0][0],b[0][1], 0); 
glVertex3f(b[11][0], b[11][1], 0); 
glVertex3f(b[7][0], b[7][1], 0); 
glVertex3f(b[10][0], b[10][1], 0); 
glVertex3f(b[6][0],b[6][1], 0); 
glVertex3f(b[5][0],b[5][1], 0); 
glVertex3f(b[4][0],b[4][1], 0); 
glVertex3f(b[8][0],b[8][1], 0); 
glVertex3f(b[3][0],b[3][1], 0); 
glVertex3f(b[9][0],b[9][1], 0); 
glVertex3f(b[2][0],b[2][1], 0); 
glVertex3f(b[1][0],b[1][1], 0); 
glVertex3f(b[0][0],b[0][1], 0); 

glEnd(); 

Проблема с моим текущим многоугольником заключается в том, что он не отражает свет правильно. Он делает это только из своих вершин, что дает свет, который поражает его формой X. Я предполагаю, что мне нужно добавить вершины к моему полигону. Есть ли простой способ сохранить мой треугольник, но добавить к нему вершины?

+0

Любая вероятность, что я могу убедить вас использовать объекты буфера вершин и шейдеры? Это сделает вашу жизнь намного проще в будущем ... –

+0

Идеализм Я бы придерживался того, что у меня есть из-за короткого срока, который у меня есть, и что тогда вся программа основана на этой структуре .. – juliensaad

+2

Я не большой фиксированный парень - Вся моя профессиональная работа была с OGL_ES2 и выше. Я отложил это на другое. Я, честно говоря, не уверен, как получить освещение фрагментов, работающих в стационарном конвейере. Удачи! –

ответ

1

Чтобы получить «правильные» результаты при освещении вашего объекта, вам необходимо определить соответствующие нормали. Поскольку у вас есть только одна нормальная для каждой вершины, она, очевидно, не затухала правильно.

Однако нет способ расчета нормалей для любой модели; вы должны определить , как объект должен быть затенен, а затем добавить еще glNormal звонки, чтобы сообщить OpenGL, как вы хотите, чтобы он был затенен.