首页 | 博客群 | 公社 | 专栏 | 论坛 | 图片 | 资讯 | 注册 | 帮助 | 博客联播 | 随机访问
Java 3D API 官方教程:2.6 表面和属性[翻译]- -| 回首页 | 2005年索引 | - -百度和GOOGLE的中文搜索比较

Java 3D API 官方教程:2.6.1 表面结点组件[翻译]

                                      

2.6.1 Appearance NodeComponent

下面两个参考块列出了Appearance类的默认的构造函数和其它方法.

Appearance构造函数

默认的Appearance构造函数构造了一个Appearance对象,其对所有组件对象的引用均初始化为空值.所有的组件都是空引用,其属性默认的值也是可以预见的:点和线是绘制成分别的尺寸和宽度是1,并且是平滑的.初始的颜色是白色.不透明.深度缓冲可用,并且既能读又能写.

Appearance()

一个Appearance 组件常常通过调用如下的方法来引用一个到多个属性组件.这些属性类在2.6.3中有详细说明.

Appearance 方法 (未包含光影和纹理)

每一个方法都把相应的NodeComponent 对象设置成为表面属性包的一部分.

void setPointAttributes(PointAttributes pointAttributes)

void setLineAttributes(LineAttributes lineAttributes)

void setPolygonAttributes(PolygonAttributes polygonAttributes)

void setColoringAttributes(ColoringAttributes coloringAttributes)

void setTransparencyAttributes(TransparencyAttributes transparencyAttributes)

void setRenderingAttributes(RenderingAttributes renderingAttributes)

2.6.2 共享NodeComponent对象

几个不同的对象引用,因此共享相同的NodeComponent对象是合法,甚至是必要的.例如如图2-21所示,两个Shape3D对象引用了同一个Appearance组件,同时,不同的两个Appearance 对象共享着同一个LineAttributes组件.

共享同样的NodeComponent可以提高性能.例如,如果几个Appearance组件共享同样的需要锯齿化的LineAttributes组件, Java 3D渲染引擎将决定将锯齿化组在一块进行(group the antialiased wire frame shapes together).这将最小程度打开锯齿化开关,从而提高程序性能.注意到一个结点可以有一个或多个双亲.尽管如此,一旦NodeComponents被引用,它们就不再是结点对象类型.因为其不再具有任何真正意义上的双亲.因为, NodeComponent对象可能任何数目的其它对象被共享(引用).

 

【作者: wuxingblog】【访问统计:】【2005年10月23日 星期日 00:00】【注册】【打印

搜索

Google

Trackback

你可以使用这个链接引用该篇文章 http://publishblog.blogchina.com/blog/tb.b?diaryID=3298867

来自puahi fuuqiz的ma lsiiga的引用:

aru gqaefe

回复

- 评论人:匿名网友   2007-10-26 09:10:54   

请问为什么我在看JAVA3D网页时总提示小程序载入失败?

- 评论人:hp   2005-11-12 18:56:09   

谢谢
我也觉得奇怪,2D程序我试了一下,行啊,但3D是不是得有一些特殊的导入,怎么试都不行,很是郁闷。

- 评论人:wuxingblog   2005-11-12 16:03:05   wuxingblog的博客  

Java程序打包成EXE有以下几种办法(我也是从网上搜索来的):
将Java应用程序本地编译为EXE的几种方法(推荐使用JOVE和JET) 
1. 从www.towerj.com获得一个TowerJ编译器,该编译器可以将你的CLASS文件编译成EXE文件。 
2. 利用微软的SDK-Java 4.0所提供的jexegen.exe创建EXE文件,这个软件可以从微软的网站免费下载,地址如下: 
http://www.microsoft.com/java/download/dl_sdk40.htm 
jexegen的语法如下: 
jexegen /OUT:exe_file_name 
/MAIN:main_class_name main_class_file_name.class 
[and other classes] 
3. Visual Cafe提供了一个能够创建EXE文件的本地编译器。你需要安装该光盘上提供的EXE组件。 
4. 使用InstallAnywhere创建安装盘。 
5. 使用IBM AlphaWorks提供的一个高性能Java编译器,该编译器可以从下面的地址获得: 
http://www.alphaworks.ibm.com/tech/hpc 
6. JET是一个优秀的Java语言本地编译器。该编译器可以从这个网站获得一个
测试版本:http://www.excelsior-usa.com/jet.html 
7. Instantiations公司的JOVE http://www.instantiations.com/jove/product/thejovesystem.htmJOVE公司合并了以前的SuperCede,一个优秀的本地编译器,现在SuperCede 已经不复存在了。 
8. JToEXE 
Bravo Zulu Consulting, Inc开发的一款本地编译器,本来可以从该公司的 
网页上免费下载的,不过目前在该公司的主页上找不到了。
公司主页:http://www.bravozulu.com/
Java3D也是Java 程序,为什么会不识别呢,具体的我也暂进没试过,看来得研究研究.请进一步交流..

- 评论人:hp   2005-11-12 11:12:16   

我想问一下,把用java3D编的游戏打包变成.exe可执行文件,该怎么办, 上次下载了一个JET,但好象就是不识别3d。

- 评论人:sage   2005-11-11 21:28:46   

谢谢,已经解决了,正是你说的这种情况。我原来为了性能的原因用的就是
BOUND模式,只是自己重新设置了对象的Bound,但是自己设置的Bound不知为什么对Pick不起作用,它总是只认3点多的默认Bound。现在已经改用
GEOMETRY方式了,点取很正常。

- 评论人:wuxingblog   2005-11-09 18:11:33   wuxingblog的博客  

TO SAGE:
我分析了一下你的问题,给你提供一个思路。可能是你的pickMode设置的不对。一个是PickObject.USE_BOUNDS,一个是PickObject.USE_GEOMETRY。前者是边界轮廓相交来比较的,可能会不准确。你试试看,我不知道这个意见有没有帮助。

- 评论人:wuxingblog   2005-11-08 09:53:39   wuxingblog的博客  

TO XX:
您可以给我发邮件,或者用MSN.
我想问题出在,主类的TransformGroup即trans没有实例化.
因为这个异常就是因为变量在调用方法或者属性的时候,而变量又没有初始化的时候抛出的.

- 评论人:sage   2005-11-07 22:49:23   

我用java3d做了一个场景,场景中的不同位置分布着很多物体,这些物体都是用的BranchGroup。现在我想要在这个场景内实现一个简单的点取操作,就是当鼠标点到屏幕上的某个物体时,就返回这个物体的BranchGroup实例。我试过使用PickingObject类或是PickingCanvas类但是返回的物体总是有时准确有时不准,往往返回的对象是所点取的对象周围甚至是相反方向上的物体。自己查了一下,发现设置PickRay的原点和方向都是对的,只是到了pickClosest()返回的SceneGraphPath就不对了。这个问题已经困惑我很长一段时间了,不知能不能给些帮助,不胜感谢!

- 评论人:xx   2005-11-06 11:24:37   

非常感谢
我这这么做了,但总是有一个Exeception in thread "main" java.lang.NullPointerExeception ,请帮忙看一下
可是这里内容放不下呀

- 评论人:wuxingblog   2005-11-05 16:42:08   wuxingblog的博客  

TransformGroup本身就提供了读取其拥有的Transform3D对象的方法.就是void getTransform3D(Transform3D t);你这里可以这么写,
Transform3D t;
trans.getTranform3D(t);就可以获得了trans对应的Transform3D对象.

- 评论人:xx   2005-11-03 20:59:46   

请问一下,在 Behavior 子类中构造函数函数的参数是主类中的一个TransformGroup实例trans,eg. myBehavior(TransformGroup trans,long millisecond)如果要在函数中用到 trans 坐标,怎么通过 trans 知道相应的 Transform3D 的实例 transform 呢?谢谢

验证码:   
评论内容: