/*
* Project Info: http://jcae.sourceforge.net
*
* This program is free software; you can redistribute it and/or modify it under
* the terms of the GNU Lesser General Public License as published by the Free
* Software Foundation; either version 2.1 of the License, or (at your option)
* any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
* details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
*
* (C) Copyright 2008, by EADS France
*/
package org.jcae.viewer3d.test;
import com.sun.j3d.utils.applet.MainFrame;
import com.sun.j3d.utils.geometry.ColorCube;
import com.sun.j3d.utils.universe.SimpleUniverse;
import java.applet.Applet;
import java.awt.BorderLayout;
import java.awt.GraphicsConfiguration;
import java.awt.Point;
import javax.media.j3d.BranchGroup;
import javax.media.j3d.Canvas3D;
import javax.media.j3d.DepthComponent;
import javax.media.j3d.DepthComponentFloat;
import javax.media.j3d.GraphicsContext3D;
import javax.media.j3d.Raster;
import javax.media.j3d.Transform3D;
import javax.media.j3d.TransformGroup;
import javax.vecmath.Point3f;
/**
* This is the program send to the java3d issue.
* @author Julian Ibarz
*/
public class RasterBugReport extends Applet {
public BranchGroup createSceneGraph() {
// Create the root of the branch graph
BranchGroup objRoot = new BranchGroup();
// Create a Transform3D that is a rotation about the
// Y-axis. Add this to a TransformGroup and add the
// TransformGroup to the root of the subgraph.
Transform3D rotateY = new Transform3D();
rotateY.rotY(.6);
TransformGroup objTrans =
new TransformGroup(rotateY);
objRoot.addChild(objTrans);
// Create a simple Shape3D node; add it to the scene graph.
objTrans.addChild(new ColorCube(0.4));
// Have Java 3D perform optimizations on this scene graph.
objRoot.compile();
return objRoot;
}
public RasterBugReport() {
setLayout(new BorderLayout());
GraphicsConfiguration config =
SimpleUniverse.getPreferredConfiguration();
Canvas3D c = new Canvas3D(config) {
@Override
public void postSwap()
{
super.postSwap();
int width = getWidth() / 2;
int height = getHeight() / 2;
DepthComponentFloat depthComponent = new DepthComponentFloat(width, height);
Point depthCapturePosition = new Point();
depthCapturePosition.x = width;
depthCapturePosition.y = height;
GraphicsContext3D ctx = getGraphicsContext3D();
depthComponent.setCapability(DepthComponent.ALLOW_DATA_READ);
Raster ras = new Raster(new Point3f(0.0f, 0.0f, 0.0f),
Raster.RASTER_DEPTH, depthCapturePosition.x, depthCapturePosition.y, depthComponent.getWidth(), depthComponent.getHeight(), null,
depthComponent);
ras.setCapability(Raster.ALLOW_DEPTH_COMPONENT_READ);
ras.setCapability(Raster.ALLOW_IMAGE_READ);
ras.setCapability(Raster.ALLOW_TYPE_READ);
ctx.readRaster(ras);
}
};
add("Center", c);
SimpleUniverse u = new SimpleUniverse(c);
BranchGroup scene = createSceneGraph();
// This will move the ViewPlatform back a bit so the
// objects in the scene can be viewed.
u.getViewingPlatform().setNominalViewingTransform();
u.addBranchGraph(scene);
}
//
// The following allows HelloUniverse to be run as an application
// as well as an applet
//
public static void main(String[] args) {
new MainFrame(new RasterBugReport(), 256, 256);
}
}