Java JOGL: Как можно создать изображение, используя как GL, так и графику? - PullRequest
3 голосов
/ 06 сентября 2011

В основном я изучаю openGL, используя JOGL, как проект, который поможет мне узнать, я собираюсь сделать простую игру, но перед этим я хочу нарисовать квадрат и переместить камеру с помощью клавиш со стрелками.

Поскольку я не очень хорошо справляюсь с openGL, я создал небольшое меню, которое использует awt.Graphics и Buffered изображения, чтобы нарисовать его на GLCanvas.Затем, когда я выбираю кнопку, она рендерит игру (в настоящее время просто квадрат), используя javax.media.opengl.GL.

. Эта настройка работает отлично, с переключением между двумя методами рендеринга в GLCanvas.Один ИЛИ другой может рисовать на холсте, позволяя мне использовать мои текущие знания Java Graphics для создания сложного 2D-меню и переключаться на JOGL GL для изучения 3D-графики.

НО, это один ИЛИдругой, который полностью перегружает экран,

Итак, вопрос в том, как я могу создать изображение на экране, которое представляет собой смесь обоих?Т.е. как можно, чтобы мой трехмерный куб счастливо вращался на экране, а в верхней части меню была нарисована Java Graphics?Как заставить их рисовать на одном объекте / предмете, чтобы я просто вставлял 2D-изображения меню поверх 3D

Если это невозможно, я просто буду использовать команды клавиатуры, пока не буду достаточно уверен в себеGL, чтобы создать меню с ним напрямую.

Если вы не хотите видеть ни один из моих кодов, я могу отредактировать этот пост, но я не понимаю, как он может быть полезен (но вы можете, пожалуйста, спросите)

МногиеСпасибо

1 Ответ

2 голосов
/ 06 сентября 2011

Вы абсолютно правы, что вы не можете смешивать JOGL и Java2D на одной панели. Так что вам придется сделать какой-то трюк.

Если они занимают отдельные области экрана, например меню и холст анимации, вы можете просто создать две отдельные панели - одну для Java2D и одну для JOGL. Они не могут перекрываться, но могут сидеть рядом друг с другом и выглядеть так, как будто они являются частью одного и того же окна.

Если вам нужно смешать перекрытия JOGL и Graphics2D на одной панели, самый простой способ - использовать GLPBuffer. GLPBuffer - это область вне экрана, которая может быть GLDrawable. Вы визуализируете JOGL к нему, а затем создаете из него растровое изображение и рисуете растровое изображение в окне, используя Java2D. См. этот вопрос для получения дополнительной информации. Это приведет к небольшому снижению производительности, но, вероятно, не так сильно, как вы думаете.

Если вам абсолютно необходимо смешивать 2D и 3D на одной панели с максимально быстрой производительностью, вам придется использовать JOGL для рисования всего. Вам придется заново учиться рисовать меню с помощью JOGL, а не Java2D. С другой стороны, вы, вероятно, увидите небольшое улучшение производительности. И вы будете одним из немногих действительно крутых людей, которые хорошо разбираются в OpenGL.

...