?? java-codes.txt
字號:
//存為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
{
z1=(float)(zuoBiaoZhouSmallDingXi*Math.cos(i*2*Math.PI/25));
x1=zuoBiaoZhouSmallDingChang ;
y1=(float)(zuoBiaoZhouSmallDingXi*Math.sin(i*2*Math.PI/25));
vert[i]=new Point3f(x1,y1,z1);
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -