![]() Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву ![]() Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Процедура побудови полігональної сітки тора.Содержание книги
Поиск на нашем сайте
R0 –малий радіус тора, R – великий радіус (відстань від осі до центру малого), n1, n2 – кількість перерізів в двох напрямах (густина сітки), k1, k2 – кількість повторів текстури в двох напрямах. procedure DrawTor(r0,R:GLfloat; n1,n2:Glint;k1,k2:GLfloat); var i,j,k:GLint; fi,teta,delta_fi,delta_teta,ds,dt, cos_fi, sin_fi, r1,c,s,t:GLfloat; begin delta_fi:=2*pi/n1;delta_teta:=2*pi/n2; teta:=0; ds:=k1/n1;dt:=k2/n2; glCullFace (GL_BACK); glEnable (GL_CULL_FACE); for i:=0 to n2-1 do begin fi:=Pi; glBegin (GL_QUAD_STRIP); for j:=0 to n1 do begin for k:=1 downto 0 do begin glTexCoord2d(ds*j,dt*(i+k)); t:=teta+k*delta_teta; c:=cos(t); s:=sin(t); cos_fi:=cos(fi); sin_fi:=sin(fi); R1:= R+r0*c; glNormal3f(c*cos_fi, c*sin_fi,s); glVertex3f(R1*cos_fi, R1*sin_fi, r0*s); end; fi:=fi+delta_fi end; glEnd; teta:=teta+delta_teta end end; Моделювання освітленості. Для криволінійних фігур нормаль задається в кожній вершині полігональної сітки. Для тора напрям нормалі в кожній вершині співпадає з радіус-вектором малого кола, проведеним в дану вершину. Положення джерела світла в просторі задається масивом-константою pos і встановлюється командою glLightfv (додаються до процедури Draw3D): pos:array[0..3]of GLfloat=(1.0,1.0,1.0,0.0); glLightfv(GL_LIGHT0,GL_POSITION,@pos).
Рис.10.2. Дифузне (розсіяне) Рис.10.3. Додавання освітлення суцільної віддзеркалення (бліків) моделі тора. і власного світіння.
За методом Гуро обчислюється дифузна складова освітленості (рис.10.2). Для кожної вершини з врахуванням нормалі, а також кольору і властивостей матеріалу та кольору і властивостей джерела світла обчислюється інтенсивність складових кольору. Потім колір інтерполюється лінійно від вершини до вершини по ребрах полігональної сітки, потім у внутрішніх точках граней (білінійна інтерполяція). Колір спільної фонової та дифузної складової та колір бліків (дзеркальної складової) для кожного матеріалу задається в розділі констант, наприклад, amb_dif:Array[0..3]of GLfloat=(0.8,0.2,1.0,1.0), spec: Array[0..3] of GLfloat=(1.0,1.0,1.0,1.0). Колір спільної фонової та дифузної складової, коефіцієнт Фонга і колір бліків для матеріалу лицьових граней встановлююється командами glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE,@amb_dif), glMaterialf(GL_FRONT, GL_SHININESS, 50.0). glMaterialfv(GL_FRONT,GL_SPECULAR,@spec), Для відтворення бліків також потрібно задати колір дзеркальної складової джерела світла командою glLightfv(GL_LIGHT0, GL_SPECULAR, @C_White). Кольори і оптичні властивості матеріалів можуть призначатись по-різному для лицьових (GL_FRONT) та нелицьових (GL_BACK) граней. Керувати виведенням лицьових та нелицьових граней можна командою вилучення граней glCullFace(mode) з параметром mode рівним GL_BACK або GL_FRONT, ввімкнувши режим вилучення граней командою glEnable(GL_CULL_FACE).
n1=3 n1=4 n1=5 n1=6 n2=2 n2=3 n2=4 n2=5 Рис.10.4. Вироджений тор при малих значеннях n1 та n2 Накладання текстури. Текстурні координати обчислюються у наведеній вище процедурі з врахуванням кількості повторів зображення текстури в радіальному і тангенціальному напрямі (параметри k1 і k2, рис.10.5).
Рис.10.5. Шахівниця на торі з різними значеннями k1 і k2. Накладання освітленості на текстуру (змішування з кольором матеріалу, рис.10.6). В процедурах LoadBmpTexture і CalculateTexture з третього розділу параметр текстури GL_TEXTURE_ENV_MODE змінюється з GL_DECAL на GL_MODULATE: glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE,GL_MODULATE). Рис.10.6. Змішування текстури з кольором матеріалу (додавання освітленості). Приклад 10.2. Додавання бліків. Під час змішування текстури з кольором матеріалу дзеркальна складова (яка викликає бліки) стає малопомітною. Тому для більш помітного ефекту блікування спочатку будується зображення з дифузною складовою і накладеною текстурою, потім додається зображення з дзеркальною складовою (рис10.7). Рис.10.7. Додавання бліків (дзеркальної складової освітленості). Накладання дзеркальної складової освітленості на текстуровану поверхню. // вмикаємо накладання текстури glEnable(GL_TEXTURE_2D); // вмикаємо розсіяну складову джерела світла glLightfv(GL_LIGHT0, GL_DIFFUSE, @C_White); // вимикаємо дзеркальну складову джерела світла glLightfv(GL_LIGHT0, GL_SPECULAR, @C_Black);
|
|||||
Последнее изменение этой страницы: 2016-04-08; просмотров: 344; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.137.216.202 (0.01 с.) |