![]() |
![]() |
Shura |
![]()
Сообщение
#1
|
![]() Пионер ![]() ![]() Группа: Пользователи Сообщений: 136 Пол: Мужской Реальное имя: Александр Репутация: ![]() ![]() ![]() |
Я решил начинать осваивать 3d не с 3DSMax-a, а с более глубокого уровня - типа, как всё это делается "изнутри". Ну создавал максимум выпуклые многогранники, да текстурки на кубик накладывал. И вот мучает меня вопрос: полигон, при выводе, полностью закрашиваетcя? Просто я делал чёрно-белые многогранники (черные грани, белые контуры) и действовал по принципу "Если проекция нормали отрицательна, то рисуем". А вот если полигоны накладываются друг на друга (например, при наложении двух объектов)? Тогда, что? Надо отсортировать полигоны по удалённости от камеры и рисовать, начиная с самых дальних, каждый полностью закрашивая в свой цвет/текстуру? Мне-то надо было для рисования полигона три линии вывести в 3d, а так надо полностью закрашивать что-ли?
ЗЫ. В обучалках этого нет. -------------------- Старайтесь восполнять пробелы в области незнания! ;-D
|
![]() ![]() |
SKVOZNJAK |
![]()
Сообщение
#2
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 930 Пол: Мужской Репутация: ![]() ![]() ![]() |
Чтобы не слипалось, нужны промежуточные цвета. Рисуешь объект похожими неиспользуемыми цветами а потом перекрашиваешь.
|
P@sh@ |
![]()
Сообщение
#3
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 180 Пол: Мужской Репутация: ![]() ![]() ![]() |
z-буфер?
или надо каркасные (wireframe) объекты рисовать? тогда ищи довольно сложные и тормозные алгоритмы отсечения невидимых линий... |
mithquessir |
![]()
Сообщение
#4
|
Гость ![]() |
Могу посоветовать только одно - RTFM
![]() |
Бродяжник |
![]()
Сообщение
#5
|
Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 206 Пол: Мужской Репутация: ![]() ![]() ![]() |
Я бы преположил, что стоит сортировать полигоны по удаленности от камеры, закрашивая их целиком. Это, наверное, быстрее, чем искать пересечения и отсекать невидимые фрагменты. Единственное, что нужно решить, это как определить "расстояние от камеры до полигона". Какую точку на полигоне выбрать в качестве конца отрезка?
|
Shura |
![]()
Сообщение
#6
|
![]() Пионер ![]() ![]() Группа: Пользователи Сообщений: 136 Пол: Мужской Реальное имя: Александр Репутация: ![]() ![]() ![]() |
Ну вот так вот я и хотел недавно сделать спрайтовую 3D-стрелялку - так даже простой кубик со спрайтами 70x70 тормозит (3 fps). Все-таки пора на 32-bit переходить...
-------------------- Старайтесь восполнять пробелы в области незнания! ;-D
|
AlienEmperor |
![]()
Сообщение
#7
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 160 Пол: Мужской Реальное имя: Серый Репутация: ![]() ![]() ![]() |
Зачем так извращаться-то ? А Direct3D на что ? А OpenGL ? Все так и норовят велосипед изобрести... Если есть все необходимые механизмы, зачем их заново придумывать ? (это касается фразы: "хочу написать простую 3D игру), вот для того чтобы понять, как вообще это работает - еще понимаю, я для программ - нет.
-------------------- Все в жизни ботва... Кроме пчел!
|
Shura |
![]()
Сообщение
#8
|
![]() Пионер ![]() ![]() Группа: Пользователи Сообщений: 136 Пол: Мужской Реальное имя: Александр Репутация: ![]() ![]() ![]() |
Ну так я же не для результата. Я просто хочу разобраться во всем этом с самого начала. Понятно, все что на аппаратном уровне поддерживается незачем программно реализовывать. Но все же хочется начать путь от истоков.
-------------------- Старайтесь восполнять пробелы в области незнания! ;-D
|
Shura |
![]()
Сообщение
#9
|
![]() Пионер ![]() ![]() Группа: Пользователи Сообщений: 136 Пол: Мужской Реальное имя: Александр Репутация: ![]() ![]() ![]() |
А то обычные юзера делают за 30 минут одной мышкой мини 3D-шку и доказывают, что круты, хотя почти и не шарят в этом. Не хочу таким быть.
-------------------- Старайтесь восполнять пробелы в области незнания! ;-D
|
AlienEmperor |
![]()
Сообщение
#10
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 160 Пол: Мужской Реальное имя: Серый Репутация: ![]() ![]() ![]() |
Аааа... В принцыпе, подход правильный. На самом деле, можно сэмулировать Z-буффер: есть массив объектов, а есть массив, в котором номера выводимых объектов сортируются и объекты выводятся по мере удаления (или приближения, или еще как-нибудь) по номеру в буфере... Должно работать.
-------------------- Все в жизни ботва... Кроме пчел!
|
Бродяжник |
![]()
Сообщение
#11
|
Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 206 Пол: Мужской Репутация: ![]() ![]() ![]() |
[offtop]
Цитата Я просто хочу разобраться во всем этом с самого начала. Респект! Тоже когда-то таким был... пока не разленился...[/offtop] Сообщение отредактировано: Бродяжник - 18.05.2005 8:40 |
Archon |
![]()
Сообщение
#12
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 618 Пол: Мужской Репутация: ![]() ![]() ![]() |
Класная тема!!! Меня самого это жутко интересует. Эксперементировал много (как пример смотри тему "Labyrinth"), но очень хочется узнать, как это делают большие дяди програмисты
![]() Насчёт сортировки по удалённости, подход правильный, на мой взгляд. От каких точек считать? От средних - это будит алгоритм художника. Правда подходит он только для выпуклых многогранников, с другими могут быть проблемы неправильного перекрывания. А Direct3D и OpenGL - это не интересно, согласен. В старых играх (да и в новых, некоторых) был режим софтверной отрисовки. Вот там всё это делалось вручную. Эх, были же времена... <_< -------------------- Close the World...txeN eht nepO
|
Shura |
![]()
Сообщение
#13
|
![]() Пионер ![]() ![]() Группа: Пользователи Сообщений: 136 Пол: Мужской Реальное имя: Александр Репутация: ![]() ![]() ![]() |
Цитата(Archon @ 10.06.05 13:28) Эх, были же времена... Ага! Тогда 2-3 человека могли такооое написать! По крайней разработчику игр было легче утвердится (ИМХО)... -------------------- Старайтесь восполнять пробелы в области незнания! ;-D
|
Shura |
![]()
Сообщение
#14
|
![]() Пионер ![]() ![]() Группа: Пользователи Сообщений: 136 Пол: Мужской Реальное имя: Александр Репутация: ![]() ![]() ![]() |
Z-buffer конечно дело хорошее, надёжное, но очень медленное, т.к в сложных сценах рисование ВСЕХ видимых полигонов не оптимально. Оказывается есть такой метод "обратной трассировки лучей". Из каждой точки экрана берётся перпендикулярный ему луч и ищется полигон, с которым он пересекается. Но неужели перебираются ВСЕ полигоны?! Если кто слышал о таком, не могли бы вы объяснить (на словах) как реализуется этот метод?
-------------------- Старайтесь восполнять пробелы в области незнания! ;-D
|
![]() ![]() |
![]() |
Текстовая версия | 14.07.2025 18:36 |