ZXNet эхоконференция «code.zx»


тема: 3D calculatig.



от: Aleksey Malov
кому: All
дата: 06 Apr 2000
Приветствую тебя, All! При выводе 3d полигонов возникает ситуация, когда необходимо решать, в каком порядке выводить полигоны на экран. В случае выпуклых объектов все просто: достаточно выводить только те грани, нормали которых направлены в сторону камеры, причем порядок вывода граней не имеет значения. У невыпуклых объектов надо выводить сначала наиболее удаленные от камеры полигоны. В Demo or die советуется сортировать полигоны по удаленности координаты Z центральных точек полигонов. Однако, данный метод даст сбой при просчете очень простой сцены: ───────────────────────────────────────── / ───────┐ \n / . │ \n / │ \n / │ \n / \n / \n / \n / \n ─────────────────────────────────────────────────────────── Хотя центральная точка маленького треугольника расположена дальше, чем у прямоугоьника, его надо вывести позже прямоугольника, однако, вышеописанный метод сортировки этого не заметит, и, в результате, не будет видно маленького треугольника. Способ, о котором я напишу, лишен данного недостатка и работает на несколько порядков быстрее, чем метод пузырьковой сортировки центральных точек полигонов. Рассмотрим объект типа "гантель", состояшую из трех объектов: 2 сферы и цилиндр. Вместо того, чтобы сортировать все полигоны данного объекта, достаточно ввести два псевдо-полигона, заданные направлениями векторов их нормалей (сами координаты вершин псевдо-полигонов нам не нужны, т.к. выводить их мы не будем), которые разделяют объект на 3 ВЫПУКЛЫХ объекта (2 сферы и цилиндр): WWWWW WWWWW WW WW WW WW W W W W W W W W W WWWWWWWWWWWWW W W W W S1 C S2 W W W W WWWWWWWWWWWWW W W W W W W W W W WW WW WW WW WWWWW WWWWW │ N1 │N2 ├──> ├───> │ │ Теперь достаточно определить направление нормалей псевдо-полигонов. Если нормаль N1 направлена навстречу камере, то сначала отрисовываем полигоны сферы S1. В противном случае отрисовываем сферу S1 в последнюю очередь, после полигонов сферы S2 и цилиндра C (какой из этих двух объектов выводить раньше, решаем аналогичным образом при помощи нормали N2). В данном примере можно было бы обойтись только нормалью N1, т.к. N1 и N2 параллельны друг другу. Аналогичным образом можно отсортировать и более сложные сцены, путем введения бОльшего числа псевдо-полигонов (достаточно добавить нужное количество векторов нормалей псевдо-полигонов). Кстати, для задания некоторых нормалей, можно обойтись и уже существующими в сцене вершинами. С динамически изменяющимися 3d-сценами (в которых меняется взаимное положение и/или форма объектов) будет немного сложнее. Может, кто знает как разрешить эту проблему? Впрочем, в демках для Спектрума можно обойтись и неизменяющимися объектами. Желаю вам здоровья, счастья и творческих узбеков. Aleksey Malov aka VIVID/Brainwave.




Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Тема - Фоторепортаж с Fun Top-98.
MY CITY - КУККОВКА: Рaён в кoтoрoм мнoгo шeснaццaтиэтaжeк...
Почтовый ящик - письма читателей: Alex Doom, Жека и Толян.
ZX-NET в Новосибирске - Новосибирская ZX-Net. Что для ее постройки нужно?
О разном - миниинтевью с западным спектрумистом кодером и музыкантом Gasman/Raww.

В этот день...   8 мая