Создать куб Chrome в OpenGL/Glut?
Вопрос
Я пытаюсь создать хромированный куб в GLUT/OpenGL и не совсем понимаю, как это сделать.
Я посмотрел «Таблицу материалов» в учебнике, в которой «Chrome» был показан как:Окружающий:(0,25, 0,25, 0,25), Диффузный:(0,4, 0,4, 0,4) и Зеркальный:(0,774597,0,774597,0,774597).
Мой вопрос: как мне создать простой куб и применить к нему этот материал/текстуру в Glut/OpenGL?
Использую ли я «glutSolidCube()»?Если да, то как мне применить к нему хромированную текстуру?
Может ли кто-нибудь из людей GLUT/OpenGL указать мне правильное направление?
Решение
Это должно быть так же просто, как позвонить glMaterialfv()
до glutSolidCube()
.
Я не изучал OpenGL со школы, но вот код цикла отображения из старого проекта, в котором использовалась сфера, который должен направить вас на правильный путь:
_Ambient[CHROME][0] = 0.25f;
_Ambient[CHROME][1] = 0.25f;
_Ambient[CHROME][2] = 0.25f;
_Ambient[CHROME][3] = 1.0f;
_Diffuse[CHROME][0] = 0.4f;
_Diffuse[CHROME][1] = 0.4f;
_Diffuse[CHROME][2] = 0.4f;
_Diffuse[CHROME][3] = 1.0f;
_Specular[CHROME][0] = 0.774597f;
_Specular[CHROME][1] = 0.774597f;
_Specular[CHROME][2] = 0.774597f;
_Specular[CHROME][3] = 1.0f;
_Shininess[CHROME] = 76.8f;
void Display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, _Ambient[CHROME]);
glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, _Diffuse[CHROME]);
glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, _Specular[CHROME]);
glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, _Shininess[CHROME]);
// Translations...
glutSolidSphere(_Radius, _Slices, _Stacks);
glPopMatrix();
glFlush();
glutSwapBuffers();
}
Другие советы
Вы смотрели на картографирование окружающей среды?Вы хотите, чтобы ваш объект отражал свет от других объектов в окружающей среде, поэтому вы в основном применяете текстуру, которая выглядит как окружающая среда, и генерируете координаты текстуры на основе нормалей.Это придаст поверхности зеркальный вид.Вы можете заставить OpenGL автоматически генерировать координаты текстуры для каждой вершины на основе glTexGen
.
НеХе, урок 23 покрывает это с помощью картографирования сфер.Вы также можете генерировать свои собственные координаты текстуры для каждой вершины или пикселя, используя GLSL. Вот учебник на том.