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

📄 mofang.java

📁 web页面验证码
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
package com.scitel;

//存为MoFang.java

import java.applet.Applet ;
import java.awt.*;
import com.sun.j3d.utils.applet.MainFrame ;
import java.awt.BorderLayout ;
import com.sun.j3d.utils.universe.SimpleUniverse ;
import javax.media.j3d.*;
import javax.vecmath.*;
import com.sun.j3d.utils.behaviors.mouse.*;
import com.sun.j3d.utils.behaviors.keyboard.*;
import com.sun.j3d.utils.picking.behaviors.*;
import com.sun.j3d.utils.geometry.*;
import com.sun.j3d.utils.image.TextureLoader ;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.JFrame.*;
import javax.swing.*;

class mySimpleUniverse extends Applet
{
    BranchGroup createSceneGraph(Canvas3D canvas)

    {


        //System.out.print("**1**");

        //创建变换组,无用的t3D
        Transform3D t3d=new Transform3D();
        TransformGroup trans=new TransformGroup(t3d);
        trans.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
        trans.setCapability(TransformGroup.ALLOW_TRANSFORM_READ);
        //创建分枝组
        BranchGroup objRoot=new BranchGroup();

        //测试
        //SomeShape3D.book3D( this, trans);
        SomeShape3D.addText3DDonghua(trans,"魔方",new Point3f(-7.0f,6.0f,6.0f),0.1f,new Color3f(1.0f,0.0f,0.0f),1);

        //初始化数据结构
        System.out.println("\n\n载入方块,并向变换组中加入每个方块的坐标系和方块...");
        for(int i=0;i<=2;i++)
        for(int j=0;j<=2;j++)
        for(int k=0;k<=2;k++)
        {
         int[] p;
         p=Position.getPxyzFromPositionAy(i,j,k,MoFang.positionArray);
            MoFang.blockArray[i][j][k]=new Block(i,j,k,p[0],p[1],p[2],trans,t3d,objRoot,this);
        }
        System.out.println("加入每个方块的坐标系和方块,完成.\n");

        //创建大坐标轴,自动加到主坐标系
        SomeShape3D.zuoBiaoZhuBigXShape3D(trans);
        SomeShape3D.zuoBiaoZhuBigYShape3D(trans);
        SomeShape3D.zuoBiaoZhuBigZShape3D(trans);

        //创建边界对象
        BoundingSphere bounds=new BoundingSphere(new Point3d(0.0,0.0,0.0),100);

        //创建鼠标pick行为,加到分支组objRoot
        PickRotateBehavior pickRotate=new PickRotateBehavior(objRoot,canvas,bounds);
        PickTranslateBehavior pickTranslate=new PickTranslateBehavior(objRoot,canvas,bounds);
        PickZoomBehavior pickZoom=new PickZoomBehavior(objRoot,canvas,bounds);
        //objRoot.addChild(pickRotate);
        objRoot.addChild(pickTranslate);
        //objRoot.addChild(pickZoom);

        //创建鼠标旋转行为
        MouseRotate behavior=new MouseRotate();
        behavior.setTransformGroup(trans);
        behavior.setSchedulingBounds(bounds);

        //创建鼠标平移行为
        //MouseTranslate myMouseRotate=new MouseTranslate();
        //myMouseRotate.setTransformGroup(trans);
        //myMouseRotate.setSchedulingBounds(bounds);

        //创建鼠标缩放行为
        MouseZoom myMouseZoom=new MouseZoom();
        myMouseZoom.setTransformGroup(trans);
        myMouseZoom.setSchedulingBounds(bounds);

        //创建键盘默认行为
        KeyNavigatorBehavior keyNavBeh=new KeyNavigatorBehavior(trans);
        keyNavBeh.setSchedulingBounds(bounds);
        objRoot.addChild(keyNavBeh);

        //白色背景
        Background bg=new Background(new Color3f(0.0f,0.0f,0.0f));
        bg.setApplicationBounds(bounds);
        objRoot.addChild(bg);

        //创建带材质的背景
        //TextureLoader bgTexture=new TextureLoader("bg3.jpg",this);
        //Background bg=new Background(bgTexture.getImage());
        //bg.setApplicationBounds(bounds);
        //trans.addChild(shape1);//3D物体 加到 变换组
        //trans.addChild(shape2);//3D物体 加到 变换组
        objRoot.addChild(trans);
        //变换组 加到 分枝组
        objRoot.addChild(behavior);
        //鼠标行为  加到 分枝组
        //objRoot.addChild(myMouseRotate);
        //objRoot.addChild(myMouseZoom);
        //objRoot.addChild(bg);//背景 加到 分枝组
        //编译
        objRoot.compile();
        //回送创建好的带3D物体的分枝组
        return objRoot ;

    }
    mySimpleUniverse()
    {
        //创建带控制的画布
        GraphicsConfiguration config=SimpleUniverse.getPreferredConfiguration();
        Canvas3D c=new Canvas3D(config);
        //创建以画布为依托的简单场景图对象,没有多个Locale
        SimpleUniverse u=new SimpleUniverse(c);
        u.getViewingPlatform().setNominalViewingTransform();
        //创建分支组对象
        BranchGroup scene=createSceneGraph(c);
        //组装,分支组 对象加到 场景图
        u.addBranchGraph(scene);

        //带场景图的画布 加到 本applet中
        setLayout(new BorderLayout());
        add("Center",c);
    }

    //测试码
    //public static void main(String aregs[])
    //{new MainFrame(new mySimpleUniverse(),200,200);//加applet到应用程序界面
    //}
}

class SomeShape3D
{
    public static float zuoBiaoZhouSmallDingDian=0.09f;//小坐标顶点位置
    public static float zuoBiaoZhouSmallDingXi=0.02f;//小坐标顶点伞的半径
    public static float zuoBiaoZhouSmallDingChang=0.07f;//小坐标顶点伞的长度
    public static float zuoBiaoZhouSmallWeiDian=-0.09f;//小坐标尾巴的位置
    public static float zuoBiaoZhouBigDingDian=1.0f;//大坐标顶点位置
    public static float zuoBiaoZhouBigDingXi=0.04f;//大坐标顶点伞的半径
    public static float zuoBiaoZhouBigDingChang=0.8f;//大坐标顶点伞的长度
    public static float zuoBiaoZhouBigWeiDian=-1.0f;//大坐标尾巴的位置
    public static float fangKuaiBanJing=0.18f;//每个方块的半径
    public static void zuoBiaoZhuBigXShape3D(TransformGroup trans)
    {


        //创建大坐标轴对象

        int i ;
        float x1,x2,y1,y2,z1,z2 ;

         SomeShape3D.addText3DDonghua(trans,"X",new Point3f(zuoBiaoZhouBigDingDian*10,0.0f,0.0f),0.1f,Block.mianColor[0],0);

        Point3f[]vert=new Point3f[41];
        Color3f[]colors=new Color3f[41];
        for(i=0;i<27;i++)
        {
            if(i==0)
            {
                vert[i]=new Point3f(zuoBiaoZhouBigDingDian,0.0f,0.0f);
                colors[i]=Block.mianColor[0];
            }
            else
            {
                z1=(float)(zuoBiaoZhouBigDingXi*Math.cos(i*2*Math.PI/25));
                x1=zuoBiaoZhouBigDingChang;
                y1=(float)(zuoBiaoZhouBigDingXi*Math.sin(i*2*Math.PI/25));
                vert[i]=new Point3f(x1,y1,z1);
                colors[i]=Block.mianColor[0];
            }
        }

        for(i=0;i<14;i++)
        {
            if(i==0)
            {
                vert[27+i]=new Point3f(zuoBiaoZhouBigDingDian,0.0f,0.0f);
                colors[27+i]=Block.mianColor[0];
            }
            else
            {
                z1=(float)(0.01f*Math.cos(i*2*Math.PI/12));
                x1=zuoBiaoZhouBigWeiDian ;
                y1=(float)(0.01f*Math.sin(i*2*Math.PI/12));
                vert[27+i]=new Point3f(x1,y1,z1);
                colors[27+i]=Block.mianColor[1];
            }
        }
        int count[]=new int[2];
        count[0]=27 ;
        count[1]=14 ;

        TriangleFanArray tri=new TriangleFanArray(
        vert.length,
        TriangleFanArray.COORDINATES|TriangleStripArray.COLOR_3,
        count
        );
        tri.setCoordinates(0,vert);
        tri.setColors(0,colors);


        Appearance app=new Appearance();

        PolygonAttributes polyAttrib=new PolygonAttributes();
        polyAttrib.setCullFace(PolygonAttributes.CULL_NONE);
        //polyAttrib.setPolygonMode(PolygonAttributes.POLYGON_LINE);
        app.setPolygonAttributes(polyAttrib);

        Shape3D shape=new Shape3D(tri,app);
        System.out.print("zuoBiaoZhuBigX 创建 完成\n");

        trans.addChild(shape);


        //到这里,大坐标轴对象创建完成


    }
    public static   void zuoBiaoZhuBigYShape3D(TransformGroup trans)
    {


        //创建大坐标轴对象

        int i ;
        float x1,x2,y1,y2,z1,z2 ;

        SomeShape3D.addText3DDonghua(trans,"Y",new Point3f(-1.0f,zuoBiaoZhouBigDingDian*10,0.0f),0.1f,Block.mianColor[2],0);

        Point3f[]vert=new Point3f[41];
        Color3f[]colors=new Color3f[41];
        for(i=0;i<27;i++)
        {
            if(i==0)
            {
                vert[i]=new Point3f(0.0f,zuoBiaoZhouBigDingDian,0.0f);
                colors[i]=Block.mianColor[2];
            }
            else
            {
                x1=(float)(zuoBiaoZhouBigDingXi*Math.cos(i*2*Math.PI/25));
                y1=zuoBiaoZhouBigDingChang;
                z1=(float)(zuoBiaoZhouBigDingXi*Math.sin(i*2*Math.PI/25));
                vert[i]=new Point3f(x1,y1,z1);
                colors[i]=Block.mianColor[2];
            }
        }

        for(i=0;i<14;i++)
        {
            if(i==0)
            {
                vert[27+i]=new Point3f(0.0f,zuoBiaoZhouBigDingDian,0.0f);
                colors[27+i]=Block.mianColor[2];
            }
            else
            {
                x1=(float)(0.01f*Math.cos(i*2*Math.PI/12));
                y1=zuoBiaoZhouBigWeiDian ;
                z1=(float)(0.01f*Math.sin(i*2*Math.PI/12));
                vert[27+i]=new Point3f(x1,y1,z1);
                colors[27+i]=Block.mianColor[3];
            }
        }
        int count[]=new int[2];
        count[0]=27 ;
        count[1]=14 ;

        TriangleFanArray tri=new TriangleFanArray(
        vert.length,
        TriangleFanArray.COORDINATES|TriangleStripArray.COLOR_3,
        count
        );
        tri.setCoordinates(0,vert);
        tri.setColors(0,colors);
        Appearance app=new Appearance();

        PolygonAttributes polyAttrib=new PolygonAttributes();
        polyAttrib.setCullFace(PolygonAttributes.CULL_NONE);
        //polyAttrib.setPolygonMode(PolygonAttributes.POLYGON_LINE);
        app.setPolygonAttributes(polyAttrib);

        Shape3D shape=new Shape3D(tri,app);

        System.out.print("zuoBiaoZhuBigY 创建 完成\n");

        trans.addChild(shape);


        //到这里,大坐标轴对象创建完成


    }

    public static  void  zuoBiaoZhuBigZShape3D(TransformGroup trans)
    {


        //创建大坐标轴对象

        int i ;
        float x1,x2,y1,y2,z1,z2 ;
 SomeShape3D.addText3DDonghua(trans,"Z",new Point3f(-1.0f,0.0f,zuoBiaoZhouBigDingDian*10),0.1f,Block.mianColor[4],0);

        Point3f[]vert=new Point3f[41];
        Color3f[]colors=new Color3f[41];
        for(i=0;i<27;i++)
        {
            if(i==0)
            {
                vert[i]=new Point3f(0.0f,0.0f,zuoBiaoZhouBigDingDian);
                colors[i]=Block.mianColor[4];
            }
            else
            {
                y1=(float)(zuoBiaoZhouBigDingXi*Math.cos(i*2*Math.PI/25));
                z1=zuoBiaoZhouBigDingChang;
                x1=(float)(zuoBiaoZhouBigDingXi*Math.sin(i*2*Math.PI/25));
                vert[i]=new Point3f(x1,y1,z1);
                colors[i]=Block.mianColor[4];
            }
        }

        for(i=0;i<14;i++)
        {
            if(i==0)
            {
                vert[27+i]=new Point3f(0.0f,0.0f,zuoBiaoZhouBigDingDian);
                colors[27+i]=Block.mianColor[4];
            }
            else
            {
                y1=(float)(0.01f*Math.cos(i*2*Math.PI/12));
                z1=zuoBiaoZhouBigWeiDian ;
                x1=(float)(0.01f*Math.sin(i*2*Math.PI/12));
                vert[27+i]=new Point3f(x1,y1,z1);
                colors[27+i]=Block.mianColor[5];
            }
        }
        int count[]=new int[2];
        count[0]=27 ;
        count[1]=14 ;

        TriangleFanArray tri=new TriangleFanArray(
        vert.length,
        TriangleFanArray.COORDINATES|TriangleStripArray.COLOR_3,
        count
        );
        tri.setCoordinates(0,vert);
        tri.setColors(0,colors);
        Appearance app=new Appearance();

        PolygonAttributes polyAttrib=new PolygonAttributes();
        polyAttrib.setCullFace(PolygonAttributes.CULL_NONE);
        //polyAttrib.setPolygonMode(PolygonAttributes.POLYGON_LINE);
        app.setPolygonAttributes(polyAttrib);

        Shape3D shape=new Shape3D(tri,app);
        System.out.print("zuoBiaoZhuBigZ 创建 完成\n");

        trans.addChild(shape);
        //到这里,大坐标轴对象创建完成
    }
    public static  void  zuoBiaoZhuSmallXShape3D(TransformGroup trans)
    {
        //创建小坐标轴对象

        int i ;
        float x1,x2,y1,y2,z1,z2 ;

        Point3f[]vert=new Point3f[41];
        Color3f[]colors=new Color3f[41];
        for(i=0;i<27;i++)
        {
            if(i==0)
            {
                vert[i]=new Point3f(zuoBiaoZhouSmallDingDian,0.0f,0.0f);
                colors[i]=Block.mianColor[0];
            }
            else
            {

⌨️ 快捷键说明

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