|
|
ru.algorithms- RU.ALGORITHMS ---------------------------------------------------------------- From : Alexander Dyachenko 2:5064/7.67 02 Dec 2001 15:06:28 To : Dmitriy Grachev Subject : Help me!!! -------------------------------------------------------------------------------- DG> блин и обьяснит мне кто-нибудь ясно и доходчиво, как считать нормаль к DG> плоскости, а то все учебники по геометрии далеко в прошлом... Берёшь на плоскости 3 точки (например, вершины треугольного полигона), строишь по ним 2 вектора: точки A(Ax, Ay, Az), B(Bx, By, Bz) и C(Cx, Cy, Cz) => векторы: BA(Bx-Ax, By-Ay, Bz-Az) BC(Bx-Cx, By-Cy, Bz-Cz). Далее делаем векторное произведение BAxBC и, в результате, получаем ещё один вектор N(Nx, Ny, Nz)- нормаль! Векторное произведение считается так: | i j k | Nx=BAy*BCz-BAz*BCy N=|BAx BAy BAz| => Ny=-(BAx*BCz-BAz*BCx) |BCx BCy BCz| Nz=BAx*BCy-BAy*BCx Hо!!! Предчувствуя твой следующий вопрос, скажу, что нормаль может смотреть в две стороны и если тебе она нужна для удаления невидимых поверхностей то вот отрывок из DD3D: Отдельный вопрос - как считать нормали к граням. Точнее, как выбрать одну из двух нормалей, которая будет смотреть из объекта. Обычно эта проблема решается еще на этапе построения 3D моделей - например, пакет 3D Studio записывает вершины граней в порядке A-B-C так, чтобы векторное произведение BA*CA и было нормалью. Еще один способ - выбрать внутренную точку для объекта (либо вручную, либо взять его центр тяжести, либо еще как-нибудь - методов может быть придумано сколько угодно) и использовать ее: если для этой точки функция видимости положительна, то есть грань якобы видна, то надо поменять знак nx, ny и nz. mailto: das2001@freemail.ru Жди меня и я вернусь! *:)* --- FIPS/2000 * Origin: Сегодня вам не завтра, и уж тем более не вчера! (2:5064/7.67) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.algorithms/28553c0a0b34.html, оценка из 5, голосов 10
|