Я решил начинать осваивать 3d не с 3DSMax-a, а с более глубокого уровня - типа, как всё это делается "изнутри". Ну создавал максимум выпуклые многогранники, да текстурки на кубик накладывал. И вот мучает меня вопрос: полигон, при выводе, полностью закрашиваетcя? Просто я делал чёрно-белые многогранники (черные грани, белые контуры) и действовал по принципу "Если проекция нормали отрицательна, то рисуем". А вот если полигоны накладываются друг на друга (например, при наложении двух объектов)? Тогда, что? Надо отсортировать полигоны по удалённости от камеры и рисовать, начиная с самых дальних, каждый полностью закрашивая в свой цвет/текстуру? Мне-то надо было для рисования полигона три линии вывести в 3d, а так надо полностью закрашивать что-ли?
ЗЫ. В обучалках этого нет.
Чтобы не слипалось, нужны промежуточные цвета. Рисуешь объект похожими неиспользуемыми цветами а потом перекрашиваешь.
z-буфер?
или надо каркасные (wireframe) объекты рисовать? тогда ищи довольно сложные и тормозные алгоритмы отсечения невидимых линий...
mithquessir
5.05.2005 15:45
Могу посоветовать только одно -
RTFM
Бродяжник
5.05.2005 16:25
Я бы преположил, что стоит сортировать полигоны по удаленности от камеры, закрашивая их целиком. Это, наверное, быстрее, чем искать пересечения и отсекать невидимые фрагменты. Единственное, что нужно решить, это как определить "расстояние от камеры до полигона". Какую точку на полигоне выбрать в качестве конца отрезка?
Ну вот так вот я и хотел недавно сделать спрайтовую 3D-стрелялку - так даже простой кубик со спрайтами 70x70 тормозит (3 fps). Все-таки пора на 32-bit переходить...
AlienEmperor
16.05.2005 14:05
Зачем так извращаться-то ? А Direct3D на что ? А OpenGL ? Все так и норовят велосипед изобрести... Если есть все необходимые механизмы, зачем их заново придумывать ? (это касается фразы: "хочу написать простую 3D игру), вот для того чтобы понять, как вообще это работает - еще понимаю, я для программ - нет.
Ну так я же не для результата. Я просто хочу разобраться во всем этом с самого начала. Понятно, все что на аппаратном уровне поддерживается незачем программно реализовывать. Но все же хочется начать путь от истоков.
А то обычные юзера делают за 30 минут одной мышкой мини 3D-шку и доказывают, что круты, хотя почти и не шарят в этом. Не хочу таким быть.
AlienEmperor
17.05.2005 14:47
Аааа... В принцыпе, подход правильный. На самом деле, можно сэмулировать Z-буффер: есть массив объектов, а есть массив, в котором номера выводимых объектов сортируются и объекты выводятся по мере удаления (или приближения, или еще как-нибудь) по номеру в буфере... Должно работать.
Бродяжник
18.05.2005 12:39
[offtop]
Цитата
Я просто хочу разобраться во всем этом с самого начала.
Респект! Тоже когда-то таким был... пока не разленился...[/offtop]
Класная тема!!! Меня самого это жутко интересует. Эксперементировал много (как пример смотри тему "Labyrinth"), но очень хочется узнать, как это делают большие дяди програмисты
.
Насчёт сортировки по удалённости, подход правильный, на мой взгляд. От каких точек считать? От средних - это будит алгоритм художника. Правда подходит он только для выпуклых многогранников, с другими могут быть проблемы неправильного перекрывания.
А Direct3D и OpenGL - это не интересно, согласен. В старых играх (да и в новых, некоторых) был режим софтверной отрисовки. Вот там всё это делалось вручную. Эх, были же времена... <_<
Цитата(Archon @ 10.06.05 13:28)
Эх, были же времена...
Ага! Тогда 2-3 человека могли такооое написать! По крайней разработчику игр было легче утвердится (ИМХО)...
Z-buffer конечно дело хорошее, надёжное, но очень медленное, т.к в сложных сценах рисование ВСЕХ видимых полигонов не оптимально. Оказывается есть такой метод "обратной трассировки лучей". Из каждой точки экрана берётся перпендикулярный ему луч и ищется полигон, с которым он пересекается. Но неужели перебираются ВСЕ полигоны?! Если кто слышал о таком, не могли бы вы объяснить (на словах) как реализуется этот метод?
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста,
нажмите сюда.