OpenGL - 从Java.awt.Graphics切换到OpenGL的简便方法?

时间:2013-10-24 21:48:00

标签: java opengl bufferedimage

我正在用Java编写一个简单的3D引擎,我想使用JOGL或类似的库来切换到OpenGL。目前我使用BufferedImage和Java.awt.Graphics渲染我的图形。

private BufferedImage img;
public final int[] pixels = ((DataBufferInt) img.getRaster().getDataBuffer()).getData();

private void render() { 
BufferStrategy bs = this.getBufferStrategy();
Graphics g = bs.getDrawGraphics();
g.drawImage(img, 0, 0, WIDTH, HEIGHT, null);
...
}

有没有一种简单的方法可以将我的项目移植到OpenGL,还是需要从头开始?

2 个答案:

答案 0 :(得分:0)

试试Slick2D。它具有与Java2D非常相似的API,并且是OpenGL加速的。

答案 1 :(得分:0)

没有任何简单的切换,因为在OpenGL中有很多东西需要学习,如Shaders(GLSL),VAO,VBO,IBO,状态更改,缓冲区绑定等。

但不仅如此,你还需要学习和理解矩阵和向量数学,其中矩阵数学肯定是非常困难的。基本上,在正确使用OpenGL之前,需要学习很多数学知识。

  

有没有一种简单的方法可以将我的项目移植到OpenGL,还是需要从头开始?

不是没有,因为Graphics / Graphics2D和OpenGL之间存在巨大差异。在Graphics中,您只需致电drawImage,然后绘制您已加载的BufferedImage。在OpenGL中,您需要加载图像数据,创建句柄,将图像数据绑定到缓冲区,更改影响纹理的一些状态。您不仅需要创建顶点数据并创建它并将其绑定到VAO和/或VBO。然后是渲染,就像在Graphics中你可以简单地调用一个方法一样,在OpenGL中你需要调用多个方法。

最重要的是,如果你真的想学习OpenGL,那么不要只是“去寻找它”,阅读所有关于多重事物并学会了解它们,然后再开始编程。相信我,你会帮自己一个忙!

因此,如果您仍在执行任务,则可以尝试使用LWJGLJOGL

此外,如果您开始学习OpenGL,那么请学习如何使用新方法,而不是旧方法和弃用方法,以下是其中一些glMatrixMode()glLoadIdentity()glTranslate()glRotate()glBegin()glEnd()glVertex()glTexCoord()glNormal()glColor(),当然,当我说{{ 1}}它适用于所有glTranslate()glTranslatef()等等。