Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
комп графика Лекции.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
200.48 Кб
Скачать

3.4 Рекомендации по созданию графических приложений

  1. Отдельные объекты сцены, целесообразно, описывать в своей системе координат и оформлять отдельными процедурами

  2. Вызов этих процедур, а возможно и взаимодействие объектов сцены, следует описывать в стандартной процедуре FormPaint. (См. Лаб0\min).

Начинаться эта процедура должна с оператора wglMakeCurrent(Canvas.Handle, hrc); - активизирующей контекст воспроизведения.

После этого оператора вызываются все объекты сцены и операторы преобразования системы координат, определяющие взаимодействие объектов. Для случая двойной буферизации, процедура FormPaint заканчивается оператором SwapBuffers(DC), переписывающем изображение из буфера на устройство вывода.

  1. После окончания работы в процедуре FormDestroy, следует освободить контекст воспроизведения

wglMakeCurrent(0, 0);

wglDeleteContext(hrc);

ReleaseDC (Handle, DC);

DeleteDC (DC);

  1. Если по какому либо событию, например по времени, необходимо перерисовать изображение на экране, то для этого следует вызвать команду InvalidateRect(Handle, nil, False);

Лекция 4

    1. Свойства материалов

Различные материалы по-разному отражают свет. Металлические поверхности, это делает хорошо, а пластмассовые хуже, поэтому они выглядят более тусклыми. Некоторые поверхности сами излучают свет (например, фосфор).

В OpenGL есть команды, описывающие свойства материала.

Векторная версия (для ввода векторов)

Скалярная версия (для ввода коэффициентов)

glMaterialfv (face,pname, @param);

glMaterialfv (face, pname, param);

face: GL_FRONT свойства лицевой стороны объекта

GL_ BACK свойства тыльной стороны объекта

GL_FRONT_AND_BACK – свойства лицевой и тыльной сторон объекта

Pname

параметры

Значение по умолчанию

Наименование

GL_AMBIENT

(r, g, b, a)

(0.2, 0.2, 0.2,1)

Фоновое

GL_DIFFUSE

(r, g, b, a)

(0.8, 0.8, 0.8,1)

Диффузное

GL_SPECULAR

(r, g, b,a)

(0, 0, 0,1)

зеркальное

GL_EMISSION

(r, g, b, a)

(0, 0, 0,1)

самосвечение

GL_SHININESS

n

0

Коэффициент шероховатости cosn(α)

Пример.

Const

mat_Yellow: array[0..3] of GLfloat = ( 1.0, 1.0, 0.0,1.0 );

glMaterialfv (GL_FRONT, GL_AMBIENT, @mat_Yellow);

Кроме описанного выше, в OpenGl есть ещё один, очень удобный, способ

задания свойств материала.

Этот способ инициализируется командой glEnable( gl_Color_Material);

А настраивается glColorMaterial(face, mode);

face – принимает те же значения, что и для команд glMaterialf. А mode, по умолчанию, равно GL_AMBIENT_AND_ DIFFUSE.

После задания этого режима коэффициенты диффузного отражения задаются непосредственно командой glColor3f; В этом случае можноизменять параметры материала для каждой вершины, используя только команду glColor*, без дополнительного вызова glMaterialfv.