2

我正在使用 java3d 进行渲染,使用 java 编写的 3d 地球应用程序。我有一个 Windows 安装程序,它基本上将文件从开发快照复制到程序文件目录。它在开发快照中运行良好,但是在安装后运行时它会这样做:

Java 3D ERROR : OpenGL 1.2 or better is required (GL_VERSION=1.1)  
javax.media.j3d.IllegalRenderingStateException: GL_VERSION  
    at javax.media.j3d.NativePipeline.createNewContext(Native Method)  
    at javax.media.j3d.NativePipeline.createNewContext(NativePipeline.java:2736)  
    at javax.media.j3d.Canvas3D.createNewContext(Canvas3D.java:4895)  
    at javax.media.j3d.Canvas3D.createNewContext(Canvas3D.java:2421)  
    at javax.media.j3d.Renderer.doWork(Renderer.java:895)  
    at javax.media.j3d.J3dThread.run(J3dThread.java:256)  

我已经比较了开发目录中的所有库和 jar,文件都完全相同,没有一个丢失。这是最奇怪的事情。我已经更新了我的图形驱动程序(尽管它们显然已经足够了,因为从开发快照中运行良好)。我编写了一个简单的 java3d 应用程序,它能够制作 Canvas3D 并向其添加 ColorCube。它运行良好。Ps 我们的开发快照包括所有的 dll、jar 和运行的 jre。我们记录所有库和 jvm 版本,它们在从开发快照和已安装应用程序生成的日志中完全相同。我们使用 java.exe 的显式路径 (..\jre\bin\java.exe) 运行,因此 PATH 变量不起作用。

我正在寻找调试这个的想法。我想编写一个简单的 java 应用程序来打印所有 GL 属性,尤其是 GL_VERSION,以尝试展示两种设置之间的一些可量化的差异。java3d 文档没有涵盖这一点,所有互联网搜索 GL_VERSION 问题只是告诉您更新驱动程序。

哦,我有 Nvidia Quadro FX 3800 卡。实际上有两个。

总之...
Q1:您如何为您的 java3d 应用程序打印 GL_VERSION?
Q2:这到底是怎么回事?

4

2 回答 2

0

检查 GL_VERSION 在 Canvas3D 上使用 queryProperties() 方法。

String glVersion = (String)getCanvas3D().queryProperties().get("native.version");

但是这个错误并没有显示准​​确的 OpenGL 版本,使用上面的代码你可能会看到你的 GL_VERSION 不像堆栈跟踪中的 1.1(我在安装 OpenGL 1.5 时遇到了同样的错误)。

于 2012-03-02T13:29:28.913 回答
0

在输入了我的两张显卡之后,我开始思考我最近是如何从使用四台显示器切换到三台的,这样我就可以将第四台用于我的新笔记本电脑了。我们的应用程序在我的主文件夹中保存了一些属性,这些属性使我们的应用程序在第四个现在不存在的监视器上启动。似乎 java3d 在不存在的屏幕空间中没有发现对 opengl 的充分支持,并抛出了上述异常。使用有效的屏幕坐标启动应用程序解决了这个问题。

于 2009-12-01T18:10:04.307 回答