我正在用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,还是需要从头开始?
答案 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,那么不要只是“去寻找它”,阅读所有关于多重事物并学会了解它们,然后再开始编程。相信我,你会帮自己一个忙!
因此,如果您仍在执行任务,则可以尝试使用LWJGL或JOGL。
此外,如果您开始学习OpenGL,那么请学习如何使用新方法,而不是旧方法和弃用方法,以下是其中一些glMatrixMode()
,glLoadIdentity()
,glTranslate()
, glRotate()
,glBegin()
,glEnd()
,glVertex()
,glTexCoord()
,glNormal()
,glColor()
,当然,当我说{{ 1}}它适用于所有glTranslate()
,glTranslatef()
等等。