Java3D动态重复渲染同一3D模型时触发RestrictedAccessException的问题求助
Java3D动态重复渲染同一3D模型时触发RestrictedAccessException的问题求助
我在使用Java3D API开发时遇到了一个棘手的问题:我想要动态重复渲染同一个3D对象,第一次执行渲染方法时模型能正常显示在屏幕上,但第二次调用这个方法就直接抛出了RestrictedAccessException异常。
具体的错误信息如下:
Exception in thread "AWT-EventQueue-0" javax.media.j3d.RestrictedAccessException: Cannot modify capability bits on a live or compiled object
以下是我当前的实现代码:
class graphics_engine //extends javax.swing.JComponent { public static com.sun.j3d.utils.geometry.NormalGenerator normal_generator = new com.sun.j3d.utils.geometry.NormalGenerator(); public static com.sun.j3d.utils.geometry.Stripifier strip_fire = new com.sun.j3d.utils.geometry.Stripifier(); public static java.util.ArrayList < javax.vecmath.Point3f[] > model_vertices = new java.util.ArrayList < javax.vecmath.Point3f[] >(); public static BranchGroup branch_group = new BranchGroup(); public static void geometry_info() { model_vertices.add( new javax.vecmath.Point3f[] { new javax.vecmath.Point3f(-10, 30, -60), new javax.vecmath.Point3f(-13, 63, 0), new javax.vecmath.Point3f(-3, 3, 0), new javax.vecmath.Point3f(5, 3, 0), new javax.vecmath.Point3f(5, 7, 0), new javax.vecmath.Point3f(-165, 762, 450), new javax.vecmath.Point3f(45, -654, 550), new javax.vecmath.Point3f(-7657, -4440, -5550), new javax.vecmath.Point3f(-765, 660, -430), new javax.vecmath.Point3f(-4563, 561, -4560) }); //int model_numbers = graphics_engine.model_vertices.size(); com.sun.j3d.utils.geometry.GeometryInfo geometry_info = new com.sun.j3d.utils.geometry.GeometryInfo( com.sun.j3d.utils.geometry.GeometryInfo.POLYGON_ARRAY ); com.sun.j3d.utils.geometry.Triangulator triangulator[] = new com.sun.j3d.utils.geometry.Triangulator[graphics_engine.model_vertices.size()]; TransformGroup transform_group[] = new TransformGroup[graphics_engine.model_vertices.size()]; Shape3D shapes_3D[] = new Shape3D[graphics_engine.model_vertices.size()]; try { for(int i = 0; i < graphics_engine.model_vertices.size(); i++) { triangulator[i] = new com.sun.j3d.utils.geometry.Triangulator(); transform_group[i] = new TransformGroup(); transform_group[i].setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); transform_group[i].setCapability(TransformGroup.ALLOW_CHILDREN_EXTEND); transform_group[i].setCapability(Group.ALLOW_CHILDREN_EXTEND); shapes_3D[i] = new Shape3D(); shapes_3D[i].setCapability(Shape3D.ALLOW_GEOMETRY_WRITE); shapes_3D[i].setCapability(Group.ALLOW_CHILDREN_EXTEND); transform_group[i].setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); branch_group.setCapability(Group.ALLOW_CHILDREN_EXTEND); int[] StripCounts = {5,5}; int[] countourCountArray = {StripCounts.length}; geometry_info.setCoordinates(graphics_engine.model_vertices.get(i)); geometry_info.setStripCounts(StripCounts); geometry_info.setContourCounts(countourCountArray); triangulator[i].triangulate(geometry_info); graphics_engine.normal_generator.generateNormals(geometry_info); graphics_engine.strip_fire.stripify(geometry_info); shapes_3D[i].setGeometry(geometry_info.getGeometryArray()); transform_group[i].addChild(shapes_3D[i]); branch_group.addChild(transform_group[i]); gui_components.objecto_branch_grupo.addChild(graphics_engine.branch_group); } } catch(java.lang.NullPointerException execcao) { execcao.printStackTrace(); } } }
我已经尝试给相关的Group和Shape3D设置了Capability权限,但还是没能解决这个问题,有没有熟悉Java3D的朋友能帮我分析一下问题出在哪里,以及该怎么修改才能实现重复渲染同一个3D模型的需求呢?
备注:内容来源于stack exchange,提问作者faztudo pedro
相关产品推荐
相关产品推荐

