суббота, 18 июля 2015 г.

И снова про OpenGL

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

Комментариев нет:

Отправить комментарий