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)
版权声明:本文标题:JAVA 3D 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/free/1702799107h431339.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论