zoukankan      html  css  js  c++  java
  • 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);
        }
    
    }

  • 相关阅读:
    【Android】给Android Studio设置代理
    Android studio如何使用SVN进行版本控制?
    Android studio
    nohup java -jar 启动java项目
    Linux命令发送Http GET/POST请求
    Java 读取配置文件的几种方式
    java -jar 报错 Error: A JNI error has occurred, please check your installation and try again
    java.net 发送http请求
    textarea高度自适应
    webrtc切换媒体设备
  • 原文地址:https://www.cnblogs.com/herd/p/11830962.html
Copyright © 2011-2022 走看看