2015-03-31 49 views
0

我正在Raspberrypi(Raspbian)的Processing上编写一个程序,导入一个3D STL image文件。它在微软(windows7)& Linux(Ubuntu)平台上完美工作,但我正努力在Raspberrypi(Raspbian)平台上运行相同的程序。java.lang.NoClassDefFoundError:javax/media/opengl/GLException at processing.opengl.PGraphicsOpenGL

我得到以下错误在size(600,600,P3D)当我运行在树莓派这个程序...

Coding

import toxi.geom.*; 
import toxi.geom.mesh.*; 
import toxi.processing.*; 
TriangleMesh mesh; 
ToxiclibsSupport gfx; 
void setup() { 
    size(600,600,P3D); 
    mesh=(TriangleMesh)new STLReader().loadBinary(sketchPath("check.stl"),STLReader.TRIANGLEMESH); 
    gfx=new ToxiclibsSupport(this); 
} 

void draw() { 
    background(51); 
    lights(); 
    translate(width/2,height/2,0); 
    rotateX(mouseY*0.01); 
    rotateY(mouseX*0.01); 
    gfx.origin(new Vec3D(),200); 
    noStroke(); 
    gfx.mesh(mesh,false,10); 
} 

Error

java.lang.NoClassDefFoundError: javax/media/opengl/GLException 
    at processing.opengl.PGraphicsOpenGL.createPGL(PGraphicsOpenGL.java:1744) 
    at processing.opengl.PGraphicsOpenGL.<init>(PGraphicsOpenGL.java:518) 
    at processing.opengl.PGraphics3D.<init>(PGraphics3D.java:37) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:526) 
    at processing.core.PApplet.makeGraphics(PApplet.java:1919) 
    at processing.core.PApplet.size(PApplet.java:1771) 
    at processing.core.PApplet.size(PApplet.java:1742) 
    at project5.setup(project5.java:27) 
    at processing.core.PApplet.handleDraw(PApplet.java:2361) 
    at processing.core.PGraphicsJava2D.requestDraw(PGraphicsJava2D.java:240) 
    at processing.core.PApplet.run(PApplet.java:2256) 
    at java.lang.Thread.run(Thread.java:724) 
Caused by: java.lang.ClassNotFoundException: javax.media.opengl.GLException 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366) 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
    ... 15 more 
+0

是否安装上Raspian什么版本的处理(1.5.1,2.X等?)。你有没有尝试将渲染器设置为OPENGL('''size(600,600,P3D);''')?没有测试,我的猜测是有毒的libs'ToxiclibsSupport渲染器类依赖于OpenGL渲染器和更新版本的处理我认为P3D和OPENGL渲染器是合并的。试用1.5.1,希望它能起作用。如果不是,那还是不错的。如果你注释掉ToxiclibsSupport部分,假设代码将运行,如果是这种情况,也许你可以在没有它的情况下渲染(只需使用普通处理调用)。 – 2015-04-01 08:14:28

+0

我在'Processing-2.2.1'上使用了这个命令'OPENGL(size(600,600,P3D);)',但是它给出了另一个错误'函数OPENGL(void)不存在。“ – 2015-04-01 13:16:56

+0

对不起,我的意思是使用它这个:'''大小(600,600,OPENGL);''。尽管如此,它仍然可能会得到低级别的OpenGL错误。你可以尝试运行例子>演示>图形> LowLevelGL,并指出应用程序是否可以运行(如果没有,你会得到什么错误)? – 2015-04-01 13:26:12

回答

1

与处理的问题是,目前还没有3D实现,因为Raspberry PI需要一个OPENGL_ES渲染器。 目前,您只能以2D渲染(例如size(200,200,JAVA2D);)。

实际上有一个OPENGL_ES renderer in Processing,但它适用于Android模式,它依赖于android SDK。据我所知,目前没有任何Processing OPENGL_ES渲染器可以在Raspberry PI上使用(如果有人知道其中的一个,请告诉我)。从理论上讲,应该有可能从Android PGraphics类中去掉Android依赖关系,但感觉像是一个冒险的举动(特别是如果你有严格的截止日期)。要开始,你可能想看看运行在java中的EGL Rasperry Pi。

在这种情况下,我会建议使用OpenFrameworks而不是显示STL文件。我修改了OpenFramworks的现有STL插件并对其进行了测试:Raspberry PI的性能非常好。虽然它是C++,但该项目的灵感来自Processing,许多功能听起来都非常熟悉。

一旦您设置OpenFramworks,您可以下载ofxSTLModel并编译示例(我已经更新它在Raspberry PI上运行)。按任意键切换线框视图。

ofxSTLModel example preview

更新 现在有一个实验Raspian图像包括处理3 3D支持。退房this thread

Processing 3D on Raspberry Pi