Разноцветная поверхнось в OpenGl
Как в OpenGl рисовать поверхность(из полигонов, например), так, чтобы с одной стороны она бвла одного цвета, а с другой - другого?
glColor3f(1.0f,0.0f,0.0f); // Красный цвет
glVertex3f( 0.0f, 1.0f, 0.0f);
glColor3f(0.0f,1.0f,0.0f); // Зеленный цвет
glVertex3f(-1.0f,-1.0f, 0.0f);
glColor3f(0.0f,0.0f,1.0f); // Синий цвет
glVertex3f( 1.0f,-1.0f, 0.0f);
glEnd();
Dj тебе разноцветный треугольник, если я правильно твой вопрос понял.
Включаете polygon culling, рисуете сначала фронтальную сторону полигона одним цветом, а после заднюю - другим. И всё!!!
1. Врубить интерполяцию по вершинам (лучше в ините)
2. И можно задовать цвет у каждой вершины полигона
//1.
glShadeModel(GL_SMOOTH);
//2. - И как было сказано выше:
glBegin(GL_TRIANGLES);
glColor3f(1.0f,0.0f,0.0f); // Красный цвет
glVertex3f( 0.0f, 1.0f, 0.0f);
glColor3f(0.0f,1.0f,0.0f); // Зеленный цвет
glVertex3f(-1.0f,-1.0f, 0.0f);
glColor3f(0.0f,0.0f,1.0f); // Синий цвет
glVertex3f( 1.0f,-1.0f, 0.0f);
glEnd();
Зесь вопрос не о покраске вершин полигона, а о раскраске полигона с разных сторон.
Да...,я сначала не так понял в чём вопрос...
-----------------------------------------
Нужно разными цветами покрасть полигон с фронтальной и обратной стороны??? - Ну, для
этого можешь разные параметры для фронтальной
и обратной стороны задать:
//Задаем параметры материала для лицевых граней
GLfloat specular_front[] = {0.0,0.3,0.9,1.0};
GLfloat ambient_front[] = {0.0, 0.1, 0.3, 1.0};
glMaterialfv(GL_FRONT,GL_SPECULAR,specular_front);
glMaterialfv(GL_FRONT,GL_AMBIENT, ambient_front);
//для обратных
GLfloat specular_back[] = {1.0,0.0,0.0,1.0};
GLfloat ambient_back[] = {0.5,0.1,0.1,1.0};
glMaterialfv(GL_BACK,GL_SPECULAR, specular_back);
glMaterialfv(GL_BACK,GL_AMBIENT, ambient_back);
если еффект будет не очень, то можно еще в параметрах матерьяла и GL_DIFFUSE
задать и чтоб его параметры совпадали с
GL_SPECULAR