admin 管理员组

文章数量: 887021


2023年12月17日发(作者:免安装mysql安装教程)

还是把这部分的注释写出来了,没有API文档写这东西很辛苦...

运行效果

其实还是有毛病的,本来是六个不同颜色不同位置的点,结果只显示出一个点绕圈儿

颜色矢量、程序代码都没有问题,不理解是怎么回事...

终于知道错在哪里了!!!对点进行设定的方法有两种,这里应选有“s”的,表示改变多个点的位置及颜色属性!!

rdinates(0, vert);

ors(0, color);

rdinateIndices(0, index);

orIndices(0, index);

以下是Point3D包中的Point5代码

package Point3D; //包~

import ; //可作为小程序应用

import Layout; //窗体布局管理器

import ame; //建立主窗体用

import se.*; //Java3D空间类

import ry.*; //可直接调用的形状

import h.*; //矢量运算引用

import .j3d.*; //Java3D核心引用

@SuppressWarnings("serial")

public class Point5 extends Applet {

private BranchGroup createSceneGraph(){

BranchGroup objRoot = new BranchGroup();

//建立子图根节点

ld(createObject());

//将createObject子程序建立的Group作为字节点

e();

//编译3D场景

return objRoot;

//返回该节点

}

private Group createObject(){

Transform3D t = new Transform3D();

TransformGroup objTrans = new TransformGroup(t);

//创建变换组,并用Transform3D三维变换组来初始化

ability(_TRANSFORM_WRITE);

//设置变换组为可改变状态

Shape3D shape = new pointShape();

//pointShape是外部函数,内容为建立六个位置颜色各不同的点

//pointShape我就不写了,不用六个点也可以,只要是Shape3D的形状就行

ld(shape);

//将这组点放入变换组中

//这里的shape可以换成别的已经建立好的形状如ube

Transform3D yAxis = new Transform3D();

//三维变换组,这里打算让点围绕Y轴转动

Alpha rotationAlpha = new Alpha(-1,SING_ENABLE,0,0,4000,0,0,0,0,0);

/*

* Alpha类对象用于创建随时间变化的功能。

* Alpha(int loopCount, long increasingAlphaDuration)

* 这个构造函数仅仅把loopCount和increasingAlphaDuration作为其参数,

* 而对所有其它的参数则赋以默认值。这导致了Alpha对象产生从0递增到1之间的值。

* loopCount参数提供了循环次数。如果loopCount是–1, alpha对象则无限循环下去。

* 从0增长到1的时间则在第二个参数中以毫秒的形式指定。

* 参数:

* loopCount – 运行这个alpha对象的次数。值为 -1时则作无限循环。

* increasingAlphaDuration – alpha从0增长到1的时间,以毫秒形式指定。

*/

RotationInterpolator rotator = new RotationInterpolator(rotationAlpha,objTrans,yAxis,0.0f,(float)*2.0f);

/*

* RotationInterpolator(Alpha alpha, TransformGroup target)

* 这个类定义了一个行为,能在一对角度(指定的Alpha对象所产生的值)之间线性地插入修改其目标TransoformGroup的旋转组件。

* 这个插入的角度就用于生成一个变换。

* 参数:

* alpha –根据函数的引用的不同而时间也不同。

* target – 要修改的TransformGroup对象

*/

BoundingSphere bounds = new BoundingSphere(new Point3d(0.0,0.0,0.0),50.0);

//定义可视范围

edulingBounds(bounds);

//将旋转器为设定可视范围

ld(rotator);

//将行为添加到变化组中

return objTrans;

//返回该变化组

}

public Point5(){

//构造函数,建立对象时执行

setLayout(new BorderLayout());

//设置布局器为Layout

Canvas3D c =new Canvas3D(ferredConfiguration());

//创建3D画布,并应用显卡环境获取参数

add("Center",c);

//将画布添加到主窗体

BranchGroup scene = createSceneGraph();

//将Group根节点获取到scene

SimpleUniverse u = new SimpleUniverse(c);

//用画布创建空间模型

wingPlatform().setNominalViewingTransform();

////切换模型到位图模式迫使我们能看得到3D场景

nchGraph(scene);

//将scene场景放入空间中

}

public static void main(String[] args){

new MainFrame(new Point5(),400,400);

//用主程序创建基本窗体,建立对象,自动运行构造函数进行各项生成

}

}

还是把pointShape类放上来吧 两段代码一起编译就能运行了~当然,得先装Java虚拟机和Java3D库

这个我就不写注释了,会的人一看就懂

package Point3D;

import .j3d.*;

public class pointShape extends Shape3D {

float vert[] = {

0.5f, 0.5f, 0.0f, -0.5f, 0.5f, 0.0f,

0.3f, 0.0f, 0.0f, -0.3f, 0.0f, 0.0f,

-0.5f,-0.5f, 0.0f, 0.5f,-0.5f, 0.0f

};

float color[] = {

0.0f, 0.5f, 1.0f, 0.5f, 0.0f, 1.0f,

0.0f, 0.8f, 2.0f, 1.0f, 0.0f, 0.3f,

0.0f, 1.0f, 0.3f, 0.3f, 0.8f, 0.0f

};

public pointShape(){

int[] index ={ 0, 2, 3, 4};

int vCount = 6;

int iCount = 4;

IndexedPointArray point = new IndexedPointArray(vCount,NATES|_4,iCount);

rdinates(0, vert);

ors(0, color);

rdinateIndices(0, index);

orIndices(0, index);

PointAttributes pa = new PointAttributes();

ntSize(20.0f);

ntAntialiasingEnable(true);

Appearance ap = new Appearance();

ntAttributes(pa);

metry(point);

earance(ap);

}

}

类别:[爪哇语]|

| 分享到i贴吧 | 浏览(816) | 评论 (0)


本文标签: 对象 建立 变换 创建 时间