Пришло время снова поныть про OpenGL. Дело в том, что я никуда не
продвинулся в своих попытках изображать что-то объемное, а тем более
сферу. Потому что в OpenGL3 все стало намного более низкоуровневым и без
каких-то дополнительных слоев абстракций это сущий ад. Если кто такого
опыта не имел, поясню. Чтобы изобрать что-нибудь, нужно задать массив
вершин треугольников, из которых будет это что-то изображено. Построили?
Ну, понятно, это, в большинстве своем, школьная геометрия, хоть и в
трехмерном пространстве. Далее вам нужно написать шейдерную программу.
На языке шейдеров - GLSL. Это такой высокоуровневый язык, похожий на C. В
этой программе вы будете объяснять видеокарте, что делать с массивами
значений, которые вы ей скармливаете (и не всегда это могут быть
координаты вершин). То есть, возможно, применять какие-то операции с
матрицами, чтобы передвинуть объект, отобразить его в перспективе, то
есть, не как что-то плоско спроецированное на экран, а сделать его
проекцию с учетом того, что пространство уходит куда-то вдаль и там все
становится меньше. Кроме того, шейдерные программы позволяют рисовать
разными цветами, налеплять текстуры, делать всякую тесселяцию (т.е.
сгладить угловато-треугольниковую поверхность) и т.п. Так вот без
дополнительного слоя абстракции все сводится к тому, что это все нужно
написать самостоятельно и так же самостоятельно загрузить куда нужно.
И
здесь мне хочется остановиться и подумать. Стоит ли продлжать пытаться
сделать это с Java и JOGL на таком низком уровне, изобретая собственный
трехмерный движок, или, скажем, взять какую-то, возможно унылую и
отсталую абстракцию вроде JMonkeyEngine или jOGRE, или вообще пойти на
С++, где выбор намного шире. Вопрос, в общем-то, имел бы простой ответ,
будь у меня в последние лет пять какой-то опыт написания приложений на
С++, чтобы я хотя-бы имел представление о том, что нынче есть в
стандартной библиотеке и распространенных вещах вроде того же Boost.
Ведь с пониманием, какие структуры данных и абстракции уже есть в языке,
писать что-то сложнее хелловорлда намного проще. Тут же, у C++, есть
эта самая OGRE, которую мне почему-то советуют (но я еще не смотрел).
Впрочем,
никто не мешает подсматривать в код других движков и писать что-то
свое, заточенное именно под задачу шариков или кубиков. Но, вынужден
сказать, что уже немного опускаются руки, и хочется вообще забить на эту
идею. Однако она иногда не дает нормально спать, и это заставляет
ковыряться дальше. Правда, ничего целостного насчет применения не
вырисовывается, и, похоже, мне просто хочется проверить некоторые
концептуальные идеи сначала, да, касательно кубических миров и
возможного уровня их детализации без серьезных потерь
производительности. Может и зря я заморочился при этом сразу с
отображением в 3D на видеокарте, хотя с таким средством наглядной
демонстрации было бы проще.
Прошу ли я совета? Не думаю. Все равно я
достаточно упертый, чтобы попробовать и выбрать самостоятельно, не
учитывая чужое мнение. :)
Подписаться на:
Комментарии к сообщению (Atom)
Комментариев нет:
Отправить комментарий