First of all sorry if i'm asking a newbie question, but i'm a java3d
beginner.
I need to load a vrml file (eg: a cube), then to translate and rescale
it. I need to do a non-unform rescaling, so i've tried this:
import java.applet.Applet;
import java.net.URL;
import java.net.MalformedURLException;
import java.awt.BorderLayout;
import java.awt.Frame;
import java.awt.event.*;
import java.awt.GraphicsConfiguration;
import com.sun.j3d.utils.applet.MainFrame;
import com.sun.j3d.utils.geometry.ColorCube;
import com.sun.j3d.utils.universe.*;
import javax.media.j3d.*;
import javax.vecmath.*;
import com.sun.j3d.loaders.vrml97.VrmlLoader;
import com.sun.j3d.loaders.Scene;
import java.util.Hashtable;
[...]
private BranchGroup loadVrmlFile( String location ) {
BranchGroup sceneGroup = null;
Scene scene = null;
VrmlLoader loader = new VrmlLoader( );
try {
URL loadUrl = new URL( location );
try {
// load the scene
scene = loader.load( new URL( location ) );
}
catch ( Exception e ) {
System.out.println( "Exception loading URL:" + e );
e.printStackTrace( );
}
}
catch ( MalformedURLException badUrl ) {
// location may be a path name
try {
// load the scene
scene = loader.load( location );
}
catch ( Exception e ) {
System.out.println( "Exception loading file from path:"
+ e );
e.printStackTrace( );
}
}
if (scene != null) {
// get the scene group
sceneGroup = scene.getSceneGroup( );
}
return sceneGroup;
}
public BranchGroup createSceneGraph() {
// Create the root of the branch graph
BranchGroup objRoot = new BranchGroup();
Transform3D rotate2 = new Transform3D();
Vector3d v= new Vector3d();
v.x = .5d;
v.y = .5d;
v.z = .3d;
rotate2.rotZ(Math.PI/4.0d);
rotate2.setScale(v);
TransformGroup objRotate2 = new TransformGroup(rotate2);
objRoot.addChild(objRotate2);
BranchGroup sceneRoot = loadVrmlFile( "vrml.wrl" );
objRotate2.addChild(sceneRoot);
return objRoot;
}
public DueCubi() {
setLayout(new BorderLayout());
GraphicsConfiguration config =
SimpleUniverse.getPreferredConfiguration();
Canvas3D canvas3D = new Canvas3D(config);
add("Center", canvas3D);
BranchGroup scene = createSceneGraph();
SimpleUniverse simpleU = new SimpleUniverse(canvas3D);
simpleU.getViewingPlatform().setNominalViewingTransform();
simpleU.addBranchGraph(scene);
}
now, when i launch DueCubi(), i obtain this exception:
javax.media.j3d.BadTransformException: non-congruent transform above
ViewPlatform
at
javax.media.j3d.TransformGroupRetained.setLive(TransformGroupRetained.java:608)
at
javax.media.j3d.GroupRetained.childDoSetLive(GroupRetained.java:2125)
at javax.media.j3d.GroupRetained.doSetLive(GroupRetained.java:2180)
at
javax.media.j3d.BranchGroupRetained.setLive(BranchGroupRetained.java:160)
at javax.media.j3d.Locale.doAddBranchGraph(Locale.java:204)
at javax.media.j3d.Locale.addBranchGraph(Locale.java:163)
at
com.sun.j3d.utils.universe.SimpleUniverse.addBranchGraph(SimpleUniverse.java:356)
at DueCubi.<init>(DueCubi.java:141)
at DueCubi.main(DueCubi.java:209)
and the only way to fix it is to use a uniform scale factor (like 0.5,
0.5, 0.5).
I've tried using affine transformation and other tricks but i always
obtain this error. I've also tried to resize a ColorCube object and all
goes fine, so it seems that isn't possible to do an anamorphic resize of
a vrml mesh, and i need it!
Do you have any suggestion? Thanks a lot!
===========================================================================
To unsubscribe, send email to [EMAIL PROTECTED] and include in the body
of the message "signoff JAVA3D-INTEREST". For general help, send email to
[EMAIL PROTECTED] and include in the body of the message "help".