3D可视化技术之Cult3D【实战动画效果小汽车】

来源:互联网 发布:淘宝发货通知短信 编辑:程序博客网 时间:2024/04/29 09:30

废话不多说,直接上代码注释很全….

package cn.com.test;import com.cult3d.Cult3DScript;import com.cult3d.world.CultObject;/** * 该类全局唯一、供Cult3D Designer调用,实现动态交互 *  * @ClassName: Assemble * @Description: 此类实现小汽车模型整体的移动,4个轮胎的移动以及整体的停止和4个轮胎的停止 * @author wuran:2269839033@qq.com * @date 2016年1月14日 下午5:13:58 * */public class Assemble implements Cult3DScript {    // 在此类中可以调用其他类的方法,供cult3D Designer调用实现动态交互效果    // 此处每个对象name应该与3ds max中制作对应相同    private CultObject object = new CultObject("Car");    // 以下为让3ds里面的Car“动起来”    private CultObject object1 = new CultObject("tyre1");// 轮胎1    private CultObject object2 = new CultObject("tyre2");// 轮胎2    private CultObject object3 = new CultObject("tyre3");// 轮胎3    private CultObject object4 = new CultObject("tyre4");// 轮胎4    // 必须实现一个不带参数的构造函数    public Assemble() {    }    /**     *     * @Title: Start     * @Description: 汽车启动效果方法    * @param @param s    预留参数    * @return void    返回类型     * @throws     */    public void Start(String s) {        //小汽车整体移动,前3个参数含义:X/Y/Z3个方向移动的距离,第4个参数代表所花费的移动时间        object.translate(0.0f, 100.0f, 0.0f,200000);        //轮胎的移动,参数1:转动轴,参数2:转动弧度,参数3:转动时间        object1.rotate(object1.Z, 10,200000);        object2.rotate(object2.Z, 10,200000);        object3.rotate(object3.Z, 10,200000);        object4.rotate(object4.Z, 10,200000);    }    /**     *     * @Title: stop     * @Description: 汽车整体的停止方法    * @param @param s    预留参数    * @return void    返回类型     * @throws     */    public void stop(String s) {        object.stopRotation();        object1.stopRotation();        object2.stopRotation();        object3.stopRotation();        object4.stopRotation();    }    /**     * 析构函数cult3dDestroy()会在Cult3D Viewer关闭时调用,用以释放资源;     */    @Override    public void cult3dDestroy() {    }}
package cn.com.test;import java.awt.Color;import java.awt.Graphics;import com.cult3d.Cult;import com.cult3d.Cult3DScript;import com.cult3d.TextureImage;import com.cult3d.world.Texture;/** * * @ClassName: ChangeColor * @Description: 该类实现车体颜色的改变* @author wuran:2269839033@qq.com * @date 2016年1月15日 下午3:06:16 * */public class ChangeColor implements Cult3DScript,Runnable{    //材质    private static final String TEXTURE_NAME = "MADAROSE";    private Color red = new Color(198, 58, 41);    private Color blue = new Color(99, 93, 163);    //组成颜色集    private Color[] colors ={red,blue};    private Texture texture;    private TextureImage textureImage;    private int texttureWidth,texttureHeight;    private Graphics graphics;//图表    private volatile boolean loaded = false;    private int coloCounter = 0;//计数器    /**     *     * <p>Title: </p>     * <p>Description: 该构造函数用于单独启动一个线程,用于专门渲染车体颜色</p>     */    public ChangeColor() {        Thread thread = new Thread(this);        thread.start();    }    public void run(){        texture = new Texture(TEXTURE_NAME);        //获取新建纹理的宽度        texttureWidth = texture.getWidth();        //获取新建纹理的高度        texttureHeight = texture.getHeight();        //构建纹理图片        textureImage = (TextureImage) Cult.createImage(texttureWidth,texttureHeight);        graphics = textureImage.getGraphics();        loaded = true;      }    //定义一些Manual事件    public void Red(String s){        switchColor(red);    }    public void Blue(String s){        switchColor(blue);    }    public void switchColor(Color color){        graphics.setColor(color);        graphics.fillRect(0, 0, texttureWidth, texttureHeight);        texture.setTexture(textureImage);    }    @Override    public void cult3dDestroy() {    }}
package cn.com.test;import com.cult3d.Cult3DScript;import com.cult3d.world.CultObject;/** * * @ClassName: Door * @Description: 此类用以实现车门的打开和关闭动画* @author wuran:2269839033@qq.com * @date 2016年1月15日 下午2:55:02 * */public class Door implements Cult3DScript{    //获得3ds max的门对象    private CultObject door = new CultObject("Door");    boolean Isopen;//判断门是否打开    //构造函数    public Door() {        Isopen = false;//初始化车门没有打开    }    /**     *     * @Title: opclose     * @Description: 根据车门开闭状态实现开关车门方法     * @param @param s    设定文件     * @return void    返回类型     * @throws     */    public void opclose(String s) {        if (Isopen ==false) {            //未开 则开            door.rotate(door.Y, 10, 100);            //更新门打开状态            Isopen = true;        } else {            //已开 则关            door.rotate(door.Y, -10, 100);            Isopen =false;        }    }    @Override    public void cult3dDestroy() {    }}
<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title>car ambition</title>    <script language="JavaScript" src="../js/Cult3D.js"></script>    <script language="JavaScript">        function triggerRed(){            //此处Red与名为Red的Manual事件名相对应,单机red按钮触发名为red的事件            var success = Cult3D.triggerEvent("Red");        }        function enableButtons(refObject){            //让该按钮为激活状态            Cult3D=new Cult3D_Object(refObject);            document.myForm.Red.disabled = false;        }    </script>    <script language="JavaScript" for=CultObject event=OnLoadFinished>        if(isActiveX()){            alert("isActiveX");            enableButtons(this);//使按钮可用        }    </script></head><body> <form name="myForm">     <input disabled name="Red" type="button" value="Red" onclick="triggerRed()"> </form> <object classid="clsid:31B7EB4E-8B4B-11D1-A789-00A0CC6651A8"         width="1000" height="600" codebase="http://www.cult3d.com/download/cult.cab#version=5,3,0,212">     <param name="SRC" value="../res/bridge.co" >     <embed pluginspage="http://www.cult3d.com/newuser/index.html"            width="1000" height="600" src="../res/bridge.co" type="application/x-Cult3D-object"            OnLoadFinished="enableButtons('CultEmbed')">     </embed> </object></body></html>
0 0
原创粉丝点击