Понял, что программист из меня посредственный - больше нравится графика, поэтому буду пользоваться движками вроде юнити. Однако из-за того, что долгое время связывал себя с программированием, не покидает зуд любопытства: почему говорят, что рендер-движки (кажется, они) поддерживают модели с определенным количеством полигонов; как графические модели превращаются в файлы, а затем из файлов - опять в графические модели и рисуются на экране. Предположение: смоделировать что-нибудь простенькое в блендере, сохранить в файл, а затем просмотреть его (с документацией по формату файла, чтоб уж не совсем бессмысленное времяпровождение было). Может даже свой простенький вьювер написать. Как вариант? Или что-нибудь другое посоветуете? А то этот "зуд" покоя не дает:(
Ну модель - это набор вершин (x,y,z, нормаль) и треугольников (номер 1-й, 2-й,3-й вершин в списке вершин). В движке происходит расчет экранных координат каждой вершины, потом растеризуются треугольники либо построчно, либо по другим алгоритмам. В файле соответственно записаны x,y,z каждой вершины и данные треугольников либо в бинарном, либо текстовом виде (посмотри в блокноте текстовый .x).
loonypy
> почему говорят, что рендер-движки (кажется, они) поддерживают модели с
> определенным количеством полигонов;
Думаю, из-за ограничения объема вершинного буфера.
loonypy
> Может даже свой простенький вьювер написать.
loonypy
> А то этот "зуд" покоя не дает:(
) хм, на мой взгляд это одно из свойств программистского характера. Пиши движок )
glDrawElements glInterleavedArrays - отрисуеш любой объект, разберешся с их форматом останется только прочитать вершины из файла.
loonypy
> то этот "зуд" покоя не дает:(
Пойти на медфорум ? :)
Из за хранения индексов в двух байтах может быть. Но это скорее ограничение формата.
loonypy
> Понял, что программист из меня посредственный - больше нравится графика,
> поэтому буду пользоваться движками вроде юнити.
Unity не конструктор, код писать придётся.
> почему говорят, что рендер-движки (кажется, они) поддерживают модели с
> определенным количеством полигонов
Геометрия модели задаётся списком её вершин и списком её треугольников. Каждый треугольник задаётся индексами его вершин в списке вершин модели. В частности в Unity индекс вершины хранится двумя байтами, соответственно у одной модели не может быть больше 65к вершин.
alexzzzz
> В частности в Unity индекс вершины хранится двумя байтами
а еще анимация софтверная, а еще...
З.Ы.
Интересно, куда вся эта толпа "программистов на юнити" трудоустроится, если движок сфейлится =)
Grettir
> Интересно, куда все эта толпа "программистов на юнити" трудоустроится, если
> движок сфейлится =)
Это верно, но по крайней мере не существует нормального более-менее современного и притом бесплатного открытого двига на c++. Возможно, писать на юнити будет быстрее. Тем более говорят, что сейчас главнее контент. Я вообще думаю, что контент тоже скоро будет шаблонизирован и его производство будет поставлено на конвейер и главным станет гейм-дизайн.
Значит, взять файл с текстовым форматом. Затем взять этот файл и попробовать написать его отрисовку на экран. Для отрисовки стоит воспользоваться огл\директ икс, или для лучшего понимания чем-нибудь более низкоуровневым, если такое существует? Кроме .х есть еще какие-нибудь подходящие для изучения? Почему модель описывается списком вершин и нормалей, списком треугольников? Нормаль, вроде, нужна для указания рендеру отображать треугольник или нет. А треугольник и сам по себе набор вершин - зачем еще список вершин нужен. У кого об этом почитать?
Grettir
> Интересно, куда все эта толпа "программистов на юнити" трудоустроится, если
> движок сфейлится =)
Я не считаю себя игропрограммистом или еще как-либо связывающим свою основную работу с разработкой игр - скорее авантюристом: хочу попытаться сделать свою версию игры, на которую "запал" много лет назад, исправив все косяки, которые мне в ней не нравятся. Ну, еще пару идей реализовать... опять же, попытаться:)
loonypy
> А треугольник и сам по себе набор вершин - зачем еще список вершин нужен. У
> кого об этом почитать?
тяжелый случай... смотри у вершины могут быть (xyz, xn,yn,zn, tutv) = 32 float. К тому же может быть и другой формат вершин (с тангенциальными и бинормальными координатами). К тому же одна и таже вершина может использоваться разными треугольниками
. Например, на рисунке вершины 0 и 3 используются обоими треугольниками - зачем тратить память, дублируя информацию. Индекс(номер вершины в списке) весит 2 байта в общем случае, если в модели не больше 65к вершин.
Список вершин:
данные вершины 0 ну там xyz и прочее
данные вершины 1
данные вершины 2
данные вершины 3
Список полигонов:
013 треугольник состоит из 0-й,1-й,3-й вершин, что находятся в списке выше
032 треугольник состоит из 0-й,3-й,2-й вершин, что находятся в списке выше
Надеюсь дошло?
> Для отрисовки стоит воспользоваться огл\директ икс, или для лучшего понимания
> чем-нибудь более низкоуровневым, если такое существует?
Если хочешь распотрошить тело компьютерной графики, поищи книги по алгоритмическим основам машинной графики(алгоритмы брезенхема, отсечения, фильтрация текстур) и начинай писать софтверный рендер (есть немного багованный пример, но для начала сойдет http://www.codeproject.com/Articles/170296/3D-Software-Rendering-Engine-Part-I).
Разница между софтверным рендером и directx/ogl в том, что в последних нужно просто отправить данные о треугольнике и сказать -"Нарисуй-ка мне его", а в при случае софтверного рендера тебе всю эту грязную и неблагодарную (ввиду того, что технологии ушли далеко) работу по рисованию треугольника придется сделать самому. Главное же преимущество DX/OGL - расчет производится на видеокарте в большинстве современного железа, а не на центральном процессоре.
loonypy
> хочу попытаться сделать свою версию игры, на которую "запал" много лет назад
что за игра хоть?
graveman
> тяжелый случай...
Поэтому в игропрограммирование стараюсь не лезть.
graveman
> Надеюсь дошло?
Частично: список вершин - перечень координат, а список треугольников - какому треугольнику какие координаты соответствуют. По поводу всего остального. "xyz" -- понимаю, координаты точки. "xn,yn,zn," -- вроде что-то про нормаль. "tutv" и "= 32 float" -- не понимаю (32*4байта? Описание одной вершины занимает 128 байт памяти?).
graveman
спасибо за ссылку, на выходных нормально почитаю.
> что за игра хоть?
"Freedom_Fighters", http://ru.wikipedia.org/wiki/Freedom_Fighters
Управление помощниками сильно злило, ИИ, а так же невозможность играть за своих.
loonypy
любая из координат имеет размерность float (4 байта). tu, tv - текстурные координаты (какой вершине на картинке какая точка соответствует). (xyz, xn,yn,zn, tutv) - 8 чисел float = 32 байта на вершину.
loonypy
> какому треугольнику какие координаты соответствуют
Я бы сказал, на каких координатах он "стоит" или построен. Есть индексированные треугольники(могут использовать одинаковые вершины, есть неиндексированные (у каждого свои вершины).
loonypy
> "xn,yn,zn," -- вроде что-то про нормаль
Да, нормаль определяет отражение света. Ее можно интерполировать между треугольниками, которые используют вершину - получится гладкое изображение. Ищи в гугле и здесь - до опупения основы эти пересказаны уже.
loonypy
> Нормаль, вроде, нужна для указания рендеру отображать треугольник или нет.
треугольник не будет нарисован, если мы на него смотрим с обратной стороны,
а вот куда "смотрит" своей плоскостью треугольник - это задаёт как раз нормаль.
это может показаться странным - в обычной геометрии нормаль не должна ни куда отклоняться.
А в компьютерной графике не так:
нормаль можно направить куда захочешь (если это нужно)
своеобразный трюк позволяющий сделать картинку лучше, экономя ресурсы
вот перпендикуляры синего цвета - это и есть нормали
нормали можно задавать и для отдельных вершин
http://www.gamedev.ru/terms/Normal
в данном случае метод затенения учитывает нормали из каждой вершины и сглаживает
поэтому выглядит более плавно
при том же количестве полигонов
вообще напридумана целая куча всяких методов затенения - более качественных, более оптимальных
сейчас в основном на шейдерах
что будет дальше ....
graveman
> а в при случае софтверного рендера тебе всю эту грязную и неблагодарную (ввиду
> того, что технологии ушли далеко) работу по рисованию треугольника придется
> сделать самому.
возможно будет второе пришествие софтварных рендеров
так как видеокарты всё больше становятся универсальными вычислительными
graveman
> Я вообще думаю, что контент тоже скоро будет шаблонизирован и его производство
> будет поставлено на конвейер и главным станет гейм-дизайн.
Это очень интересное мнение. Модельки будут рисоваться сами собой, звуки тоже, текстуры опять же?
Тема в архиве.