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();
}
Наш чайник готов.
