Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Java3D drawing empty white window (not in applet)

Tags:

java

3d

I'm trying to do something interesting using Java 3D, and i'm learning by official tutorials. My problem is: sometimes it shows well without any problem but sometimes window is white and nothing shows until i resize the window. How can i overcome this drawing-update problem?

Here is all code

import com.sun.j3d.utils.geometry.Sphere;
import com.sun.j3d.utils.universe.SimpleUniverse;
import javax.media.j3d.BoundingSphere;
import javax.media.j3d.BranchGroup;
import javax.media.j3d.DirectionalLight;
import javax.media.j3d.Transform3D;
import javax.media.j3d.TransformGroup;
import javax.vecmath.Color3f;
import javax.vecmath.Point3d;
import javax.vecmath.Vector3f;

public class Main {
public Main()
{
    SimpleUniverse simpleUniverse = new SimpleUniverse();
    BranchGroup group = new BranchGroup();
    Sphere sphere = new Sphere(0.5f);

    Color3f light1Color = new Color3f(0.7f,0.7f,5f);
    BoundingSphere bounds = new BoundingSphere(new Point3d(0,0,0),100);
    Vector3f light1Direction = new Vector3f(4.0f,-7.0f,-12.0f);
    DirectionalLight light1 = new DirectionalLight(light1Color,light1Direction);
    light1.setInfluencingBounds(bounds);
    group.addChild(light1);

    Transform3D transform = new Transform3D();
    TransformGroup tg = new TransformGroup();
    Vector3f pos = new Vector3f(0,0,-5);
    transform.setTranslation(pos);
    tg.setTransform(transform);
    tg.addChild(sphere);
    group.addChild(tg);
    simpleUniverse.getViewingPlatform().setNominalViewingTransform();
    simpleUniverse.addBranchGraph(group);
}

public static void main(String[] args) {
    new Main();
}
}
like image 548
user2686299 Avatar asked Sep 30 '22 01:09

user2686299


1 Answers

This is a common problem with heavyweight rendering components, like the Canvas3D that is used internally for Java3D.

You can avoid this by calling

System.setProperty("sun.awt.noerasebackground", "true");

as the first line of cour main method, or by starting your program with

java YourProgram -Dsun.awt.noerasebackground=true

(Websearches for noerasebackground bring further information about the details, but this flag should solve the issue of the white background)

like image 78
Marco13 Avatar answered Oct 04 '22 04:10

Marco13