import java.applet.Applet;
import java.awt.BorderLayout;
import java.awt.event.*;
import java.awt.GraphicsConfiguration;
import com.sun.j3d.utils.applet.MainFrame;
import com.sun.j3d.utils.universe.*;
import javax.media.j3d.*;
import javax.vecmath.*;
import java.awt.image.BufferedImage;
import java.awt.*;

public class TransBug extends Applet {
    
    public boolean useTransparency = true;
    private SimpleUniverse u = null;
    
    public BranchGroup createSceneGraph() {
        BranchGroup objRoot = new BranchGroup();
        objRoot.addChild( createShape() );
        objRoot.compile();
        return objRoot;
    }

    public TransBug() {
    }

    public void init() {
        setLayout(new BorderLayout());
        GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration();

        Canvas3D c = new Canvas3D(config);
        add("Center", c);
        BranchGroup scene = createSceneGraph();
        u = new SimpleUniverse(c);
        u.getViewingPlatform().setNominalViewingTransform();
        u.addBranchGraph(scene);
    }

    public void destroy() {
        u.removeAllLocales();
    }
    
    Shape3D createShape(){
        int w = 10;
        int h = 20;
        BufferedImage bi = new BufferedImage( w, h, BufferedImage.TYPE_4BYTE_ABGR );
        Graphics g = bi.getGraphics();
        g.setColor( new Color( 1, 1, 0, .5f ) );
        g.fillRect( 0, 0, w, h );
        ImageComponent2D imcomp = new ImageComponent2D( ImageComponent2D.FORMAT_RGBA, bi );
        Raster raster = new Raster();
        raster.setSize( w, h );
        raster.setImage( imcomp );
        Appearance app = new Appearance();
        if( useTransparency ){
            TransparencyAttributes ta = new TransparencyAttributes( TransparencyAttributes.NICEST, 1 );
            app.setTransparencyAttributes( ta );
        }
        Shape3D shape = new Shape3D( raster, app );
        return shape;
    }
    
    public static void main(String[] args) {
        new MainFrame(new TransBug(), 256, 256);
    }
}

