Java3d 案例程序

今天偶尔翻出了很久以前写的java3d程序,很怀念曾经探索java3d解析、渲染ifc数据的日子

package com.vfsd.test0621;

import java.applet.Applet;
import java.awt.BorderLayout;
import java.awt.GraphicsConfiguration;

import javax.media.j3d.Alpha;
import javax.media.j3d.Appearance;
import javax.media.j3d.Background;
import javax.media.j3d.BoundingSphere;
import javax.media.j3d.BranchGroup;
import javax.media.j3d.Canvas3D;
import javax.media.j3d.DirectionalLight;
import javax.media.j3d.Material;
import javax.media.j3d.RotPosPathInterpolator;
import javax.media.j3d.Transform3D;
import javax.media.j3d.TransformGroup;
import javax.media.j3d.TransparencyAttributes;
import javax.media.j3d.TransparencyInterpolator;
import javax.vecmath.Color3f;
import javax.vecmath.Point3d;
import javax.vecmath.Point3f;
import javax.vecmath.Quat4f;
import javax.vecmath.Vector3f;

import com.sun.j3d.utils.applet.MainFrame;
import com.sun.j3d.utils.behaviors.mouse.MouseRotate;
import com.sun.j3d.utils.geometry.Cylinder;
import com.sun.j3d.utils.geometry.Sphere;
import com.sun.j3d.utils.universe.SimpleUniverse;
import com.sun.javafx.sg.prism.NGPhongMaterial;


/*******************************************************************************************************
 * Copyright: vc1.0 2018. All rights reserved.                    <br>
 * The whole package including this class is licensed under        <br>
 *                                                                 <br>
 * @ClassName:                                        <br>
 * @Directory:                                        <br>
 * @author:           luo                                    <br>
 * @version:         v1.0.0                                        <br>
 * @date:                                                <br>
 * @Description:                                                 <br>
 *       1、                                        <br>
 *       2、                                        <br>
 * @Others: 暂无说明                                                <br>
 * @Modification History:                                        <br>
 *       1、                                            <br>
 *       Date:                              <br>
 *       Author:                                        <br>
 *       Modification:                                     <br>
 *                                                                 <br>
 *       2、                                                        <br>
 *       Date:                                                  <br>
 *       Author:                                                   <br>
 *       Modification:                                          <br>
 *       
 * @Statement: If you are using the package or parts of it in any commercial way, a commercial license is required. <br>
 *   Visit <a href='http://www.bim-times.com'>http://www.bim-times.com</a> for more information.<br>
 * 
*********************************************************************************************************/
public class RotPosPathInterpolatorC extends Applet{
    public BranchGroup createBranchGroupSceneGraph() {
        BranchGroup branchGroupRoot = new BranchGroup();
        BoundingSphere bounds = new BoundingSphere(new Point3d(0.0,0.0,0.0),100);
        Color3f bgColor = new Color3f(1.0f,1.0f,1.0f);
        Background bg = new Background(bgColor);
        
        bg.setApplicationBounds(bounds);
        branchGroupRoot.addChild(bg);
        //定义平行光
        Color3f directionalColor = new Color3f(1.0f,1.0f,0.9f);
        Vector3f vec = new Vector3f(4.0f,-7.0f,-12.0f);
        
        DirectionalLight directionalLight = new DirectionalLight(directionalColor,vec);
        directionalLight.setInfluencingBounds(bounds);
        branchGroupRoot.addChild(directionalLight);
        
        //定义总变换
        Transform3D t1 = new Transform3D();
        TransformGroup group1 = new TransformGroup(t1);
        group1.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
        group1.setCapability(TransformGroup.ALLOW_TRANSFORM_READ);
        branchGroupRoot.addChild(group1);
        
        //定义鼠标旋转对象
        MouseRotate mouseR = new MouseRotate();
        mouseR.setTransformGroup(group1);
        branchGroupRoot.addChild(mouseR);
        mouseR.setSchedulingBounds(bounds);
        
        //定义Apperance类的对象及TransparencyAttributes类
        Appearance app1 = new Appearance();
        TransparencyAttributes transparency = new TransparencyAttributes(1,1.0f);
        transparency.setCapability(TransparencyAttributes.ALLOW_VALUE_READ);
        transparency.setCapability(TransparencyAttributes.ALLOW_VALUE_WRITE);
        
        app1.setTransparencyAttributes(transparency);
        app1.setCapability(Appearance.ALLOW_TRANSPARENCY_ATTRIBUTES_READ);
        app1.setCapability(Appearance.ALLOW_COLORING_ATTRIBUTES_WRITE);
        
        Material material1 = new Material();
        material1.setDiffuseColor(new Color3f(1.0f,0.0f,0.0f));
        app1.setMaterial(material1);
        
        //外观2
        Appearance app2 = new Appearance();
        Material material2 = new Material();
        material2.setDiffuseColor(new Color3f(0.0f,1.0f,0.0f));
        app2.setMaterial(material2);
        
        //外观3
        Appearance app3 = new Appearance();
        Material material3 = new Material();
        material3.setDiffuseColor(new Color3f(0.0f,0.0f,1.0f));
        app3.setMaterial(material3);
                
        //外观4
        Appearance app4 = new Appearance();
        Material material4 = new Material();
        material4.setDiffuseColor(new Color3f(1.0f,1.0f,0.0f));
        app4.setMaterial(material4);    
        
        //定义基本体积外观属性与坐标变换
        Transform3D t2 = new Transform3D();
        t2.setScale(1.8);
        TransformGroup group2 = new TransformGroup(t2);
        
        group2.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
        group2.setCapability(TransformGroup.ALLOW_TRANSFORM_READ);
        group2.addChild(new Sphere(0.2f,Sphere.GENERATE_NORMALS,100,app1));//装载
        
        //定义TransparencyInterpolator
        Alpha alpha1 = new Alpha(-1,Alpha.INCREASING_ENABLE|Alpha.DECREASING_ENABLE,0,0,3000,0,0,3000,0,0);
        TransparencyInterpolator transparency1 = new TransparencyInterpolator(alpha1, transparency,0.0f,1.0f);
        transparency1.setSchedulingBounds(bounds);
        group2.addChild(transparency1);
        
        t2 = new Transform3D();
        t2.setScale(1.8);
        TransformGroup group3 = new TransformGroup(t2);
        group3.addChild(new Cylinder(0.1f,0.5f,Cylinder.GENERATE_NORMALS,120,120,app2));//装载
        
        t2 = new Transform3D();
        t2.rotX(Math.PI*0.5);
        t2.setScale(1.8);
        
        TransformGroup group4 = new TransformGroup(t2);
        group4.addChild(new Cylinder(0.1f,0.5f,Cylinder.GENERATE_NORMALS,120,120,app3));//装载
        
        t2 = new Transform3D();
        t2.rotZ(Math.PI*0.5);
        t2.setScale(1.8);
        
        TransformGroup group5 = new TransformGroup(t2);
        group5.addChild(new Cylinder(0.1f,0.5f,Cylinder.GENERATE_NORMALS,120,120,app4));//装载
        
        //定义节点knots数组
        float[] knots = {0.0f,0.2f,0.4f,0.6f,0.8f,1.0f};
        //定义位置坐标pos数组
        Point3f[] pos = new Point3f[6];
        pos[0] = new Point3f(-0.4f,-0.4f,-0.5f);
        pos[1] = new Point3f(-0.3f,0.3f,0.3f);
        pos[2] = new Point3f(-0.0f,0.4f,-0.2f);
        pos[3] = new Point3f(-0.2f,-0.35f,0.3f);
        pos[4] = new Point3f(-0.3f,-0.3f,-0.15f);
        pos[5] = new Point3f(-0.4f,0.3f,0.4f);
        
        //定义标识旋转方向方向和角度的quat数组
        Quat4f[] quat = new Quat4f[6];
        quat[0] = new Quat4f(1.0f,1.0f,1.0f,0.0f);
        quat[1] = new Quat4f(0.0f,1.0f,1.0f,1.0f);
        quat[2] = new Quat4f(1.0f,1.0f,1.0f,1.0f);
        quat[3] = new Quat4f(0.0f,0.0f,1.0f,0.0f);
        quat[4] = new Quat4f(1.0f,0.0f,1.0f,1.0f);
        quat[5] = new Quat4f(01.0f,0.0f,1.0f,1.0f);
        
        //创建RotPosPathInterpolator类机器Alpha
        Alpha alpha2 = new Alpha(-1,Alpha.INCREASING_ENABLE|Alpha.DECREASING_ENABLE,0,0,8000,0,0,8000,0,0);
        RotPosPathInterpolator rotpos2 = new RotPosPathInterpolator(alpha2,group1,t1,knots,quat,pos);
        rotpos2.setSchedulingBounds(bounds);
        
        group1.addChild(rotpos2);
        group1.addChild(group2);
        group1.addChild(group3);
        group1.addChild(group4);
        group1.addChild(group5);
        
        branchGroupRoot.compile();
        return branchGroupRoot;
    }
    
    public RotPosPathInterpolatorC() {
        setLayout(new BorderLayout());
        GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration();
        Canvas3D canvas = new Canvas3D(config);
        add("Center",canvas);
        
        BranchGroup groupS = createBranchGroupSceneGraph();
        SimpleUniverse u1 = new SimpleUniverse(canvas);
        u1.getViewingPlatform().setNominalViewingTransform();
        u1.addBranchGraph(groupS);
    }
    
    public static void main(String[] args) {
        new MainFrame(new RotPosPathInterpolatorC(),780,730);
    }

}

原文地址:https://www.cnblogs.com/herd/p/11830962.html