java3D的问题…我要利用java3d绘制一个地球可以自转的动画… 20

各位java高手你们好…我希望利用java3d绘制一个地球可以自转,并能做到以下的动作…1.利用java3D写一个3D球,球的表面贴着地图的纹理,变成一颗3D的地球…2.... 各位java高手你们好…我希望利用java3d绘制一个地球可以自转,并能做到以下的动作…
1.利用java3D写一个3D球,球的表面贴着地图的纹理,变成一颗3D的地球…
2.地球会自动的旋转…
3.建立一个模仿太阳光去照着地球…
3.地球可以手动利用滑鼠旋转…
4.地球可以利用滑鼠缩放(放大缩小)…
请给我完整的程式码…麻烦大家了…希望大家可以帮我…
请大家给我JAVA3D的程式码…来SHOW这个效果唷!谢谢
展开
 我来答
筱123尚
2014-04-02
知道答主
回答量:1
采纳率:0%
帮助的人:1390
展开全部
import java.applet.Applet;
import java.awt.*;
import com.sun.j3d.utils.applet.MainFrame;
import com.sun.j3d.utils.universe.*;
import javax.media.j3d.*;
import javax.vecmath.*;
import static java.lang.Math.*;
import com.sun.j3d.utils.behaviors.mouse.*;
public class Ball11 extends Applet
{
private float vert[]=new float[30000];
private Color3f color[]=new Color3f[30000];
public BranchGroup createSceneGraph(){
BranchGroup objRoot=new BranchGroup();//分支组
BoundingSphere bounds=new BoundingSphere(new Point3d(),100.0);
Color3f bgColor=new Color3f(1.0f,1.0f,1.0f);
Background bg=new Background(bgColor);//背景颜色
bg.setApplicationBounds(bounds);//背景范围
objRoot.addChild(bg);

//添加平行光
DirectionalLight lightD1=new DirectionalLight();
lightD1.setInfluencingBounds(new BoundingSphere());
Vector3f direction=new Vector3f(2.5f,8.0f,-1.0f);
Color3f color1=new Color3f(1.0f,0.0f,0.0f);
direction.normalize();
lightD1.setDirection(direction);
lightD1.setColor(color1);
objRoot.addChild(lightD1);
//初始化
pointinit();
//添加运输组
TransformGroup trans=new TransformGroup();
trans.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
trans.setCapability(TransformGroup.ALLOW_TRANSFORM_READ);
objRoot.addChild(trans);

Shape3D shape=new Shape3D();
QuadArray qArray=new QuadArray(30000,QuadArray.COORDINATES|QuadArray.COLOR_3);
qArray.setCoordinates(0,vert);
qArray.setColors(0,color);
PolygonAttributes pa=new PolygonAttributes();
pa.setCullFace(PolygonAttributes.CULL_NONE);
shape.setGeometry(qArray);
Appearance app=new Appearance();
app.setPolygonAttributes(pa);
shape.setAppearance(app);
trans.addChild(shape);

//添加鼠标事件
MouseRotate rotate=new MouseRotate();
rotate.setTransformGroup(trans);
objRoot.addChild(rotate);
rotate.setSchedulingBounds(bounds);

MouseZoom zoom=new MouseZoom();
zoom.setTransformGroup(trans);
objRoot.addChild(zoom);
zoom.setSchedulingBounds(bounds);

MouseTranslate translate=new MouseTranslate();
translate.setTransformGroup(trans);
objRoot.addChild(translate);
translate.setSchedulingBounds(bounds);

objRoot.compile();
return objRoot;
}
public void pointinit(){
int i=0;
for(double a=0;a<=2*Math.PI;a+=0.09){
for(double b=0;b<=Math.PI;b+=0.1){
vert[i]=(float)Math.sin(b)*(float)cos(a);i++;
vert[i]=(float)Math.sin(a)*(float)sin(b);i++;
vert[i]=(float)Math.cos(b);i++;

vert[i]=(float)Math.sin(b)*(float)cos(a+0.1);i++;
vert[i]=(float)Math.sin(a+0.1)*(float)sin(b);i++;
vert[i]=(float)Math.cos(b+0.1);i++;

vert[i]=(float)Math.sin(b+0.1)*(float)cos(a+0.1);i++;
vert[i]=(float)Math.sin(a+0.1)*(float)sin(b+0.1);i++;
vert[i]=(float)Math.cos(b+0.1);i++;

vert[i]=(float)Math.sin(b+0.1)*(float)cos(a);i++;
vert[i]=(float)Math.sin(a)*(float)sin(b+0.1);i++;
vert[i]=(float)Math.cos(b+0.1);i++;
}
}
for(i=0;i<30000;i++){
color[i]=new Color3f(0.4f,0.0f,0.5f);
}
}
public Ball11(){
setLayout(new BorderLayout());
GraphicsConfiguration config=SimpleUniverse.getPreferredConfiguration();
Canvas3D c=new Canvas3D(config);
add("Center",c);
BranchGroup scene=createSceneGraph();
SimpleUniverse u=new SimpleUniverse(c);
u.getViewingPlatform().setNominalViewingTransform();
u.addBranchGraph(scene);
}
public static void main(String[] args){
long time1=System.nanoTime();
new MainFrame(new Ball11(),400,400);
long time2=System.nanoTime();
System.out.println("用时为: "+(time2-time1)/1000000000.0 + " 秒");
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yq爱烟斯坦qy
2009-11-28 · TA获得超过750个赞
知道答主
回答量:239
采纳率:0%
帮助的人:0
展开全部
这是 谷歌地球 软件
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式