Java JOGL : How can create an image using both GL and Graphics?

标签 java opengl graphics awt jogl

基本上我正在使用 JOGL 学习 openGL,作为一个帮助我学习的项目我将制作一个简单的游戏,但在此之前我想画一个正方形并使用箭头键移动相机。

因为我对 openGL 不是很了解,所以我制作了一个小菜单,它使用 awt.Graphics 和缓冲图像将其绘制到 GLCanvas 上。然后,当我选择一个按钮时,它会使用 javax.media.opengl.GL 呈现游戏(目前只是正方形)。

此设置工作完美,可以在两种渲染到 GLCanvas 的方法之间切换。一个或另一个可以绘制到 Canvas 上,让我可以利用我目前对 Java 图形的了解来创建复杂的 2D 菜单,并切换到 JOGL GL 来学习 3D 图形。

但是,它是一个或另一个完全占据了屏幕,

所以问题是我如何在屏幕上创建一个混合了两者的图像?即如何让我的 3D 立方体在屏幕上愉快地旋转,并在顶部有一个由 Java Graphics 绘制的菜单栏?我如何让他们绘制到相同的对象/事物,所以我只是将菜单的 2D 图像粘贴到 3D 上

如果这不可能,我将简单地使用键盘命令,直到我对 GL 有足够的信心直接用它创建菜单。

如果你不想看到我的任何代码,我可以编辑这篇文章,但我看不出它有什么帮助(但你可能会,所以请问)

非常感谢

最佳答案

您不能在一个面板中混合使用 JOGL 和 Java2D,这是完全正确的。所以你将不得不做一些技巧。

如果这两者占据屏幕的不同区域,例如菜单和动画 Canvas ,您可以只创建两个单独的面板 - 一个用于 Java2D,一个用于 JOGL。它们不能重叠,但可以并排放置,看起来就像是同一窗口的一部分。

如果您需要在同一面板中混合重叠 JOGL 和 Graphics2D,最简单的方法是使用 GLPBuffer。 GLPBuffer 是一个 GLDrawable 的屏幕外区域。您将 JOGL 呈现给它,然后从中创建位图,然后使用 Java2D 将位图绘制到窗口。参见 this question了解更多信息。执行此操作会对性能造成轻微影响,但可能没有您想象的那么严重。

如果您绝对需要在同一个面板中混合 2D 和 3D 以实现最终的快速性能,您将不得不使用 JOGL 来绘制所有内容。您将不得不重新学习如何使用 JOGL 而不是 Java2D 绘制菜单。从好的方面来说,您可能会看到轻微的性能提升。您将成为为数不多的深入了解 OpenGL 的非常酷的人之一。

关于Java JOGL : How can create an image using both GL and Graphics?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7319914/

相关文章:

c++ - 在函数 Qt C++ 中使用 UI 数组

c++ - gpu 蒙皮的矩阵计算

java - NetBeans 面板设计

java - jbyte* 作为 JNI 中 native C++ 方法的 ByteBuffer

java - nio 的一些麻烦

java - 正在编码的 AttributeModifier 模型

c++ - 使用离屏渲染鼠标拾取?

opengl - 处理期望内存大小(以字节为单位)的 CGo 函数的规范方法是什么?

java - 使用 proguard 混淆默认的 java 包和类名称

c++ - 在 glVertexAttribPointer 的模板中获取成员偏移量