To zoom (or dolly), you should move just the view transform. That way, you can zoom
your camera views independantly.
josh
>>> [EMAIL PROTECTED] 10/11/01 02:50pm >>>
Hi Britta Krug:
Here is a sample app. that demos mutliple views. Zooming is achieved
by bringing the object closer to the image plate - so in the right view
in the app., you will actually see the object translating to the left
( kinda weird ). This could of course be easily rectified by effecting
zooming using scaling.
Good Luck,
Raj Vaidya
======================================================================
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.media.j3d.*;
import javax.vecmath.*;
import com.sun.j3d.utils.geometry.*;
import com.sun.j3d.utils.image.TextureLoader;
import com.sun.j3d.utils.universe.*;
import com.sun.j3d.utils.picking.behaviors.*;
import com.sun.j3d.utils.picking.*;
import com.sun.j3d.utils.applet.MainFrame;
class CameraView {
protected static final PhysicalBody physBody = new PhysicalBody();
protected static final PhysicalEnvironment physEnv =
new PhysicalEnvironment();
protected BranchGroup rootBG = null;
protected TransformGroup vpTG = null;
protected ViewPlatform viewPlatform = null;
protected View view = null;
protected Canvas3D canvas = null;
public CameraView() {
GraphicsConfigTemplate3D gconfigTempl =
new GraphicsConfigTemplate3D();
GraphicsConfiguration gconfig =
GraphicsEnvironment.getLocalGraphicsEnvironment().
getDefaultScreenDevice().
getBestConfiguration( gconfigTempl );
canvas = new Canvas3D( gconfig );
view = new View();
viewPlatform = new ViewPlatform();
view.setPhysicalBody( physBody );
view.setPhysicalEnvironment( physEnv );
view.attachViewPlatform( viewPlatform );
view.addCanvas3D( canvas );
vpTG = new TransformGroup();
vpTG.setCapability( TransformGroup.ALLOW_TRANSFORM_READ );
vpTG.setCapability( TransformGroup.ALLOW_TRANSFORM_WRITE );
vpTG.addChild( viewPlatform );
rootBG = new BranchGroup();
rootBG.setCapability( BranchGroup.ALLOW_DETACH );
rootBG.addChild(vpTG);
}
public TransformGroup getViewPlatformTransformGroup() {
return this.vpTG;
}
public BranchGroup getRootBG() {
return this.rootBG;
}
public View getView() {
return this.view;
}
public Canvas3D getCanvas3D() {
return this.canvas;
}
}
class UniverseBuilder {
private Locale locale = null;
private CameraView riteCamera = null;
private CameraView mainCamera = null;
public UniverseBuilder() {}
public void addCameras() {
VirtualUniverse universe = new VirtualUniverse();
locale = new Locale( universe );
riteCamera = new CameraView();
TransformGroup vpTG = riteCamera.getViewPlatformTransformGroup();
Transform3D xform = new Transform3D();
Vector3f vec = new Vector3f( 4.0f, 0.0f, 0.0f );
xform.set( vec );
Transform3D xform2 = new Transform3D();
xform2.rotY( Math.PI / 2.0 );
xform.mul( xform2 );
vpTG.setTransform( xform );
View view = riteCamera.getView();
view.setProjectionPolicy( View.PARALLEL_PROJECTION );
mainCamera = new CameraView();
vpTG = mainCamera.getViewPlatformTransformGroup();
xform = new Transform3D();
vec = new Vector3f( 0.0f, 0.0f, 4.0f );
xform.set( vec );
vpTG.setTransform( xform );
view = mainCamera.getView();
view.setProjectionPolicy( View.PARALLEL_PROJECTION );
locale.addBranchGraph( riteCamera.getRootBG() );
locale.addBranchGraph( mainCamera.getRootBG() );
}
public void addScene() {
ModelScene scene = new ModelScene();
BranchGroup sceneBG = scene.createSceneGraph();
Canvas3D canvas = riteCamera.getCanvas3D();
addMouseBehs( sceneBG, canvas );
canvas = mainCamera.getCanvas3D();
addMouseBehs( sceneBG, canvas );
sceneBG.compile();
locale.addBranchGraph( sceneBG );
}
public void addMouseBehs(
BranchGroup rootBG,
Canvas3D canvas
) {
BoundingSphere bounds =
new BoundingSphere(new Point3d(0.0,0.0,0.0), 100.0);
PickRotateBehavior rotbeh =
new PickRotateBehavior( rootBG, canvas, bounds);
rootBG.addChild( rotbeh );
PickZoomBehavior zoombeh =
new PickZoomBehavior( rootBG, canvas, bounds );
rootBG.addChild( zoombeh );
PickTranslateBehavior transbeh =
new PickTranslateBehavior( rootBG, canvas, bounds );
rootBG.addChild( transbeh );
}
public CameraView getRiteCamera() { return this.riteCamera; }
public CameraView getMainCamera() { return this.mainCamera; }
}
class ModelScene {
public BranchGroup createSceneGraph() {
BranchGroup objRoot = new BranchGroup();
TransformGroup objTrans = new TransformGroup();
objTrans.setCapability( TransformGroup.ALLOW_TRANSFORM_WRITE );
objTrans.setCapability( TransformGroup.ALLOW_TRANSFORM_READ );
objTrans.setCapability( TransformGroup.ENABLE_PICK_REPORTING );
objRoot.addChild( objTrans );
objTrans.addChild( new ColorCube(0.4) );
return objRoot;
}
}
public class MultipleViews {
public static void main(String args[]) {
JFrame frame = new JFrame("MultipleViews");
frame.addWindowListener( new WindowAdapter() {
public void windowClosing( WindowEvent e ) {
System.exit(0);
}
});
UniverseBuilder uniBuilder = new UniverseBuilder();
uniBuilder.addCameras();
uniBuilder.addScene();
JPanel ritePanel = new JPanel();
ritePanel.setLayout( new BorderLayout() );
JPanel mainPanel = new JPanel();
mainPanel.setLayout( new BorderLayout() );
CameraView riteCamera = uniBuilder.getRiteCamera();
CameraView mainCamera = uniBuilder.getMainCamera();
Canvas3D riteCanvas = riteCamera.getCanvas3D();
Canvas3D mainCanvas = mainCamera.getCanvas3D();
riteCanvas.setSize( new Dimension( 300, 400 ) );
mainCanvas.setSize( new Dimension( 300, 400 ) );
ritePanel.add( riteCanvas, BorderLayout.CENTER );
mainPanel.add( mainCanvas, BorderLayout.CENTER );
JPanel mPanel = new JPanel();
mPanel.setLayout( new GridLayout( 0, 2, 2, 2 ) );
mPanel.add( mainPanel );
mPanel.add( ritePanel );
frame.getContentPane().add( mPanel );
// frame.setSize( 600, 400 );
frame.pack();
frame.setVisible( true );
}
}
===========================================================================
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".
==========================================================================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".