щоб побудувати грань потрібно знати, чи є вона видимою, і згодом розташувати її по центру екрана. p> Для перевірки видимості введемо невелику функцію перевірки грані:
TestGran (a, b, c: d3d): boolean; v1, w2, v2, w1, n: real;: = ax-cx;
v2: = ay-cy;: = bx-cx;: = by-cy;: = v1 * w2-v2 * w1; n> 0 then: = true {грань видна}: = false; {грані не видна};
Тут виконується побудова нормалі щодо грані, заданої трьома крапками. Грань можна представити у вигляді трикутника для спрощення розрахунків, як відомо прямокутник можна розбити на два трикутника. Єдиним обмеженням буде тільки те, що прямокутник повинен бути опуклим, в іншому випадку можуть виникнути В«артефактиВ» при отрісовке граней. Впоследствие виконується перевірка орієнтації нормалі у відповідність з доданим способом. Основний нюанс полягає в тому, що всі крапки в вершинах граней задаються в одному напрямку - за годинниковою або проти годинникової стрілки. Напрямок обходу вкрай важливо дотримуватися, інакше існує певна ймовірність, як зазначалося раніше, отримати невірний напрямок нормалі відносно площини. Нормаль до трикутника - це векторне твір сторін-векторів, утворених вершинами. Нормаль буде розташовуватися зовні у всіх граней, і за знаком нормалі можна судити, чи ми бачимо лицьову сторону або виворіт. Якщо скалярний твір вектора зору на нормаль площині (трикутника в площині) менше або дорівнює 0, значить площину (трикутник) повернутий до спостерігача або виворітного стороною, або ребром, і відображати його немає необхідності. p> Далі якщо грань видна, залишається вивести її на екран. Для цих цілей застосовна вбудована в модуль мови Паскаль процедура FillPoly, якій можна передати заздалегідь підготовлені координати на екрані і формат заливки. Процедура FillPoly обчислює всі горизонтальні перетину, а потім зафарбовує багатокутник, використовуючи поточний стиль і колір зафарбування, визначені за допомогою супутніх процедур SetFillStyle і SetFillPattern. Контур багатокутника виділяється поточним кольором і типом лінії, встановленими при зверненні до процедур SetLineStyle і SetColor. Так як спочатку координати задані відносно початку координат, необхідно задати деякий прирощення для розташування об'єкта у видимій частині екрана. У даному випадку об'єкт буде відображений строго по центру екрана, враховуючи що встановлена ​​роздільна здатність становить 640х480 пікселів:
(1, col); {визначаємо тип заповнення
Так як площину відображення двомірна, для відтворення проекції на екрані досить скористатися тільки двома координатами - х та у, z нам потрібна тільки для визначення положення грані - виходить вона на передній план чи ні. Розраховувати і відмальовувати програмно її мало сенс тільки при побудові В«дротяної моделіВ». Згодом залишається перевірити чи є одержана грань трикутником або чотирикутником і відобразити її:
if (zar [1]. x = zar [4]. x) and (zar [1]. y = zar [4]. y) fillpoly (3, zar) fillpoly (4, zar); <...