Java/3D/Clip

Материал из Java эксперт
Перейти к: навигация, поиск

Model Clip

   <source lang="java">

/*

*  @(#)ModelClipTest2.java 1.10 02/10/21 13:45:04
*
* Copyright (c) 1996-2002 Sun Microsystems, Inc. All Rights Reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* - Redistributions of source code must retain the above copyright
*   notice, this list of conditions and the following disclaimer.
*
* - Redistribution in binary form must reproduce the above copyright
*   notice, this list of conditions and the following disclaimer in
*   the documentation and/or other materials provided with the
*   distribution.
*
* Neither the name of Sun Microsystems, Inc. or the names of
* contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* This software is provided "AS IS," without a warranty of any
* kind. ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND
* WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY
* EXCLUDED. SUN AND ITS LICENSORS SHALL NOT BE LIABLE FOR ANY DAMAGES
* SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
* DISTRIBUTING THE SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN
* OR ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR
* FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR
* PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF
* LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE SOFTWARE,
* EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
*
* You acknowledge that Software is not designed,licensed or intended
* for use in the design, construction, operation or maintenance of
* any nuclear facility.
*/

import java.applet.Applet; import java.awt.BorderLayout; import java.awt.GraphicsConfiguration; import javax.media.j3d.AmbientLight; import javax.media.j3d.Appearance; import javax.media.j3d.BoundingSphere; import javax.media.j3d.BranchGroup; import javax.media.j3d.Canvas3D; import javax.media.j3d.DirectionalLight; import javax.media.j3d.Material; import javax.media.j3d.ModelClip; import javax.media.j3d.PolygonAttributes; import javax.media.j3d.Transform3D; import javax.media.j3d.TransformGroup; import javax.vecmath.AxisAngle4f; import javax.vecmath.Color3f; import javax.vecmath.Point3d; import javax.vecmath.Vector3f; import javax.vecmath.Vector4d; import com.sun.j3d.utils.applet.MainFrame; import com.sun.j3d.utils.behaviors.mouse.MouseRotate; import com.sun.j3d.utils.behaviors.mouse.MouseZoom; import com.sun.j3d.utils.geometry.Box; import com.sun.j3d.utils.geometry.Cylinder; import com.sun.j3d.utils.universe.SimpleUniverse; /**

* ModelClipTest2 draws a cylinder and creates two clip planes to see the
* interior of the cylinder. It also has a behavior to move the clip planes.
*/

public class ModelClipTest2 extends Applet {

 private SimpleUniverse u;
 public BranchGroup createSceneGraph() {
   // Create the root of the branch graph
   BranchGroup objRoot = new BranchGroup();
   // Create a Transformgroup to scale all objects so they
   // appear in the scene.
   TransformGroup objScale = new TransformGroup();
   Transform3D t3d = new Transform3D();
   t3d.setScale(0.4);
   objScale.setTransform(t3d);
   objRoot.addChild(objScale);
   // Create lights
   BoundingSphere bounds = new BoundingSphere(new Point3d(0.0, 0.0, 0.0),
       100.0);
   //Shine it with two colored lights.
   Color3f lColor0 = new Color3f(1.0f, 1.0f, 1.0f);
   Color3f lColor1 = new Color3f(0.5f, 0.0f, 0.5f);
   Color3f lColor2 = new Color3f(0.7f, 0.7f, 0.0f);
   Vector3f lDir1 = new Vector3f(-1.0f, -1.0f, 1.0f);
   Vector3f lDir2 = new Vector3f(0.0f, 0.0f, -1.0f);
   AmbientLight lgt0 = new AmbientLight(true, lColor2);
   DirectionalLight lgt1 = new DirectionalLight(lColor1, lDir1);
   DirectionalLight lgt2 = new DirectionalLight(lColor2, lDir2);
   lgt0.setInfluencingBounds(bounds);
   lgt1.setInfluencingBounds(bounds);
   lgt2.setInfluencingBounds(bounds);
   objScale.addChild(lgt0);
   objScale.addChild(lgt1);
   objScale.addChild(lgt2);
   // Create a Transformgroup for the geometry
   TransformGroup objRot = new TransformGroup();
   Transform3D t3d1 = new Transform3D();
   AxisAngle4f rot1 = new AxisAngle4f(0.0f, 1.0f, 0.0f, 45.0f);
   t3d1.setRotation(rot1);
   objRot.setTransform(t3d1);
   objScale.addChild(objRot);
   //Create a cylinder
   PolygonAttributes attr = new PolygonAttributes();
   attr.setCullFace(PolygonAttributes.CULL_NONE);
   Appearance ap = new Appearance();
   Material mat = new Material();
   mat.setLightingEnable(true);
   ap.setMaterial(mat);
   ap.setPolygonAttributes(attr);
   Cylinder CylinderObj = new Cylinder(0.5f, 2.2f, ap);
   objRot.addChild(CylinderObj);
   //Create a box
   Box BoxObj = new Box(0.8f, 0.8f, 0.8f, ap);
   objRot.addChild(BoxObj);
   // This Transformgroup is used by the mouse manipulators to
   // move the model clip planes.
   TransformGroup objTrans = new TransformGroup();
   objTrans.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
   objTrans.setCapability(TransformGroup.ALLOW_TRANSFORM_READ);
   objRot.addChild(objTrans);
   // Create the rotate behavior node
   MouseRotate behavior = new MouseRotate(objTrans);
   objTrans.addChild(behavior);
   behavior.setSchedulingBounds(bounds);
   // Create the zoom behavior node
   MouseZoom behavior2 = new MouseZoom(objTrans);
   objTrans.addChild(behavior2);
   behavior2.setSchedulingBounds(bounds);
   //Create Model Clip
   ModelClip mc = new ModelClip();
   boolean enables[] = { false, false, false, false, false, false };
   Vector4d eqn = new Vector4d(0.0, 1.0, 1.0, 0.0);
   mc.setEnables(enables);
   mc.setPlane(1, eqn);
   mc.setEnable(1, true);
   mc.setInfluencingBounds(bounds);
   objTrans.addChild(mc);
   // Let Java 3D perform optimizations on this scene graph.
   objRoot.rupile();
   return objRoot;
 }
 public ModelClipTest2() {
 }
 public void init() {
   setLayout(new BorderLayout());
   GraphicsConfiguration config = SimpleUniverse
       .getPreferredConfiguration();
   Canvas3D c = new Canvas3D(config);
   add("Center", c);
   // Create a simple scene and attach it to the virtual universe
   BranchGroup scene = createSceneGraph();
   u = new SimpleUniverse(c);
   // This will move the ViewPlatform back a bit so the
   // objects in the scene can be viewed.
   u.getViewingPlatform().setNominalViewingTransform();
   u.addBranchGraph(scene);
 }
 public void destroy() {
   u.cleanup();
 }
 public static void main(String argv[]) {
   BranchGroup group;
   new MainFrame(new ModelClipTest2(), 500, 500);
 }

}


      </source>
   
  
 
  



Model Clip Test

   <source lang="java">

/*

*  @(#)ModelClipTest.java 1.10 02/10/21 13:45:01
*
* Copyright (c) 1996-2002 Sun Microsystems, Inc. All Rights Reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* - Redistributions of source code must retain the above copyright
*   notice, this list of conditions and the following disclaimer.
*
* - Redistribution in binary form must reproduce the above copyright
*   notice, this list of conditions and the following disclaimer in
*   the documentation and/or other materials provided with the
*   distribution.
*
* Neither the name of Sun Microsystems, Inc. or the names of
* contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* This software is provided "AS IS," without a warranty of any
* kind. ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND
* WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY
* EXCLUDED. SUN AND ITS LICENSORS SHALL NOT BE LIABLE FOR ANY DAMAGES
* SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
* DISTRIBUTING THE SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN
* OR ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR
* FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR
* PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF
* LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE SOFTWARE,
* EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
*
* You acknowledge that Software is not designed,licensed or intended
* for use in the design, construction, operation or maintenance of
* any nuclear facility.
*/

import java.applet.Applet; import java.awt.BorderLayout; import java.awt.GraphicsConfiguration; import javax.media.j3d.Appearance; import javax.media.j3d.BoundingSphere; import javax.media.j3d.BranchGroup; import javax.media.j3d.Canvas3D; import javax.media.j3d.DirectionalLight; import javax.media.j3d.Material; import javax.media.j3d.ModelClip; import javax.media.j3d.PolygonAttributes; import javax.media.j3d.Transform3D; import javax.media.j3d.TransformGroup; import javax.vecmath.Color3f; import javax.vecmath.Point3d; import javax.vecmath.Vector3f; import javax.vecmath.Vector4d; import com.sun.j3d.utils.applet.MainFrame; import com.sun.j3d.utils.behaviors.mouse.MouseRotate; import com.sun.j3d.utils.behaviors.mouse.MouseZoom; import com.sun.j3d.utils.geometry.Cylinder; import com.sun.j3d.utils.universe.SimpleUniverse; /**

* ModelClipTest draws a cylinder and creates two clip planes to see the
* interior of the cylinder.
*/

public class ModelClipTest extends Applet {

 private SimpleUniverse u = null;
 public BranchGroup createSceneGraph() {
   // Create the root of the branch graph
   BranchGroup objRoot = new BranchGroup();
   BoundingSphere bounds = new BoundingSphere(new Point3d(0.0, 0.0, 0.0),
       100.0);
   // Create a Transformgroup to scale all objects so they
   // appear in the scene.
   TransformGroup objScale = new TransformGroup();
   Transform3D t3d = new Transform3D();
   t3d.setScale(0.4);
   objScale.setTransform(t3d);
   objRoot.addChild(objScale);
   // This Transformgroup is used by the mouse manipulators to
   // move the CYlinder.
   TransformGroup objTrans = new TransformGroup();
   objTrans.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
   objTrans.setCapability(TransformGroup.ALLOW_TRANSFORM_READ);
   objScale.addChild(objTrans);
   //Create Model Clip
   ModelClip mc = new ModelClip();
   boolean enables[] = { false, false, false, false, false, false };
   Vector4d eqn1 = new Vector4d(0.0, 1.0, 0.0, 0.0);
   Vector4d eqn2 = new Vector4d(1.0, 1.0, 0.0, 0.0);
   mc.setEnables(enables);
   mc.setPlane(1, eqn1);
   mc.setPlane(2, eqn2);
   mc.setEnable(1, true);
   mc.setEnable(2, true);
   mc.setInfluencingBounds(bounds);
   objTrans.addChild(mc);
   //Create a cylinder
   PolygonAttributes attr = new PolygonAttributes();
   attr.setCullFace(PolygonAttributes.CULL_NONE);
   Appearance ap = new Appearance();
   Material mat = new Material();
   mat.setLightingEnable(true);
   ap.setMaterial(mat);
   ap.setPolygonAttributes(attr);
   Cylinder CylinderObj = new Cylinder(1.0f, 2.0f, ap);
   objTrans.addChild(CylinderObj);
   // Create the rotate behavior node
   MouseRotate behavior = new MouseRotate(objTrans);
   objTrans.addChild(behavior);
   behavior.setSchedulingBounds(bounds);
   // Create the zoom behavior node
   MouseZoom behavior2 = new MouseZoom(objTrans);
   objTrans.addChild(behavior2);
   behavior2.setSchedulingBounds(bounds);
   //Shine it with two colored lights.
   Color3f lColor1 = new Color3f(0.5f, 0.0f, 0.5f);
   Color3f lColor2 = new Color3f(0.7f, 0.7f, 0.0f);
   Vector3f lDir1 = new Vector3f(-1.0f, -1.0f, 1.0f);
   Vector3f lDir2 = new Vector3f(0.0f, 0.0f, -1.0f);
   DirectionalLight lgt1 = new DirectionalLight(lColor1, lDir1);
   DirectionalLight lgt2 = new DirectionalLight(lColor2, lDir2);
   lgt1.setInfluencingBounds(bounds);
   lgt2.setInfluencingBounds(bounds);
   objScale.addChild(lgt1);
   objScale.addChild(lgt2);
   // Let Java 3D perform optimizations on this scene graph.
   objRoot.rupile();
   return objRoot;
 }
 public ModelClipTest() {
 }
 public void init() {
   setLayout(new BorderLayout());
   GraphicsConfiguration config = SimpleUniverse
       .getPreferredConfiguration();
   Canvas3D c = new Canvas3D(config);
   add("Center", c);
   // Create a simple scene and attach it to the virtual universe
   BranchGroup scene = createSceneGraph();
   u = new SimpleUniverse(c);
   // This will move the ViewPlatform back a bit so the
   // objects in the scene can be viewed.
   u.getViewingPlatform().setNominalViewingTransform();
   u.addBranchGraph(scene);
 }
 public void destroy() {
   u.cleanup();
 }
 public static void main(String argv[]) {
   BranchGroup group;
   new MainFrame(new ModelClipTest(), 500, 500);
 }

}


      </source>