⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 j-java3d-10-2.html

📁 本教程是为没有任何 3D 编程经验的 Java 程序员而编写的。我们将从一些基本的 3D 概念入手
💻 HTML
📖 第 1 页 / 共 2 页
字号:
 * 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.
 *
 * This software is not designed or intended for use in on-line control of
 * aircraft, air traffic, aircraft navigation or aircraft communications; or in
 * the design, construction, operation or maintenance of any nuclear
 * facility. Licensee represents and warrants that it will not use or
 * redistribute the Software for such purposes.
 */

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



/**
   Generates a scene graph with the cylinders that 
   make up the axis, and 3 cones. 
   Add one Cone with rotate before translate, and 
   another that has translate before rotate.
   For reference, throw in a cone without translate
   or rotate

*/




public class TransformOrder extends Applet {

    public static final int X =1;
    public static final int Y =2;
    public static final int Z =3;
    public static final int ROTATE_TOP    =4;
    public static final int TRANSLATE_TOP =5;
    public static final int NO_TRANSFORM  =6;

    private SimpleUniverse universe ;
    private BranchGroup scene;
    private Canvas3D canvas;
    private BoundingSphere bounds =
            new BoundingSphere(new Point3d(0.0, 0.0, 0.0), 1000.0);
    
    private Appearance red = new Appearance();
    private Appearance yellow = new Appearance();
    private Appearance purple = new Appearance();
    Transform3D rotate = new Transform3D();
    Transform3D translate = new Transform3D();

    
    public void setupView() {
	/** Add some view related things to view branch side 
	of scene graph */
        // add mouse interaction to the ViewingPlatform
        OrbitBehavior orbit = new OrbitBehavior(canvas,
                OrbitBehavior.REVERSE_ALL|OrbitBehavior.STOP_ZOOM);
        orbit.setSchedulingBounds(bounds);
	
	ViewingPlatform viewingPlatform = universe.getViewingPlatform();
        // This will move the ViewPlatform back a bit so the
        // objects in the scene can be viewed.
        viewingPlatform.setNominalViewingTransform();
        viewingPlatform.setViewPlatformBehavior(orbit);

	}

    //construct each branch of the graph, changing the order children added
    // since  Group node can only have one parent, have to construct
    // new translate and rotate group nodes for each branch.
    Group rotateOnTop(){
          Group root=new Group();
          TransformGroup objRotate = new TransformGroup(rotate);
          TransformGroup objTranslate = new TransformGroup(translate);
          Cone redCone=  
              new Cone(.3f, 0.7f, Primitive.GENERATE_NORMALS, red);
          root.addChild(objRotate);
          objRotate.addChild(objTranslate);
          objTranslate.addChild(redCone); //tack on red cone
          return root;
    }
    Group translateOnTop(){
          Group root=new Group();
          TransformGroup objRotate = new TransformGroup(rotate);
          TransformGroup objTranslate = new TransformGroup(translate);
          Cone yellowCone=  
              new Cone(.3f, 0.7f, Primitive.GENERATE_NORMALS, yellow);
          root.addChild(objTranslate);
          objTranslate.addChild(objRotate);
          objRotate.addChild(yellowCone); //tack on yellow cone
          return root;
    
    }
    
    Group noTransform(){
          Cone purpleCone=  
              new Cone(.3f, 0.7f, Primitive.GENERATE_NORMALS, purple);
          return purpleCone;
    }




    /** Represent an axis using cylinder Primitive. Cylinder is 
	aligned with Y axis, so we have to rotate it when 
	creating X and Z axis
    */
    public TransformGroup createAxis(int type) {

	//appearance and lightingProps are used in
	//lighting. Each axis a different color
	Appearance appearance = new Appearance();
	Material lightingProps = new Material();


        Transform3D t = new Transform3D();
	switch (type) {
	   case Z:
              t.rotX(Math.toRadians(90.0));
	      lightingProps.setAmbientColor(1.0f,0.0f,0.0f);
	   break;
	   case Y:
              // no rotation needed, cylinder aligned with Y already
	      lightingProps.setAmbientColor(0.0f,1.0f,0.0f);
	   break;
	   case X:
              t.rotZ(Math.toRadians(90.0));
	      lightingProps.setAmbientColor(0.0f,0.0f,1.0f);
	   break;
	   default:
	   break;
	}
	appearance.setMaterial(lightingProps);

        TransformGroup objTrans = new TransformGroup(t);
	objTrans.addChild( new Cylinder(.03f,2.5f,Primitive.GENERATE_NORMALS,appearance));
	return objTrans;
    }

    /** Create X, Y , and Z axis, and 3 cones. Throws in 
	some quick lighting to help viewing the scene
    */
    public BranchGroup createSceneGraph() {
	// Create the root of the branch graph
	BranchGroup objRoot = new BranchGroup();

	//45 degree rotation around the X axis
        rotate.rotX(Math.toRadians(45.0));

	//translation up the Y axis
	translate.setTranslation(new Vector3f(0.0f,2.0f,1.0f)); //SCD 0.0f));

        //Material objects are related to lighting, we'll cover
        //that later
        Material redProps = new Material();
        redProps.setAmbientColor(1.0f,0.0f,0.0f); //red cone
	red.setMaterial(redProps);

        Material yellowProps = new Material();
        yellowProps.setAmbientColor(1.0f,1.0f,0.0f); //yellow cone
	yellow.setMaterial(yellowProps);

        Material purpleProps = new Material();
        purpleProps.setAmbientColor(0.8f,0.0f,0.8f); //purple cone
	purple.setMaterial(purpleProps);

	// Create a x,y,z axis, and then 3 cone branches

	objRoot.addChild(createAxis(X));
	objRoot.addChild(createAxis(Y));
	objRoot.addChild(createAxis(Z));

	objRoot.addChild(noTransform());    //purple cone
	objRoot.addChild(rotateOnTop());      //red cone
	objRoot.addChild(translateOnTop());   //yellow cone

	//throw in some light so we aren't stumbling 
	//around in the dark
	Color3f lightColor = new Color3f(.3f,.3f,.3f);
        AmbientLight ambientLight= new AmbientLight(lightColor);
        ambientLight.setInfluencingBounds(bounds);
        objRoot.addChild(ambientLight);
        DirectionalLight directionalLight = new DirectionalLight();
        directionalLight.setColor(lightColor);
        directionalLight.setInfluencingBounds(bounds);
        objRoot.addChild(directionalLight);


	return objRoot;

    }

    public TransformOrder() {
    }

    public void init() {
	BranchGroup scene = createSceneGraph();

	setLayout(new BorderLayout());
        GraphicsConfiguration config =
           SimpleUniverse.getPreferredConfiguration();
	canvas = new Canvas3D(config);
	add("Center", canvas);

	// Create a simple scene and attach it to the virtual universe
	universe = new SimpleUniverse(canvas);

	setupView();

	universe.addBranchGraph(scene);
    }

    public void destroy() {
	universe.removeAllLocales();
    }

    //
    // The following allows TransformOrder to be run as an application
    // as well as an applet
    //
    public static void main(String[] args) {
	new MainFrame(new TransformOrder(), 256, 256);
    }
}
</code>
</pre>
<br>
</font></td>
</tr>
</table>
<TABLE border="0" cellpadding="0" cellspacing="0" width="100%">
<TR>
<TD background="../i/sw-gold.gif"><a border="0" href="index.html" onMouseOver="iOver('topmain'); iOver('bottommain'); self.status=mainblurb; return true;" onMouseOut="iOut('topmain'); iOut('bottommain'); self.status=''; return true;"><img alt="主菜单" border="0" src="../i/main.gif" name="bottommain"></a></TD><TD background="../i/sw-gold.gif"><a border="0" onMouseOver="iOver('topsection'); iOver('bottomsection'); self.status=sectionblurb; return true;" onMouseOut="iOut('topsection'); iOut('bottomsection'); self.status=''; return true;" href="index10.html"><img alt="章节菜单" border="0" src="../i/section.gif" name="bottomsection"></a></TD><TD background="../i/sw-gold.gif"><a border="0" onMouseOver="iOver('topfeedback'); iOver('bottomfeedback'); self.status=feedbackblurb; return true;" onMouseOut="iOut('topfeedback'); iOut('bottomfeedback'); self.status=''; return true;" href="j-java3d-9-3.html"><img alt="给出此教程的反馈意见" border="0" src="../i/feedback.gif" name="bottomfeedback"></a></TD><TD width="100%" background="../i/sw-gold.gif"><img src="../i/c.gif"></TD><TD background="../i/sw-gold.gif"><a border="0" onMouseOver="iOver('topprevious'); iOver('bottomprevious'); self.status=previousblurb; return true;" onMouseOut="iOut('topprevious'); iOut('bottomprevious'); self.status=''; return true;" href="j-java3d-10-1.html"><img alt="上页" border="0" src="../i/previous.gif" name="bottomprevious"></a></TD><TD background="../i/sw-gold.gif"><a border="0" onMouseOver="iOver('topnext'); iOver('bottomnext'); self.status=nextblurb; return true;" onMouseOut="iOut('topnext'); iOut('bottomnext'); self.status=''; return true;" href="j-java3d-10-3.html"><img alt="下页" border="0" src="../i/next.gif" name="bottomnext"></a></TD>
</TR>
<TR>
<TD width="150" height="1" bgcolor="#000000" colspan="6"><IMG alt="" height="1" width="150" src="../i/c.gif"></TD>
</TR>
</TABLE>
<TABLE width="100%" cellpadding="0" cellspacing="0" border="0">
<TR>
<TD width="100%">
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tr>
<td><img alt="" height="1" width="1" src="../i/c.gif"></td>
</tr>
<tr valign="top">
<td class="bbg" height="21"> <a class="mainlink" href="/developerWorks/cgi-bin/click.cgi?url=http://www-900.ibm.com/cn/ibm/index.shtml">关于 IBM</a><span class="divider"> | </span><a class="mainlink" href="/developerWorks/cgi-bin/click.cgi?url=http://www-900.ibm.com/cn/ibm/privacy/index.shtml">隐私条约</a><span class="divider"> | </span><a class="mainlink" href="/developerWorks/cgi-bin/click.cgi?url=http://www-900.ibm.com/cn/ibm/legal/index.shtml">法律条款</a><span class="divider"> | </span><a class="mainlink" href="/developerWorks/cgi-bin/click.cgi?url=http://www-900.ibm.com/cn/ibm/contact/index.shtml">联系 IBM</a></td>
</tr>
</table>
</TD>
</TR>
</TABLE>
</body>
</html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -