| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java: Общие вопросы > Как делать 3D при помощи java2D |
| Автор: oson 2.7.2010, 15:50 |
| Подскажите плиз линки по созданию 3D картинок с использованием Java2D |
| Автор: Cheloveck 2.7.2010, 16:16 |
| Может всё же http://forum.vingrad.ru/forum/topic-161042/kw-opengl-java-jogl.html по-человечески? |
| Автор: oson 2.7.2010, 23:18 |
| Из статьи я понял что JOGL лучший выбор. Но если задача стоит просто рисовать трехмерный график, то не избыточно ли это будет? |
| Автор: Temdegon 3.7.2010, 00:22 |
| Для построения графиков лучше юзать спец-либы, если там что-то не очень специфическое. На пример JFreeChart http://www.jfree.org/jfreechart/jfreechart-1.0.13-demo.jnlp http://www.jfree.org/jfreechart/samples.html |
| Автор: oson 3.7.2010, 08:57 |
| И на чем сделаны эти графики jfreechart? Они используют в СВОИХ РАЗРАБОТКАХ тот же JOGL или ограничиваются Java2D? В этом то и вопрос. Меня интересует это не стоки зрения пользователя графиков, а с точки зрения разработчика движка для графиков. |
| Автор: Temdegon 3.7.2010, 14:50 |
| Там вроде исходники есть |
| Автор: oson 3.7.2010, 20:25 |
| Если на выходе надо не более чем jpeg (ну или png,короче картинка) - нужен JOGL? Или он нужен когда надо делать динамические сцены, а статический jpeg надо java2d рисовать. Проясните плиз ситуацию. |
| Автор: Amp 3.7.2010, 22:21 |
| Для "динамических" 3д-графиков разумеется нужен будет JOGL, либо какой-нибудь другой биндинг к OpenGL/D3D (Java3D например). Для статической картинки (вроде тех, которые можно видеть в ворде) можешь пользоваться Java2D, но это менее удобней - будет лишний код, который отвечают за аффинные преобразования полигонов, проекции, расчет какого-никакого простенького освещения, отрисовки этого дела силами Java2D. Конечно специфика отображения графиков сам софтварный рендеринг может сильно упростить, но все равно - это мартышкин труд. JOGL - это конечно лишняя зависимость, которая может не работать (пользователи альтернативных ОС, например, нередко имеют либо кривоустановленные драйвера, либо просто убогие драйвера, которые кое-как поддерживают OpenGL версий 1.5 и выше). |
| Автор: oson 3.7.2010, 23:20 |
| То есть фактически нарисовать просто jpeg картинку со всеми признаками 3D легче и быстрее при помощи JOGL. Но при этом должен стоять сам драйвер для openGL. Если там в той конкретной реализации openGL что-то будет нереализовано или не так реализовано, то картинка будет выводиться искаженая. Правильно я понял? А Java3D в таком случае лучше чем-то? Или такие же могут быть проблемы? |
| Автор: oson 4.7.2010, 10:36 |
| Задача состоит в том, что на выходе должен быть BufferedImage, содержащий собственно сгенерированный график. Его можно или вывести в Swing, и в веб и просто в файловой системе сохранить. JFreeChart использовать нельзя никак, собственно как и другие фреймворки на эту тему. При помощи Java2D можно как то эмулировать 3D график. Но используя JOGL думаю эффект трехмерности должен быть лучше и достигаться проще. Но вопрос в том, какие дополнительные требования должны будут предъявляться к клиенту, который захочет запустить у себя написанный таким образом график? То есть в поставке должно быть написано - "Пожалуйста установите у себя OpenGL не ниже 1.5, иначе вы нифика не увидите"? |
| Автор: Amp 4.7.2010, 11:36 | ||
Да. Или же можно взять Mesa (http://www.mesa3d.org) для софтварного рендеринга OpenGL и таскать ее с собой - скорость отрисовки все равно уже не критична, зато будет пофиг на драйвера и железо. Но биндингов Mesa к Java я не видел )) Почему я спросил про картинку - для инициализации OpenGL (формат пикселя, контекст) необходимо окно. Приложение без окна взять и отрендерить картинку куда-то там в память (если не использовать хитрые уловки вроде скрытого окна, либо, в случае с windows, получения HDC совершенно левого окна, например десктопа через GetDesktopWindow) нельзя. Но подобный off-screen rendering возможен опять же с помощью библиотеки Mesa . |
| Автор: oson 4.7.2010, 14:15 |
| Читаю по Java3D http://en.wikipedia.org/wiki/Java_3D "Java 3D is a scene graph-based 3D application programming interface (API) for the Java platform. It runs on top of either OpenGL or Direct3D. " Получается или OpenGL или Direct3D должно быть установлено у клиента уже - насколько я понимаю вообще это связано с самой видео картой и соответствующими драйверами. То есть в случае Java3D значит клиенту меньше надо делать дополнительных действий чтобы запустить у себя картинку? В случае с Java2D он же не делает никаких инсталляций дополнительных - jvm использует имеющиеся ресурсы и все, и не прости поставить дополнительные драйвера. Есть тут какое то принципиальное отличие - java3d, jogl и java2d - в плане установки дополнительных драйверов, программ и тп? Хотелось бы, чтобы чел взял присланную программу и просто запустил ее в среде jvm, ну а нужные jarы для той же java3d будут уже внутри поставки. |
| Автор: Amp 4.7.2010, 14:33 | ||
Я не склонен считать драйвера на видеокарту дополнительным ПО. Это основа, которая должна стоять и корректно работать. java3d/jogl - по сути обвязки вокруг OpenGL или D3D. И если последние не работают, то и java3d/jogl работать не будут. Java2D может работать без аппаратной акселерации, поэтому требование к драйверам на видео не предъявляет. В последние годы, в связи с широким распространением композитных оконных менеджеров в современных ОС (aero в windows, compiz/kwin в linux) люди как-то озадачиваются корректной работой аппаратного ускорения, чтобы все свистело и летало |
| Автор: oson 4.7.2010, 15:08 |
| Ясно, спасибо. Но один вопрос я не понял. Я при помощи java2d просто генерирую картинку (в зависимости от входных параметров) и сохраняю ее в файловой системе (или вывожу в Swing, в web). Используя JOGL/java3d можно результат работы просто свести к BufferedImage и куда нить сохранить (ну или вывести) эту картинку? То есть если мне не надо ничего больше, чем jpeg или png картинка пока, но я хочу использовать возможности этих библиотек для создания 3d графиков (чтобы не сочинять то, что уже там сделано) - получится так его использовать? |
| Автор: Amp 4.7.2010, 17:27 | ||
Как это сделать в приложении, которое не имеет окон (например серверное приложение), без хаков вроде создания невидимого окна, да и еще, чтобы это было переносимо с платформы на платформу - я не знаю. Сложилось впечатление, что это невозможно, кроме предложенного варианта с Mesa3D. |
| Автор: Skipy 5.7.2010, 10:11 | ||
Вопросы: Как именно Вы генерируете картинку? Что Вы вкладываете в понятие "генерирую"? Где Вы ее отрисовываете? Как? Почему бы Вам не отрисовывать картинку в процессе генерации уже на BuferedImage, сразу? |