Создать Chrome-куб в OpenGL / Glut? - PullRequest
3 голосов
/ 13 апреля 2009

Я пытаюсь создать хромированный куб в GLUT / OpenGL, и я точно не знаю, как это сделать.

Я посмотрел «Таблицу материалов» в учебнике, в которой было написано «Хром»: Ambient: (0,25, 0,25, 0,25), Diffuse: (0,4, 0,4, 0,4) и Specular: (0,774597,0,774597,0,774597).

У меня вопрос, как мне создать простой куб и применить этот материал / текстуру к нему в Glut / OpenGL?

Использую ли я "glutSolidCube ()"? Если да, то как мне применить к нему текстуру хрома?

Могут ли люди из GLUT / OpenGL указать мне правильное направление?

Ответы [ 2 ]

5 голосов
/ 13 апреля 2009

Это должно быть так же просто, как звонить 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();
}
2 голосов
/ 26 апреля 2009

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

Учебник NeHe 23 охватывает это с помощью сферического отображения. Вы также можете создавать свои собственные текстурные координаты для каждой вершины или для каждого пикселя, используя GLSL. Вот учебник по этому вопросу.

...