Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Грани: сплошные или проволочные




Для Quadric-объектов способ отображения граней уже рассматривался в главе, посвещенной модели освещенности с использованием цвета вершины.

gluQuadricDrawStyle (SphereObj, GLU_FILL) – для сплошных граней

gluQuadricDrawStyle (SphereObj, GLU_LINE) – для проволочных граней;

 

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

 

glBegin(GL_LINES).

 

Для вывода сплошных граней следует воспользоваться режимами рисования треугольников, четырехугольников или других полигонов. Однако есть команда, которая даже в режиме рисования многоугольников позволяет выбирать как они должны изображаться при растеризации. Это команда

 

glPolygonMode(

GLEnum face,

GLEnum mode)

 

Параметр mode задает режим отображения и может принимать следующие значения [15]:

 

GL_POINT В этом режиме изображаются только отдельные вершины многоугольника, для которых установлен флаг грани. Для этого режима действуеи режим устранения ступенчатости GL_POINT_SMOOTH.
GL_LINE Стороны многоугольников изображаются в виде отрезков. У них можно изменять ширину (GL_LINE_WIDTH) и устанавливать режим устранения ступенчатости (GL_LINE_SMOOTH).
GL_FILL Внутренняя область многоугольника закрашивается текущим цветом. В этом режиме также может быть применен режим устранения ступенчатости (GL_POLYGON_SMOOTH).

Параметр face определяет многоугольники, к которым применяется режим, заданный параметром mode:

 

GL_FRONT – лицевые многоугольники;

GL_BACK – нелицевые многоугольники;

GL_FRONT_AND_BACK – лицевые и нелицевые.

 

Рассмоотрим теперь полный текст процедуры установки параметров визуализации SetupCommpns.

 

procedure TfrmGL.SetUpCommons;

const

LC = 53.0;

begin

glMatrixMode(GL_PROJECTION);

glLoadIdentity;

 

Case RGProj.ItemIndex of

0: glOrtho (-LC,LC,-Panel1.height/Panel1.width*LC,

Panel1.height/Panel1.width*LC, 3, 1000);

 

1: glFrustum (-1,1,-Panel1.height/Panel1.width,

Panel1.height/Panel1.width, 3, 1000); // задаем перспективу

end;//case

//Альфа тест

if CBAlphaTest.Checked then

glEnable(GL_ALPHA_TEST)

else

glDisable(GL_ALPHA_TEST);

//Блендинг

if CBBlending.Checked then

begin

glEnable(GL_BLEND);

glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);

end

else

glDisable(GL_BLEND);

//закраска

Case RGFlatSm.ItemIndex of

0: glShadeModel(GL_FLAT);

1: glShadeModel(GL_SMOOTH);

end;//case

Case RGVisEdges.ItemIndex of

0:begin

glEnable(GL_CULL_FACE);

glCullFace(GL_BACK);

end;

1:begin

glEnable(GL_CULL_FACE);

glCullFace(GL_FRONT);

end;

2:begin glDisable(GL_CULL_FACE)end;

end;//case

//Освещение

if CBColorMaterial.Checked then//учет свойств материала

glEnable(GL_COLOR_MATERIAL)

else

glDisable(GL_COLOR_MATERIAL);

if CBoxLightOn.Checked then

begin

//включаем свет

glEnable(GL_LIGHTING);

glEnable(GL_LIGHT0);

glLightModelfv(GL_LIGHT_MODEL_AMBIENT, @lmodel_ambient);

//источники данных для параметров освещения

glLightfv(GL_LIGHT0, GL_AMBIENT, @ambient);

glLightfv(GL_LIGHT0, GL_DIFFUSE, @diffuse);

glLightfv(GL_LIGHT0, GL_SPECULAR, @Specular);

end

else

begin

glDisable(GL_LIGHTING);

glDisable(GL_LIGHT0);

end;

//способ зеркальной освещенности

if CBoxLockViewer.Checked then

//зеркально - в направлении наблюдателя, а не параллельно

glLightModelfv(GL_LIGHT_MODEL_LOCAL_VIEWER, @glTrue) //1.0

else

glLightModelfv(GL_LIGHT_MODEL_LOCAL_VIEWER, @glFalse);//0.0

//двусторонний/односторонний рендеринг

if CBoxDoubSided.Checked then

//не 0 - двусторонний рендеринг

glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, 1)

else

glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, 0);

//Материал объектов сцены

glMaterialfv(GL_FRONT,GL_AMBIENT,@fr_Mat_Amb);

glMaterialfv(GL_FRONT,GL_DIFFUSE,@fr_Mat_Diff);

glMaterialfv(GL_FRONT,GL_SHININESS,@fr_Mat_Shine);

glMaterialfv(GL_FRONT,GL_SPECULAR,@fr_Mat_Spec);

glMaterialfv(GL_FRONT,GL_EMISSION,@fr_Mat_Emit);

 

glMaterialfv(GL_BACK,GL_AMBIENT,@back_Mat_Amb);

glMaterialfv(GL_BACK,GL_DIFFUSE,@back_Mat_Diff);

glMaterialfv(GL_BACK,GL_SHININESS,@back_Mat_Shine);

glMaterialfv(GL_BACK,GL_SPECULAR,@back_Mat_Spec);

glMaterialfv(GL_BACK,GL_EMISSION,@back_Mat_Emit);

 

end;//procedure TfrmGL.SetUpCommons;






Поделиться с друзьями:


Дата добавления: 2016-10-30; Мы поможем в написании ваших работ!; просмотров: 407 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Даже страх смягчается привычкой. © Неизвестно
==> читать все изречения...

2502 - | 2194 -


© 2015-2025 lektsii.org - Контакты - Последнее добавление

Ген: 0.011 с.