Новые уроки OpenGL и мультимедиаC# + OpenGL - работа с материалами


В графическом программирование материалы занимают достаточно важную роль. Материал может рассеивать, отражать и излучать свет.


В этом уроке вы можете узнать основы работы с освещением в OpenGL.



Свойства материала можно изменять при помощи специальной функции:
Gl.glMaterialfv(грань, свойство, значение);

Первый параметр определяет грань, для которой устанавливаются свойства. Он может принимать одно из следующих значений:
Gl.GL_BACK               задняя грань
Gl.GL_FONT             передняя грань
Gl.GL_FRONT_AND_BACK   обе грани

Второй параметр определяет свойство материала, которое будет установлено, и может принимать следующие значения:
Gl.GL_AMBIENT фоновый свет
Gl.GL_DIFFUSE  диффузионный свет
Gl.GL_SPECULAR отраженный свет
Gl.GL_EMISSION излучаемый свет
Gl.GL_SHININESS степень отраженного света
Gl.GL_AMBIENT_AND_DIFFUSE оба рассеянных света
Чтобы создать эффект металической поверхности, нужно увелчить параметр Gl.GL_SHININESS.

Третий параметр определяет цвет в виде массива. В случае Gl.GL_SHININESS указывает на число типа float, которое должно быть в диапазоне от 0 до 128.

Давайте, изобразим чайник красного цвета, отражающий свет:
void Draw()
{
  Gl.glClear(Gl.GL_COLOR_BUFFER_BIT | Gl.GL_DEPTH_BUFFER_BIT);
  Gl.glLoadIdentity();
  //Описываем свойства материала
  float[] color = new float[4]{ 1, 0, 0, 1}; //Красный цвет
  float[] shininess = new float[1]{ 30 };
  Gl.glMaterialfv(Gl.GL_FRONT, Gl.GL_DIFFUSE, color); //Цвет чайника
  Gl.glMaterialfv(Gl.GL_FRONT, Gl.GL_SPECULAR, color); //Отраженный свет
  Gl.glMaterialfv(Gl.GL_FRONT, Gl.GL_SHININESS, shininess); //Степень отраженного света
  //----------------------------
  Gl.glPushMatrix();
  Gl.glTranslated(0,0,-6);
  Gl.glRotated(45, 1, 1, 0);
  // рисуем чайник с помощью библиотеки FreeGLUT 
  Glut.glutSolidTeapot(1);
  Gl.glPopMatrix();
  Gl.glFlush();
  AnT.Invalidate();
}


На этом всё, до следующих уроков!
  • +2
  • amid
  • 26 августа 2010, 22:00

Вставка изображения

Комментарии (6)

rss свернуть / развернуть
  • avatar
  • Anvi
  • 27 августа 2010, 16:10
  • #
  • 0
Убрал картинку под кат, надеюсь никто не против :)

свернуть ветку
  • avatar
  • isaer
  • 27 августа 2010, 19:40
  • #
  • 0
Gl.GL_AMBIENT рассеянный свет
Gl.GL_DIFFUSE тоже рассеянный

вобще то не правильно
Amdient это фоновый цвет а не рассейный

свернуть ветку
Gl.GL_AMBIENT фоновый свет
Gl.GL_DIFFUSE диффузионый свет
Вот так лучше?

свернуть ветку
да, так правильно

свернуть ветку
Перенес с «Новые уроки OpenGL», но рейтинга у тебя было достаточно, чтобы сделать это самостоятельно :)

свернуть ветку
Еще, просьба ко всем, кто создает новые уроки, ознакомиться с пожеланиями к урокам. Это поможет не упустить несколько важных вещей для создания качественных, полных уроков.

свернуть ветку
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.