LG.BALUKATION's Weblog

Ничего, это тоже кое-что… А при желании из него можно сделать что угодно

3D

Posted by LG.BALUKATION на 2008/12/21

Этот пост будет посявящён технологиям 3D. Я напрямую не связан с программированием в сей области, однако она кажется мне интересной…

Как такового «настоящего 3D» почти не бывает. В основном, это мониторы с несколькими слоями матриц, но этот подход даёт не так уж и много преимуществ. Так же есть вякие стереоизображения — где разница создаётся либо смещением цвета либо чередованием кадров. Но чаще всего мы имеем дело с просто плоским изображением — как например фотография или картина. Кстати упомянутые методы «настоящего 3D» часто дают менее качественную картинку, чем «обычное 3D».

Методов получения картинки известно несколько. Наиболее качественное изображение (потребляя попутно не мало ресурсов) получают с помощью трассировки лучей. Больше всего это похоже на фотографию — т. к. в основе метода математическое симулирование распространения лучей света. Как правило этот метод используется в профессиональном софте навроде программ 3D моделирования — всякие там Blender, Maya, 3D Max используют именно такие методы при рендере финальных изображений.

Вторым распространённым способом получения картинки является её проецирование — преобразование координат таким образом, что бы объёмная модель стала плоской фигурой. Это даёт лишь примерно похожий результат, но зато часто оказывается быстрее трассировки лучей. Тут уже идёт разделение по способу описания самих моделей — чаще всего встречаются полигоны и вокселы.

Полигональный способ описания моделей предполагает, что форму модели можно примерно описать некоторым количеством многоугольников. Ну скажем часто можно предположить, что круг это просто фигура с большим количеством граней и т. п. В качестве полигонов как правило используются треугольники или четырёхугольники — вторые могут давать более качественную картинку, но и обрабатывать их несколько сложнее.

Вокселами называют точки в пространстве — т. е. этот способ предполагает описание моделей как набора точек. Точки прощще проецировать, чем полигоны, но для большой сцены может потребоваться очень много точек и это приведёт к повышению расхода памяти.

В плане программных средств для ускорения полигонального 3D существует 3 основных API — Glide, OpenGL, DirectX.

Исторически первым на ПК было Glide от 3dfx. Сейчас видеокарты с его поддержкой уже не выпускаются и сама фирма 3dfx принадлежит корпорации nVidia. Когда-то это был весьма распространённый API, его использовало множество игр. Интересно, что использование было почти прямым — например можно было обращаться к видеокарте из DOS или консольного приложения Linux (даже без использования X Widnow System!).

OpenGL является стандартной графической библиотекой на множестве систем. Начав свою жизнь на графических станциях Silicon Graphics, оно постепенно перебралось на ПК и теперь доступно почти повсеместно (есть «маленькая версия» OpenGL ES для встраиваемых систем и портативных устройств). Развивается OpenGL консорциумом из разных фирм (производители видеокарт, графических станций, софта) в основном в сторону CAD и промышленной графики, хотя может использоваться для игр.

DirectX появился как попытка Microsoft сделать Windows пригодной для игр. Постепенно обрастая всё большим числом технологий, DirectX до сих пор делает основной упор на игры и весьма популярен в этой среде.

Естественно, что реализация этих API в разных системах немного отличается. Например DirectX нормально доступен только на платформах Microsoft (win32, xbox, xbox 360, .Net). Сделано оно в виде компонент COM+, весьма тесно связанных с драйверами видеокарты.

Про Glide мне мало что известно, но он вроде как был просто библиотекой, которая работала с видеокартой напрямую в DOS или связкой из библиотеки и модуля ядра в Linux.

А вот OpenGL, как самое габкое и распространённое средство, разделён на ядро и привязку к конкретной системе (wgl в Win32, agl в MacOS, glx в X11 и т. п.). Ядро обычно поставляется производителями видеокарт, хотя есть и чисто программные средства (например Mesa3D). Среди «привязок» всё более менее похоже на прочие API, хотя вот X11 стоят несколько особняком…

Фишка в том, что «иксы» изначально сетевая штуковина и OpenGL там тоже сетевой. Это иногда удобно, но когда есть один комп и на нём хочется просто поиграть, пересылка по сети самому себе кажется несколько излишней и медленной. Т. е. может получится, что видеокарта будет быстро отрисовыть картинку, но долго ждать информации по следующей картинке — не лучшая перспектива для игр, потому как там важен большой fps.

Решают эту проблему по-разному, изобретая в том или ином виде нечто велосипедообразное. Вроде как основным стандартом признали DRI (Direct Rendering Infrastructure — способ локального взаимодействия OpenGL и видеокарты) — недавно Intel привнесла очередную порцию полезных новинок к ней, так же DRI используют свободные драйверы от самих X’ов и проприетарные драйвера ATi/AMD. nVidia использует свой велосипед, суть которого примерно такая же.

Реклама

комментариев 6 to “3D”

  1. ram32 said

    Написал-таки ;) Ну да, читал про все, разве что удивило насчет прямого обращения Glide к видяхе o_0 Хороший был API, жаль, что загнулся :( И Voodoo видяхи классные были… :)

  2. Ну вот мелкий обзорчек такой…

    Обращение ессно было совсем не прямым, прога юзала библиатеку, а та уже пинала видяху. Но в DOS с оборудованием тока так и работали, так что меня больше удивили феньки линушных дров — типа нынешнего фреймбуффера, тока с 3D =)

    Про хорошесть мне сказать нечего — не писал и даж не читал документацию. Однако оно было востребовано, отчасти и до сих пор (скажем для старых игр). Вуду ИМХО продукт своего времени и померло оно тупа потому что не выдержало конкуренции — скажем Matrox тоже не просто так с прилавков исчез не так давно.

  3. ram32 said

    Фреймбуффер с 3D?? o_0

  4. а что такого? сейчас же можно видео и картинки там смотреть, а вот раньше и 3D поддерживалось. Какая разница что рисовать — главное куда =)

    Кстати ща тож это может прокатить, но нужен параллельно работающий X-сервер и скорость ИМХО будет не на высоте. А так ведь можно тем же OpenGL картинку делать в памяти и копировать её во фреймбуффер.

  5. ram32 said

    А где использовался 3D во фреймбуффере? :)

  6. игры можно было делать

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s