在尝试使用JOGL的教程时,我在输入这部分代码时遇到了麻烦:
@Override
public void display(GLAutoDrawable glad) {
GL gl = glad.getGL();
gl.glClear(GL.GL_COLOR_BUFFER_BIT);
gl.glBegin(GL.GL_TRIANGLES);
这不能编译,因为 glBegin 不是 GL 中的方法,即使在线教程以这种方式使用它。通过在JOGL javadoc中挖掘,我发现我可以通过这样做来获得教程:
GL2 gl = (GL2) glad.getGL();
然后所有的方法都在那里。我的问题是:
答案 0 :(得分:2)
请查看我们的Java documentation和our overview of OpenGL evolution。您获得的GL界面取决于您使用的GLProfile和您的机器支持的GL界面。它不依赖于您的操作系统,而是取决于您的图形卡支持的内容。所有方法都在JOGL 1中的GL中,而在JOGL 2中有几个GL接口和实现.user3256930的答案是不完整的。台式机可以支持OpenGL(向后和向前兼容配置文件)和OpenGL ES。然后,你可以获得至少3个GL实现,它取决于你的配置文件,你可以调用GLProfile.getMaxFixedFunc(boolean),GLProfile.getMaxProgrammable(boolean),getDefault(),...
由于glBegin仅在固定管道中而不在OpenGL ES中,因此只有当您获得的GL接口是GL2或其他扩展它的接口时才会得到它,例如GL4bc(bc =向后兼容)。
请在our official forum上发布您对JOGL的具体问题。
答案 1 :(得分:0)
您的问题与Can't find GL.glColor3f in JOGL?非常相似。你之所以无法在没有强制转换为GL2的情况下使用glBegin,是因为在OpenGL 3中不推荐使用glBegin(以及许多其他函数)。这就是所谓的立即模式,你可以在glBegin和glEnd之间指定顶点。在OpenGL 3及更高版本中,绘制图元的方法是将顶点存储在缓冲区中并使用glDrawArrays或glDrawElements绘图。您将在不同平台和不同计算机上获得不同版本的OpenGL。这取决于该计算机支持的OpenGL版本。较新的具有较新显卡的计算机将能够支持最新版本的OpenGL,而较旧的计算机可能会停留在较旧的OpenGL版本上。