java3d vector3d_Java3D-对象基本变换

这个Java3D示例展示了如何创建一个由球体和圆柱体组成的组合体,并实现其透明度从透明到不透明的平滑变化,同时包含旋转和平移等动态变换效果。通过使用Alpha、TransparencyInterpolator和RotPosPathInterpolator类,实现了对象的位置和透明度的路径插值动画。
摘要由CSDN通过智能技术生成

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

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.

* The whole package including this class is licensed under

*

* @ClassName:

* @Directory:

* @author: luozhubang

* @version: v1.0.0

* @date:

* @Description:

* 1、

* 2、

* @Others: 暂无说明

* @Modification History:

* 1、

* Date:

* Author:

* Modification:

*

* 2、

* Date:

* Author:

* Modification:

*

* @Statement: If you are using the package or parts of it in any commercial way, a commercial license is required.

* Visit http://www.bim-times.com for more information.

*

*********************************************************************************************************/

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);

}

}

3622d2dc826c9c7051d9a78e36399fc6.png

0d69f43346241e1da7eb17a7ec2f63cc.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值