ають з поля зору виключити їх з процесу відтворення, заощадивши при цьому ресурси системи. Один з найшвидших способів перевірки заснований на визначенні напрямку нормалі до грані. p align="justify"> Нормаль - це пряма, ортогональна (перпендикулярна) дотичній прямої до деякої кривої або дотичної площини до деякої поверхні (рис. 3). Велике значення при побудові об'єктів має не сама нормаль, а її вектор. br/>В
Малюнок 3
Вектором нормалі до поверхні в даній точці є вектор, прикладений до даної точки і паралельний напрямку нормалі. Для кожної точки гладкій поверхні можна задати два нормальних вектора, що відрізняються напрямком. Якщо на поверхні можна задати безперервне поле нормальних векторів, то говорять, що це поле задає орієнтацію поверхні (тобто виділяє одну зі сторін), а якщо ж цього зробити не можна, поверхню називають неоріентіруемой. p align="justify"> Припустимо, існує об'єкт, всередині якого камера (позиція спостерігача) свідомо не виявиться. Зазвичай такого роду об'єкти становлять більшу частину або всю сцену. Тоді для кожної грані спостерігач здатний побачити тільки одну її сторону - лицьову. Грань - площина, вона ділить всі 3D простір на два півпростору. Таким чином, лицьову сторону видно тільки з одного півпростору, з того, в яке "дивиться" нормаль до цієї грані, спрямована з об'єкта. Перевіривши, в яке півпростір потрапляє камера, можна відразу визначити, чи є грань лицьовий (тобто, чи може камера побачити лицьову сторону цієї грані) і чи треба її малювати. p align="justify"> Нехай грань має вершини v1, v2, v3 і нормаль (nx, ny, nz). Тоді рівняння площини, в якій вона лежить, буде мати вигляд
* x + ny * y + nz * z + d = 0.
знаходимо з того факту, що v1 в площині лежить:
* v1.x + ny * v1.y + nz * v1.z + d = 0, = - (nx * v1.x + ny * v1.y + nz * v1.z).
Функція nx * x + ny * y + nz * z + d приймає позитивні значення по одну сторону від площини, негативні по інший і дорівнює нулю на самій площині. Точка (v1.x + nx, v1.y + ny, v1.z + nz) лежить, очевидно, в тому півпросторі, звідки грань видно. Значення функції (назвемо її функцією видимості) в цій точці дорівнює
* (v1.x + nx) + ny * (v1.y + ny) + nz * (v1.z + nz) + d = nx * (v1.x + nx) + ny * (v1.y + ny) + nz * (v1.z + nz) - (nx * v1.x + ny * v1.y + nz * v1.z) = nx * nx + ny * ny + nz * nz> 0.
Таким чином, якщо значення функції в якійсь точці більше нуля, то грань з цієї точки потенційно видна. Для побудови зображення важливий факт видимість грані з позиції камери, а камера зафіксована в точці (0,0,-dist). Таким чином, отримуємо, що грані, для яких
nz * dist-(nx * v1.x + ny * v1.y + nz * v1.z) <0,
або, що рівносильно, * dist + nx * v1.x + ny * v1.y + nz * v1.z> 0,
свідомо не видно і час на їх обробку і відображення витрачати не варто.
Окремого розгляду потребує питання розрахунку норм...