Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь 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; просмотров: 338; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.119.19.205 (0.005 с.) |