by Anonymous » 27 Mar 2025, 15:14
Ich versuche, das gleiche 3D -Objekt dynamisch zu rendern. Wenn ich die dafür verantwortliche Methode ausführe, wird das 3D -Objekt nur einmal auf dem Bildschirm gerendert. Wenn ich die Methode wieder ausführe, gibt es mir einen Fehler. Ich benutze die Java3d -API. Ich beabsichtige, dasselbe Objekt mehrmals zu rendern. PrettyPrint-Override ">
Code: Select all
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();
}
}
}
Ich versuche, das gleiche 3D -Objekt dynamisch zu rendern. Wenn ich die dafür verantwortliche Methode ausführe, wird das 3D -Objekt nur einmal auf dem Bildschirm gerendert. Wenn ich die Methode wieder ausführe, gibt es mir einen Fehler. Ich benutze die Java3d -API. Ich beabsichtige, dasselbe Objekt mehrmals zu rendern. PrettyPrint-Override ">[code]
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();
}
}
}
[/code]