一个球体与三个圆柱体形成一个组合体,在该组合体中,球体的透明度属性是由全透明到不透明之间变换,而且包括:旋转、平移等变换。

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: luozhubang <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);
  }

}

Java3D-对象基本变换的更多相关文章

  1. Java3D读取3DMax模型并实现鼠标拖拽、旋转、滚轮缩放等功能

    /**-------------------------------------------------代码区--------------------------------------------- ...

  2. Java3d 案例程序

    今天偶尔翻出了很久以前写的java3d程序,很怀念曾经探索java3d解析.渲染ifc数据的日子 package com.vfsd.test0621; import java.applet.Apple ...

  3. 如何一步一步用DDD设计一个电商网站(九)—— 小心陷入值对象持久化的坑

    阅读目录 前言 场景1的思考 场景2的思考 避坑方式 实践 结语 一.前言 在上一篇中(如何一步一步用DDD设计一个电商网站(八)—— 会员价的集成),有一行注释的代码: public interfa ...

  4. javascript中的Array对象 —— 数组的合并、转换、迭代、排序、堆栈

    Array 是javascript中经常用到的数据类型.javascript 的数组其他语言中数组的最大的区别是其每个数组项都可以保存任何类型的数据.本文主要讨论javascript中数组的声明.转换 ...

  5. 探究javascript对象和数组的异同,及函数变量缓存技巧

    javascript中最经典也最受非议的一句话就是:javascript中一切皆是对象.这篇重点要提到的,就是任何jser都不陌生的Object和Array. 有段时间曾经很诧异,到底两种数据类型用来 ...

  6. Asp.Net WebApi核心对象解析(下篇)

    在接着写Asp.Net WebApi核心对象解析(下篇)之前,还是一如既往的扯扯淡,元旦刚过,整个人还是处于晕的状态,一大早就来处理系统BUG,简直是坑爹(好在没让我元旦赶过来该BUG),队友挖的坑, ...

  7. JS核心系列:浅谈原型对象和原型链

    在Javascript中,万物皆对象,但对象也有区别,大致可以分为两类,即:普通对象(Object)和函数对象(Function). 一般而言,通过new Function产生的对象是函数对象,其他对 ...

  8. Chrome出了个小bug:论如何在Chrome下劫持原生只读对象

    Chrome出了个小bug:论如何在Chrome下劫持原生只读对象 概述 众所周知,虽然JavaScript是个很灵活的语言,浏览器里很多原生的方法都可以随意覆盖或者重写,比如alert.但是为了保证 ...

  9. XStream将java对象转换为xml时,对象字段中的下划线“_”,转换后变成了两个的解决办法

            在前几天的一个项目中,由于数据库字段的命名原因 其中有两项:一项叫做"市场价格"一项叫做"商店价格" 为了便于区分,遂分别将其命名为market ...

  10. ASP.NET内置对象的总结

    1. Response对象可形象的称之为响应对象,用于将数据从服务器发送回浏览器. 实例源码:链接: http://pan.baidu.com/s/1dDCKQ8x 密码: ihq0  2. Requ ...

随机推荐

  1. 使用Intellij Idea打开项目不能显示树形目录

    按下列步骤操作:1. 关闭IDEA, 2.然后删除项目文件夹下的.idea文件夹3.重新用IDEA工具打开项目 Open...

  2. SpringTask定时任务实例讲解【Java获取微信公众平台accessToken及jsapiTicket】

    项目中调用微信公众平台的接口时,因为获取到的accessToken及jsapiTicket有效时长只有两个小时,需要不断更新. 所以做了个定时任务,记录一下. .SpringTask实现有两种方式,一 ...

  3. 解决win10 phptoshop #fff纯白不是这样的白 显示器高级的问题

    1.打开控制面板,右上角搜索栏输入“颜色管理”, 再打开“颜色管理”.2.在“设备”选项卡里,“设备”下拉列表,选择“显示器”.3.可能你安装过显示器的驱动程序,下面的配置文件中会有一个默认的配置文件 ...

  4. golang的项目结构 相关知识

    ### 项目结构 ``` ├── bin │   ├── login │   └── main ├── pkg │   └── darwin_amd64 │   └── login │   └── a ...

  5. MySQL实战 | 02-MySQL 如何恢复到半个月内任意一秒的状态?

    原文链接:MySQL是如何做到可以恢复到任意一秒状态的? 看到这个题目是不是觉得数据库再也不用担心服务器 crash 了? 那我们需要学习为什么可以这么做?以及如何做? 即为什么可以恢复到任意时间点? ...

  6. UGUI transform

    在编辑器中将UGUI对象挂在另一个物体上,UGUI预制体根对象位置调成零,调好位置后保存 由gameframework初始化,再挂到对应父对象上时,位置会有偏差,会更改锚点旋转等信息,需在OnWind ...

  7. python中print的几种用法

    python中的print有几种常用的用法: 1. print("first example") 2. print("second", "exampl ...

  8. python3 之初学者常犯的5个错误

    1. Creating a copy of dictionary or lists. Whenever you need to make a copy of a dictionary or list, ...

  9. 深入理解java虚拟机 精华总结(面试)(转)

    一.运行时数据区域 3 1.1 程序计数器 3 1.2 Java虚拟机栈 3 1.3 本地方法栈 3 1.4 Java堆 3 1.5 方法区 3 1.6 运行时常量池 4 二. hotspot虚拟机对 ...

  10. 使用 acl 库针对 C++ 对象进行序列化及反序列编程

    在开发网络应用程序时,各个模块之间的数据通信可谓是家常便饭,为了应对这些数据通信时数据交换的要求,程序员发明了各种数据格式:采用二进制数据结构(早期 C 程序员).采用 XML.采用SOAP(坑人的设 ...