РОЗДІЛ 11. ПОЛІГОНАЛЬНІ МОДЕЛІ СФЕРИ.

ТЕКСТУРУВАННЯ СФЕРИ……………………………………………...57

РОЗДІЛ 12. ЦИЛІНДРИЧНІ, КОНІЧНІ, ПАРАБОЛІЧНІ, ГІПЕРБОЛІЧНІ ПОВЕРХНІ……………………………………………..71

 


РОЗДІЛ 6

ПРАВИЛЬНІ МНОГОГРАННИКИ (ТІЛА ПЛАТОНА)

Правильними називаються многогранники, які допускають дві симетрії: циклічну перестановку вершин та циклічну перестановку граней, що сходяться до однієї вершини. Звідси слідує, що всі грані рівні та правильні, всі ребра рівні і всі вершини мають однакове оточення. Існує п’ять правильних многогранників (доведено Евклідом):

· правильний чотиригранник – тетраедр, утворений чотирма правильними трикутниками;

· правильний шестигранник – гексаедр (куб), утворений шістьма правильними. чотирикутниками (квадратами);

· правильний восьмигранник – октаедр, утворений вісьмома правильними трикутниками;

· правильний двадцятигранник – ікосаедр, утворений двадцятьма правильними трикутниками;

· правильний дванадцятигранник – додекаедр, утворений дванадцятьма правильними п’ятикутниками.

Рис.6.1. Правильні многогранники (тіла Платона).

Рівняння Ейлера для правильних многогранників

Г+В=Р+2.

В “Началах” Евкліда викладкні відомості для повного вивчення правильних многогранників. Починає свій трактат Евклід з побудови рівностороннього трикутника, а закінчує побудовою додекаедра. Прийнята назва цих многогранників не пов’язана із заслугами Платона в цій області. Найбільш рання відома робота, в якій детально вивчались правильні тіла, належить другу Платона Теетету. Древні греки надавали правильним многогранникам містичне значення і пов’язували з чотирма многогранниками чотири стихії, а додекаедр зі Всесвітом.

Таблиця 6.1. Геометричні параметри тіл Платона.

  Тіло Платона Граней Вершин Ребер
Тетраедр
Гексаедр (куб)
Октаедр
Ікосаедр
Додекаедр

В розширеннях графічної бібліотеки OpenGL є набір процедур для побудови правильних многогранників. Наприклад, бібліотеки GLUT та DGLUT містять процедури для побудови каркасних (дротяних) та суцільних тіл Платона.

Куб (дротяний –Wire або суцільний - Solid):

procedure glutWireCube(Size : GLDouble);

procedure glutSolidCube(Size : GLDouble);

Тетраедр (дротяний –Wire або суцільний - Solid):

procedure glutWireTetrahedron;

procedure glutSolidTetrahedron;

Октаедр (дротяний –Wire або суцільний - Solid):

procedure glutWireOctaheadron;

procedure glutSolidOctaheadron;

Ікосаедр (дротяний –Wire або суцільний - Solid):

procedure glutWireIcosahedron;

procedure glutSolidIcosahedron;

Додекаедр (дротяний –Wire або суцільний - Solid):

procedure glutWireDodecahedron;

procedure glutSolidDodecahedron;

 

При використанні процедур для побудови примітивів із стандартних бібліотек неможливо задати чи змінити властивості окремих граней чи потрібний в конкретних випадках спосіб накладання текстур. Створення власної бібліотеки процедур для побудови многогранників важливе в навчальних цілях для розвитку просторового мислення, дає можливість оптимізувати сцени в складних 3D-проектах з допомогою ретельного аналізу граней, нормалей, текстур і симетрії.



Для прискорення числові параметри в командах OpеnGL найчастіше передають з допомогою вказівників на вектори.

Type // задаємо типи даних

V_Array=array[0..2]of GLfloat;//координати вершин

N_Array= V_Array; //координати нормалей

C_Array=array[0..2]of GLfloat; //компоненти кольору

Побудову набору правильних многогранників починають, як правило, з найбільш простої фігури – куба.

Виведення грані куба (чотирикутника) з врахуванням нормалі і кольору виділяємо в окрему процедуру

procedure Edge4(V1,V2,V3,V4:V_Array;

N:N_Array; Color:C_Array);

begin glBegin (GL_QUADS); glColor3fv(@Color);

glNormal3fv(@N); glVertex3fv(@V1); glVertex3fv(@V2);

glVertex3fv(@V3); glVertex3fv(@V4); glEnd end;

Приклад 6.1. Процедура побудови зафарбованих граней куба(рис.1.2). Для правильного обчислення лицьових та нелицьових граней порядок слідування вершин задається в одному напрямі (за замовчуванням проти годинникової стрілки).

procedure DrawSolidCube;

// вершини куба // кольори задаються довільно

const A:V_Array=(1,1,1); // нормалі до граней

B:V_Array=(-1,1,1); N1:N_Array=(0,0,1);

C:V_Array=(-1,-1,1); N2:N_Array=(0,0,-1);

D:V_Array=(1,-1,1); N3:N_Array=(1,0,0);

A1:V_Array=(1,1,-1); N4:N_Array=(-1,0,0);

B1:V_Array=(-1,1,-1); N5:N_Array=(0,1,0);

C1:V_Array=(-1,-1,-1); N6:N_Array=(0,-1,0);

D1:V_Array=(1,-1,-1);









Последнее изменение этой страницы: 2016-04-08; Нарушение авторского права страницы

infopedia.su не принадлежат авторские права, размещенных материалов. Все права принадлежать их авторам. Обратная связь