动画与互动-一个弹跳球 : 三维动画 « 三维图形动画 « Java

En
Java
1. 图形用户界面
2. 三维图形动画
3. 高级图形
4. 蚂蚁编译
5. Apache类库
6. 统计图
7. 
8. 集合数据结构
9. 数据类型
10. 数据库JDBC
11. 设计模式
12. 开发相关类
13. EJB3
14. 电子邮件
15. 事件
16. 文件输入输出
17. 游戏
18. 泛型
19. GWT
20. Hibernate
21. 本地化
22. J2EE平台
23. 基于J2ME
24. JDK-6
25. JNDI的LDAP
26. JPA
27. JSP技术
28. JSTL
29. 语言基础知识
30. 网络协议
31. PDF格式RTF格式
32. 映射
33. 常规表达式
34. 脚本
35. 安全
36. Servlets
37. Spring
38. Swing组件
39. 图形用户界面
40. SWT-JFace-Eclipse
41. 线程
42. 应用程序
43. Velocity
44. Web服务SOA
45. 可扩展标记语言
Java 教程
Java » 三维图形动画 » 三维动画屏幕截图 
动画与互动-一个弹跳球
动画与互动-一个弹跳球

/*
The Joy of Java 3D

by Greg Hopkins

Copyright Copyright 2001


*/
/*

To create animation you need to move the objects between each frame of animation. You can 
use a timer and move the 3D objects by a small amount each time. Also, you can modify the 
objects in other ways, the next example scales the ball so that it looks squashed at the 
bottom of each bounce.

For interaction with the user, you can process keystrokes or clicks on buttons or other 
components.

One thing to notice is that you have to tell Java3D you are going to move something by 
setting a capability. Otherwise, you will not be able to move anything once it has been 
drawn.

 objTrans = new TransformGroup();
 objTrans.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);

The following example combines these techniques. You start it by clicking on the button, 
then the ball bounces up and down, and you can press a or s to move the ball left or 
right.


*/

import java.applet.Applet;
import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.GraphicsConfiguration;
import java.awt.Panel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.media.j3d.AmbientLight;
import javax.media.j3d.BoundingSphere;
import javax.media.j3d.BranchGroup;
import javax.media.j3d.Canvas3D;
import javax.media.j3d.DirectionalLight;
import javax.media.j3d.Transform3D;
import javax.media.j3d.TransformGroup;
import javax.swing.Timer;
import javax.vecmath.Color3f;
import javax.vecmath.Point3d;
import javax.vecmath.Vector3d;
import javax.vecmath.Vector3f;

import com.sun.j3d.utils.applet.MainFrame;
import com.sun.j3d.utils.geometry.Sphere;
import com.sun.j3d.utils.universe.SimpleUniverse;

public class BouncingBall extends Applet implements ActionListener, KeyListener {
  private Button go = new Button("Go");

  private TransformGroup objTrans;

  private Transform3D trans = new Transform3D();

  private float height = 0.0f;

  private float sign = 1.0f// going up or down

  private Timer timer;

  private float xloc = 0.0f;

  public BranchGroup createSceneGraph() {
    // Create the root of the branch graph
    BranchGroup objRoot = new BranchGroup();
    objTrans = new TransformGroup();
    objTrans.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
    objRoot.addChild(objTrans);

    // Create a simple shape leaf node, add it to the scene graph.
    Sphere sphere = new Sphere(0.25f);
    objTrans = new TransformGroup();
    objTrans.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
    Transform3D pos1 = new Transform3D();
    pos1.setTranslation(new Vector3f(0.0f0.0f0.0f));
    objTrans.setTransform(pos1);
    objTrans.addChild(sphere);
    objRoot.addChild(objTrans);
    BoundingSphere bounds = new BoundingSphere(new Point3d(0.00.00.0),
        100.0);

    Color3f light1Color = new Color3f(1.0f0.0f0.2f);
    Vector3f light1Direction = new Vector3f(4.0f, -7.0f, -12.0f);
    DirectionalLight light1 = new DirectionalLight(light1Color,
        light1Direction);
    light1.setInfluencingBounds(bounds);
    objRoot.addChild(light1);

    // Set up the ambient light
    Color3f ambientColor = new Color3f(1.0f1.0f1.0f);
    AmbientLight ambientLightNode = new AmbientLight(ambientColor);
    ambientLightNode.setInfluencingBounds(bounds);
    objRoot.addChild(ambientLightNode);

    return objRoot;
  }

  public BouncingBall() {
    setLayout(new BorderLayout());
    GraphicsConfiguration config = SimpleUniverse
        .getPreferredConfiguration();
    Canvas3D c = new Canvas3D(config);
    add("Center", c);
    c.addKeyListener(this);
    timer = new Timer(100this);
    //timer.start();
    Panel p = new Panel();
    p.add(go);
    add("North", p);
    go.addActionListener(this);
    go.addKeyListener(this);
    // Create a simple scene and attach it to the virtual universe
    BranchGroup scene = createSceneGraph();

    SimpleUniverse u = new SimpleUniverse(c);
    u.getViewingPlatform().setNominalViewingTransform();
    u.addBranchGraph(scene);
  }

  public void keyPressed(KeyEvent e) {
    //Invoked when a key has been pressed.
    if (e.getKeyChar() == 's') {
      xloc = xloc + .1f;
    }
    if (e.getKeyChar() == 'a') {
      xloc = xloc - .1f;
    }
  }

  public void keyReleased(KeyEvent e) {
    // Invoked when a key has been released.
  }

  public void keyTyped(KeyEvent e) {
    //Invoked when a key has been typed.
  }

  public void actionPerformed(ActionEvent e) {
    // start timer when button is pressed
    if (e.getSource() == go) {
      if (!timer.isRunning()) {
        timer.start();
      }
    else {
      height += .1 * sign;
      if (Math.abs(height * 2>= 1)
        sign = -1.0f * sign;
      if (height < -0.4f) {
        trans.setScale(new Vector3d(1.0.81.0));
      else {
        trans.setScale(new Vector3d(1.01.01.0));
      }
      trans.setTranslation(new Vector3f(xloc, height, 0.0f));
      objTrans.setTransform(trans);
    }
  }

  public static void main(String[] args) {
    System.out.println("Program Started");
    BouncingBall bb = new BouncingBall();
    bb.addKeyListener(bb);
    MainFrame mf = new MainFrame(bb, 256256);
  }
}
           
       
Related examples in the same category
1. 人体动画人体动画
2. 这个例子创建了一个三维飞行超过城市波士顿这个例子创建了一个三维飞行超过城市波士顿
3. 简单的DOOM导航的三维场景使用的Java 3D简单的DOOM导航的三维场景使用的Java 3D
4. HelloJava3Da单一的,旋转的立方体HelloJava3Da单一的,旋转的立方体
5. SimpleMorphBehaviour动画SimpleMorphBehaviour动画
6. 样条动画样条动画
www.java2java.com | Contact Us
Copyright 2010 - 2030 Java Source and Support. All rights reserved.
All other trademarks are property of their respective owners.