Помощь - Поиск - Пользователи - Календарь
Полная версия: 3d-графика
Форум «Всё о Паскале» > Pascal, Object Pascal > Написание игр
Shura
Я решил начинать осваивать 3d не с 3DSMax-a, а с более глубокого уровня - типа, как всё это делается "изнутри". Ну создавал максимум выпуклые многогранники, да текстурки на кубик накладывал. И вот мучает меня вопрос: полигон, при выводе, полностью закрашиваетcя? Просто я делал чёрно-белые многогранники (черные грани, белые контуры) и действовал по принципу "Если проекция нормали отрицательна, то рисуем". А вот если полигоны накладываются друг на друга (например, при наложении двух объектов)? Тогда, что? Надо отсортировать полигоны по удалённости от камеры и рисовать, начиная с самых дальних, каждый полностью закрашивая в свой цвет/текстуру? Мне-то надо было для рисования полигона три линии вывести в 3d, а так надо полностью закрашивать что-ли?
ЗЫ. В обучалках этого нет.
SKVOZNJAK
Чтобы не слипалось, нужны промежуточные цвета. Рисуешь объект похожими неиспользуемыми цветами а потом перекрашиваешь.
P@sh@
z-буфер?

или надо каркасные (wireframe) объекты рисовать? тогда ищи довольно сложные и тормозные алгоритмы отсечения невидимых линий...
mithquessir
Могу посоветовать только одно - RTFM smile.gif
Бродяжник
Я бы преположил, что стоит сортировать полигоны по удаленности от камеры, закрашивая их целиком. Это, наверное, быстрее, чем искать пересечения и отсекать невидимые фрагменты. Единственное, что нужно решить, это как определить "расстояние от камеры до полигона". Какую точку на полигоне выбрать в качестве конца отрезка?
Shura
Ну вот так вот я и хотел недавно сделать спрайтовую 3D-стрелялку - так даже простой кубик со спрайтами 70x70 тормозит (3 fps). Все-таки пора на 32-bit переходить...
AlienEmperor
Зачем так извращаться-то ? А Direct3D на что ? А OpenGL ? Все так и норовят велосипед изобрести... Если есть все необходимые механизмы, зачем их заново придумывать ? (это касается фразы: "хочу написать простую 3D игру), вот для того чтобы понять, как вообще это работает - еще понимаю, я для программ - нет.
Shura
Ну так я же не для результата. Я просто хочу разобраться во всем этом с самого начала. Понятно, все что на аппаратном уровне поддерживается незачем программно реализовывать. Но все же хочется начать путь от истоков.
Shura
А то обычные юзера делают за 30 минут одной мышкой мини 3D-шку и доказывают, что круты, хотя почти и не шарят в этом. Не хочу таким быть.
AlienEmperor
Аааа... В принцыпе, подход правильный. На самом деле, можно сэмулировать Z-буффер: есть массив объектов, а есть массив, в котором номера выводимых объектов сортируются и объекты выводятся по мере удаления (или приближения, или еще как-нибудь) по номеру в буфере... Должно работать.
Бродяжник
[offtop]
Цитата
Я просто хочу разобраться во всем этом с самого начала.

Респект! Тоже когда-то таким был... пока не разленился...[/offtop]
Archon
Класная тема!!! Меня самого это жутко интересует. Эксперементировал много (как пример смотри тему "Labyrinth"), но очень хочется узнать, как это делают большие дяди програмисты smile.gif .
Насчёт сортировки по удалённости, подход правильный, на мой взгляд. От каких точек считать? От средних - это будит алгоритм художника. Правда подходит он только для выпуклых многогранников, с другими могут быть проблемы неправильного перекрывания.
А Direct3D и OpenGL - это не интересно, согласен. В старых играх (да и в новых, некоторых) был режим софтверной отрисовки. Вот там всё это делалось вручную. Эх, были же времена... <_<
Shura
Цитата(Archon @ 10.06.05 13:28)
Эх, были же времена...


Ага! Тогда 2-3 человека могли такооое написать! По крайней разработчику игр было легче утвердится (ИМХО)...
Shura
Z-buffer конечно дело хорошее, надёжное, но очень медленное, т.к в сложных сценах рисование ВСЕХ видимых полигонов не оптимально. Оказывается есть такой метод "обратной трассировки лучей". Из каждой точки экрана берётся перпендикулярный ему луч и ищется полигон, с которым он пересекается. Но неужели перебираются ВСЕ полигоны?! Если кто слышал о таком, не могли бы вы объяснить (на словах) как реализуется этот метод?
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.