如何在vrml中实现 不同图片的变化

如何在vrml中实现 不同图片的变化,第1张

2 实现动画的方法2.1 视点移动

景物不变视点是人们在三维世界中观察场景时眼睛所在的位置和所看的方向、视角等。ViewPoint节点为所有这些变量提供初始值。当进入一个世界后,把化身放在文件中遇到的第1个ViewPoint节点中。由于绑定的存在,可以通过将能够控制用户视点的事件发送给ViewPoint。随着视点的变化,化身的位置也发生变化,因此观察到的场景也不断变化,从而实现了动画。

用此方法实现动画,需定义1个ViewPoint(VP)节点,用于移动对象的插值器PositionInterPolator(P)节点,用于旋转对象的插值器OrientationInterPolator(O)节点,以及作为set_fraction eventIn资源的TimeSensor(Time)节点。建立的主要路由如下:

ROUTE Time.fraction_changed TO P.set_fraction

ROUTE Time.fraction_changed TO O.set_fraction

ROUTE P.value_changed TO VP.set_position

ROUTE O.value_changed TO VP.set_orientation

这里用OrientationInterPolator和PositionInterPolator共同工作,使得当化身绕对象转身时,保证化身始终面对它们。这种实现动画的方法,比较适合动画中包含的立体景物较多的情况。

2.2 视点不变

景物移动这是一种与视点有关的实现动画的方法,它将用户绑定到固定的视点,通过物理对象位置的移动或旋转实现动画。位置移动的对象定义在Transform(T)节点中。为实现对象的移动或旋转,也需定义OrientationInterPolator(O)或PositionInterPolator以及TimeSensor(Time)节点。建立的主要路由如下:

ROUTE Time.fraction_changed TO O.set_fraction

ROUTE O.value_changed TO T.set_rotation

这种实现动画的方法,比较适合动画中包含的立体景物较少的情况,如球体的转动等。

2.3 使用纹理坐标的动画

在VRML中可以用ImageTexture节点为对象添加纹理。一般是采用缺省设置添加纹理,但也可以对纹理进行缩放、平移、旋转,这些 *** 作通过TextureTransform节点实现,即通过这个节点控制纹理到对象映射的s和t坐标(纹理坐标)。

另外一种方法是:通过TextureCoordinate节点在1个形状的每一个顶点控制s和t坐标。只有IndexedFaceSet和ElevationGrid节点允许使用该节点。这些形状中的每一个顶点都有1个texCoord域,其中可放入TextureCoordinate节点。TextureCoordinate节点定义如下:

TextureCoordinate{

  ExposedField MFVec2f Point[]

point域中的值是在每一个坐标处使用的s和t值。如果使用1个路由到set_point eventIn的插值器,便可以选择纹理坐标。这个EventIn是1个MFVec2f。VRML并没有1个内部节点用于执行这种插值,因此,只能用Script节点完成。下面是实现水上波纹动画的程序清单:

Group{

 children Shape{

appearance Appearance{

 texture ImageTexture{ur1″Water.gif″}

 }

 geometry IndexedFaceSet{

coord DEF C Coordinate{

 point[-5 -9 1,5 -9 1,5 3 1,-5 3 1]

 }

 coordIndex[0,1,2,3]

 texCoord DEF TT TextureCoordinate{}

 }

DEF TS TimeSensor{

cycleInterval 15

stopTime -1

loop TRUE

DEF S Script{

 eventIn SFFloat fraction

 eventOut MFVec2f translation

 field SFVec2f tt1 0 0

 field SFVec2f tt2 0 0

 field SFVec2f tt3 0 0

 field SFVec2f tt4 0 0

 url″vrmlscript:

function fraction(value){

 tt1[1]=9*value;

 tt2[1]=6*value;

 tt3[1]=3*value;

 tt4[1]=1*value;

 translation[0]=tt1;

 translation[1]=tt2;

 translation[2]=tt3;

 translation[3]=tt4;

}″

 }

 ROUTE TS.fraction_changed TO S.fraction

 ROUTE S.translation TO TT.set_point

可以用类似的方法使用TextureTransform节点,模拟具有纹理的瀑布。

2.4 使用BackGround节点创建动画

VRML中的Background(B)节点为虚拟世界提供背景颜色或图像。通过颜色插值器ColorInterpolator(CI)在1组颜色关键码值之间进行插值,产生value_changed事件,将变化后的颜色路由到BackGround节点的skyColor或groundColor域,形成动画效果。

为了接收颜色插值器value_changed事件产生的颜色值,定义1个Script节点如下:

DEF S Script{

EventIn SFFloat fraction

EventOut MFColor color

Field SFNode CI USE CI

url ″vrmlscript:

 function fraction(){

color[0]=CI.value_changed;

color[1]=CI.value_changed;

}″}

ROUTE TS.fraction_changed TO CI.set_fraction

ROUTE TS.fraction_changed TO S.fraction

ROUTE S.color TO B.set_skyColor

2.5 帧动画

利用VRML中的角色(1个平坦的始终面向用户的图像)和Switch节点便可在VRML中实现帧动画。具体做法为首先创建一系列图像;用它们制作一些角色,使这些角色成为Switch的子节点;当在这些子节点之间快速切换时,便形成动画。这种切换完全由创作者控制,这就必须用Script节点对它进行编程来完成某一特定的任务。例如:要播放由10个角色组成的动画,所需定义的Script节点如下:

DEF Myscript Script{

 eventIn SFFloat fraction

 eventOut SFInt32 whichChoice

 url″vrmlscript:

 function fraction�value(){

 whichChoice=value *9;

 }″

然后通过如下路由实现动画:

ROUTE TS.touchTime TO Time.startTime

ROUTE Time.fraction_changed TO MyScript.fraction

ROUTE MyScript.whichChoice TO MySwitch.whichChoice

其中的MySwitch定义了包括各个角色的Switch节点。

网络三维技术的出现最早可追朔到VRML。

VRML(Virtual Reality Modeling Language)即虚拟现实建模语言。

VRML开始于20世纪90年代初期。1994年3月在日内瓦召开的第一届WWW大会上,首次正式提出了VRML这个名字。

1994年10月在芝加哥召开的第二届WWW大会上公布了规范的VRML1.0草案。

1996年8月在新奥尔良召开的优秀3D图形技术会议-Siggraph\'96上公布通过了规范的VRML2.0第一版。它在 VRML1.0的基础上进行了很大的补充和完善。它是以SGI公司的动态境界Moving Worlds提案为基础的。

1997年12月VRML作为国际标准正式发布,

1998年1月正式获得国际标准化组织ISO批准简称VRML97。VRML97只是在VRML2.0基础进行上进行了少量的修正。

VRML规范支持纹理映射、全景背景、雾、视频、音频、对象运动、和碰撞检测--一切用于建立虚拟世界的所具有的东西。

但是VRML并没有得到预期的推广运用,不过这不是VRML的错,要知道当时14.4k 的modems是普遍的。VRML是几乎没有得到压缩的脚本代码,加上庞大的纹理贴图等数据,要在当时的互连网上传输简直是场噩梦。

1998年。VRML组织把自己改名为Web3D组织,同时制订了一个新的标准,Extensible 3D (X3D),到了2000年春天,Web3D组织完成了VRML到X3D的转换。X3D整合正在发展的XML、JAVA、流技术等先进技术,包括了更强大、更高效的3D计算能力、渲染质量和传输速度。

在此期间,一场Web3D格式的竞争正在进行着。在去年SIGGRAPH上,展示了超过30种Web3D格式。当然,只会有其中的一小部分能够脱颖而出最终生存下来。在本文后半部分将会对一些有实力且目前已经取得了一定市场的格式作介绍。

最近一些厂商瞄准了一个市场,就是从二维图像生成三维物体。一般都是通过拍摄一个物体的多个方向,再由特殊的软件转化为3D网格。象viewpoint、realVIZ、Immersion。

尽管出现了如此之多的解决方案,难道让我们每个人都跳上了Web3D的列车了吗?一些困难和障碍仍然存在。

首先是没有统一的标准。每种方案都使用不同的格式和方法。Flash能够在今天大行其道是因为它是唯一的,JAVA在各平台得到运用也因他是唯一的。没有标准,3D在Web上的实现过程还将继续挣扎。

另外插件的问题也是一个困绕。几乎每个厂商开发的标准都需要自己插件的支持,这些插件从几百K到几兆不等,在带宽不理想的条件下必然限制了一部分人的使用热情。

VRML创作工具很多是“所见即所得”式的,通过图形界面可以方便地创作虚拟境界,但VRML不仅仅是普通的三维设计,尽管这些工具很容易上手,却往往屏蔽掉了VRML标准的具体细节,因为如果想深入掌握VRML,还需要全面了解节点、域、检测器等技术细节,而达成此目的的最好方法就是用编写文本文件的方式创作VRML境界。

记得好象看过你是用max导出的

可以在导出的时候设置一下路径 如图中的红框显示

修改你的贴图位置  确保你给的路径上面

你可以把vrml 文件放到VrmlPad中去看看左侧的资源栏中是否贴图带了叉

如果带了 表示你导出的时候  指定的路径中没有这些贴图

比较方便一点的办法是

你可以把导出的vrml文件与贴图文件在放同一个文件夹下

这样就不需要设置导出路径了  在同一个文件夹下 你也要去判断一下imagetexture的url是否正确

如果路径正确 那么就考虑是不是其他问题的影响了

比如material节点下面的diffuseColor是不是黑色什么的  这个一般是maya导出碰到的问题

以上都不行的话可以加好友聊聊

至于贴图的大小与模型大小没有什么关系

至多是小贴图给了大模型  贴图比较模糊  把重复数调高了之后就清晰了

重复数过高  贴图清晰了 但是会有地毯花纹的感觉

看自己衡量了


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/bake/11531625.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-16
下一篇 2023-05-16

发表评论

登录后才能评论

评论列表(0条)

保存