|
Director 3D基础(二)
|
|
|
作者:macromedia.com 出处:译自macromedia.com 浏览次数:32767 加入日期:2002年09月09日 |
翻译:十年磨一剑
本教程的例子是用Macromedia的教程例子。
一、关于3D演员与精灵
在Director8.0或更早的版本中,一个演员都是存在影片中并完成特定的任务:一个数码声音、一个图片、一篇文字、一个按钮、一个图标、甚至是一个程序或行为。这些各式各样的2D演员仍在Director8.5中完成重要的任务,但Director8.5有了新的不同的3D演员了。一个3D演员包含一个完整的3D世界,包括一些模型们以及它们给赋予的行为等。
在Director8.0或更早的版本中,一个精灵是一个演员的实例——在分镜表中占有特定一段(即是角色)。如果你改变一个精灵,你不会改变这个演员的;但如果你改变了这个演员,你就改变了所有使用这个演员的精灵(角色)。(十年特注:这句话可以这样理解,一个演员可以做多个角色。)这些各式各样的精灵仍然以2D演员的实例的形式存在于Director8.5中。然而,一个3D演员却是不同的了,因为每个3D演员的3D精灵在该演员中通过使用摄像机的方法可以有不同的外观。每个摄像机能看到一个3D(世界)演员的外观:一个摄像机可以从前面来看一个模型,而另一个摄像机可以从侧面来看这个模型。由于每个在用同一个3D演员的3D精灵可以设定为不同的摄像机,所以用同一个3D演员的各式各样的精灵可以有有同的外观的。
二、在一个3D世界
在3D世界中的各组成部分之间的关系有点类似于2D精灵们和演员们之间的关系: 1. 一个模型资源包含可以许多模型共同的一整套的几何数据,就象许多精灵可以用同一个演员。 2. 同一材质球(shader)可以为多个模型定义颜色,就象一个演员可以定义多个精灵的外观。 3. 材质球使用许多表面贴图(textures)象模型使用许多模型资源,改变一种表面贴图可以影响所有使用它的材质球。 4. 同一种运动可以应用于不只一个模型,就象一个演员可为多个精灵所共用。
三、关于样本影片(这篇教程的)
相关附件
这篇教程的样本影片3Dintro.dir演示了一个3D演员里是各个组成元素是如何工作在一起的。这个影片包含了在Director中创建一个3D演员和联合使用2D和3D的技能。影片中用于解释发生了什么事的文本与图象精灵是与Director8.0或更早版本中一样受分镜表控制的。而3D演员与3D环境是受Lingo程序控制的。每个程序是通过单独的步骤加于运动的模型上的。
当你运行这个影片时,你可以点击各行文本以引发以下各步骤内容: 1. 创建一个空的3D演员 2. 添加一个模型(在这儿是一个球)进空的3D演员中 3. 为模型添加一个材质球(shader) 4. 为材质球添加表面贴图(texture),在这里就是为球加了表面图案 5. 使模型动起来 6. 创建第二个模型(在这儿是一个正方体),并且为两个模型建立父代关系(即一个是主,另一个是从) 7. 使第二个模型环绕第一个模型运动起来
通过这些步骤,影片提供了你能利用Director8.5的3D功能来做一些事情的一个简单的例子。你可以利用整套的3D命令做更多的事情的。本文剩下的部份就是介绍这个样本影片以及它所用到的行为等。
四、创建一个3D演员
样本影片3Dintro.dir已经包含了一个将要通过Lingo程序来添加模型们的3D演员。如果你建立了你自己的新影片,你就必须从创建一个空的3D演员开始。
创建空的3D演员的步骤: 1. 在Director中,选取Insert > Media Element > Shockwave 3D。 2. 为这个新的3D演员命名。
一个新的空的3D演员就被加进了演员表中了。
五、加一个球进3D世界中
样本影片使用了创建球体的行为,被附加于Create Sphere文本演员上,点击文本演员就加了一个球体进3D世界。
创建球体的行为的Lingo脚本如下:
on mouseUp(me)
if voidP( sprite(1).member.model(‘‘newSphere‘‘)) then tSprite = sprite(1) tMember = tSprite.member tTempModel = tMember.newModel(‘‘newSphere‘‘) tSphereResource = tMember.newModelResource (‘‘newSphereResource‘‘, #sphere)
tSphereResource.radius = 60 tTempModel.resource = tSphereResource tTempModel.parent = tMember.group(‘‘world‘‘) tTempModel.addToWorld() tCenterPoint = point(sprite(1).width/2, sprite(1).height/2) tPointToVector = tSprite.camera.spriteSpaceToWorldSpace (tCenterPoint - point(tSprite.left,tSprite.top))
tMember.model (tTempModel.name).transform.position = tPointToVector
go next end if
end
这个脚本是这样工作的: 1. 脚本创建一个新的模型,叫“tTempModel”。 2. 然后创建一个新的球体模型的资源叫“tSphereResource”。由于球体是原始的基本的形状,所以可以在空的3D世界凭空创建它。 3. 然后脚本添加一个定义半径长度的尺寸给模形资源。 4. 这个新创建的球体模型被指定用于叫“tTempModel”的球体模型。 5. 这个模型被指定为这个3D世界的子对象。 6. 把模型加进世界中。 7. 脚本给模型一个在3D世界里的位置。
留意,脚本并没有创建灯光。然而,3D世界里的灯光已被属性检查员打开了。
六、添加一个材质球shader
一旦创建了球体,就可以点击第二行文本“Create Shader”,利用添加材质球行为为球体添加材质球。添加材质球行为的脚本如下:
on mouseUp(me) if voidP( sprite(1).member.shader(‘‘newShader‘‘)) then tSprite = sprite(1) tMember = tSprite.member tTempShader = tMember.newShader(‘‘newShader‘‘, #standard) tMember.model(‘‘newSphere‘‘).shader = tTempShader go next end if end
脚本简介: 1. 确定是否有材质球加在球体上了。 2. 如果没有,用newShader()命令创建一个材质球。 3. 应用材质球于球体。
注意到在这个步骤中没有做任何可见到的东西――球体看起来毫无变化。添加材质球是为了使球体能给添加上可以改变外观的贴图(texture)。
七、添加贴图(texture)
添加了材质球之后,点击字样为“Add Texture”的文本运行建立贴图的行为。脚本如下:
on mouseUp(me) if voidP(sprite(1).member.shader(‘‘newTexture‘‘)) then tSprite = sprite(1) tMember = tSprite.member tTexture = tMember.newTexture(‘‘newTexture‘‘, #fromCastMember, member(‘‘Colors‘‘))
tMember.model(‘‘newSphere‘‘).shader.texture = tTexture tMember.model(‘‘newSphere‘‘).shader.textureMode = #none go next end if end
脚本流程: 1. 确定是否有贴图加于球体上了。 2. 如果没有,脚本使用原先已经被创建的名称叫“Colors”的位图演员创建一个新的贴图。 3. 然后脚本应用贴图于材质球中,于是就显示在球体的表面上。 4. 材质球的textureMode属性被设为#none,结果是贴图被应用于没有特别设定的状态。
八、使球体运动起来
添加了贴图之后,点击字样为“Set the Sphere in Motion”的文本运行旋转程序。脚本如下:
property pActive
on beginSprite(me) pActive = FALSE end beginSprite
on mouseUp(me) pActive = TRUE go next end
on enterFrame(me) if pActive then tSprite = sprite(1) tMember = tSprite.member tMember.model(‘‘newSphere‘‘).rotate(0,0,-5) end if end
脚本流程: 1. 当用户点击文本时,脚本把pActive的值设为TRUE,就可以使球旋转起来。 2. 然后脚本设定每次进入当前帧时都使球旋转5个单位。
九、添加一个方体
当球开始旋转起来之后,点击字样为“Create Box”的文本运行创建方体程序添加一个简单的方体。脚本如下:
on mouseUp(me) if voidP( sprite(1).member.model(‘‘newBox‘‘)) then tSprite = sprite(1) tMember = tSprite.member tTempModel = tMember.newModel(‘‘newBox‘‘) tBoxResource = tMember.newModelResource (‘‘newBoxResource‘‘, #box)
tBoxResource.width = 20 tBoxResource.height = 20 tBoxResource.length = 20 tBoxResource.left = 1 tBoxResource.right = 1 tBoxResource.top = 1 tBoxResource.bottom = 1 tBoxResource.front = 1 tBoxResource.back = 1 tTempModel.resource = tBoxResource tTempModel.parent = tMember.group(‘‘world‘‘) tTempModel.addToWorld() tCenterPoint = point(sprite(1).width/4, sprite(1).height/3) tPointToVector = tSprite.camera.spriteSpaceToWorldSpace (tCenterPoint - point(tSprite.left, tSprite.top))
tMember.model(tTempModel.name).transform.position = tPointToVector go next end if end
脚本流程: 1. 创建一个名叫“newBox”的模型。 2. 然后建立一个类型为“#box”的模型资源。由于方体是原始的基本的形状,所以可以在空的3D世界凭空创建它。 3. 脚本然后给模型资源添加一个尺寸,以标明方体的各个侧面与边。 4. 这个新的模型资源被应用于“newBox”模型上。 5. 这个模型被添加进3D世界并指定为这个3D世界的子对象。 6. 模型被指定在一个3D世界里的位置。 在这儿,缺省的材质球被使用,没有用上贴图。
十、使方体运动起来
最后,方体被加上运动。点击字样为“Orbit Box”的文本运行环绕运行方体程序。脚本如下:
property pActive
on beginSprite(me) pActive = FALSE end beginSprite
on mouseUp(me) tSprite = sprite(1) tMember = tSprite.member tMember.model(‘‘newBox‘‘).parent = tMember.model(‘‘newSphere‘‘) pActive = TRUE go next end
on enterFrame(me) if pActive then tSprite = sprite(1) tMember = tSprite.member tMember.model(‘‘newBox‘‘).rotate(0,20, 25) end if end on
简介环绕运行方体程序所做的: 1. 当鼠标点击在字样为“Orbit Box”的文本上时,方体被指定为球体的子对象。由于球体是不停旋转的,这就造成方体开始环绕球体,以对应于球体不停修正的位置变化。(也是就说方体与球体好象有无形的棒连在一起了,不但距离保持不变,而且表面相对的位置与不变,如在本例中球体对着方体的那一面永远不变。) 2. 方体自己也每次进入当前帧时都旋转。 |
|
| Top 5!五大顶级虚拟现实设备 |
| 类型:整理 | 时间:2006-8-22 | 点击:
375 |
第五位:一亿像素的虚拟现实小屋
上榜的第五位是美国爱荷华州立大学的一亿像素虚拟现实小屋,这个小屋在10英尺x10英尺的范围内,云集了价值400万美元的设备,其中包括一台拥有96颗GPU的HP电脑,24个Sony的数字投影仪,一个8声道的音频系统,以及超声波动作跟踪技术。据悉这个小屋将在今年的秋天开放。 第四位:游戏专家MetaMersion虚拟头盔
MetaMersion虚拟头盔能让玩家在一个虚拟的环境中体验PC游戏的快乐。在这个游戏系统中,如果想进入一个正前方房间,那就需要真的用玩家的脚向前“走”进去,而不是像传统的PC游戏是用键鼠操作;躲避游戏中的敌人也是同样道理,玩家蹲下来或者侧身走一步就可以做到,甚至可以用真实世界的障碍物做掩体;想要跃过障碍也一样,用你真正的脚向前跳一下就行,真的是太真实了。
第三位:虚拟的空气吉他
音乐爱好者有福了,这把虚拟吉他就是专门为你定制的。在弹奏虚拟吉他的时候,得先戴上一副桔色的手套,目的是便于追踪图像以便电脑确定你究竟在弹奏什么。玩这个可能需要勇气,知道的是你在弹凑虚拟的吉他,不知道的以为你脑子有什么问题呢。
第二位:VirtuSphere虚拟球
VirtuSphere虚拟球将游戏提升到了一个全新的水平,使用这个设备用户能够在一个虚拟的空间内行走。带着一个环视的头盔虚拟现实设备,玩家在球的内部朝任何一个方向走时,球体都能自由地转动。人佩带头盔显示器, 就能感受到虚拟的空间,同时还可以在虚拟空间使用一台特别操作器与物体进行交互。
第一位 Powered Shoes虚拟鞋
Powered Shoes这双虚拟鞋,可以让玩家利用脚下的滚轮,在迈步向前的时候,仍然能够停留在原地。同时将玩家的动作信号,通过背部的装置传送到虚拟机器或是游戏中。而相较于一般虚拟实境的步行模拟能力,Powered Shoes最大的特色,就是真的可以让玩家感受到步行的乐趣。
|
由于要完成一个项目,需用到脚本语言web编程,于是开始学习脚本语言。
记得网络课本里有很清晰而简练的阐述,于是翻出来:
网页分静态 动态
静态网页就是预先存储好服务器端的
动态网页是根据用户需求交互而再生成的,内容的生成既可以发生在服务器端,也可以发生再客户端
服务器端
CGI公共网关接口--即标准化的接口,允许web服务器与后端程序及脚本通讯,这些后端程序用perl 或Python编写。
嵌入法:
PHP JSP ASP
就是将生成网页的方法写成脚本 分别以.php .jsp .asp后缀 通过在网页里嵌入相应语句 来调用对应的脚本文件
客户端
Javascript 在网页里嵌入计算方法,可以在客户端生成新的网页
applet 由JVM解释执行的Java小程序 嵌入在网页里 速度很快,很好的移植性(JVM是一致的)
ActiveX Microsoft的产品 编译成指令集合的程序 可以在网页里执行 速度最快 但有安全问题
梦见自己牙齿脱落,然后从嘴里吐出来,全部是下排的牙齿
于是上网解梦,有好有坏:有家丧的,有生理警告的,有信念动摇的,有人际关系紧张的,也有预示成长的,或者发财的……
不过今天确实在点击youtube网站是说我是第999,999,999位访问者,获得了2,042美元
呵呵,于是我就填了一下联系方式,却发现是一个类似彩票又基金性质的一个网站的活动,随它呢
最近都是找工作,笔试,面试,可能是心理上有点焦虑吧
我试着问实验室的人谁做过掉牙的梦,居然m师兄反应强烈,不止3次了,呵呵,看来这个梦不是罕见的例子
恩,总之,好好面对每一天吧……
上午网新恒天面试,让我获益匪浅。这是我迄今最艰难的一次面试经验,但是越是困难,收获越大!
1 无论怎样,保持微笑。即使被严重打击了,也要保持,因为面试的还有你的心理素质。
2 专业的东西可以问得很细,很深,但是我们尽力而为,展示自己的基础和本色吧。
3 不要委曲求全,多考虑以后再议。因为我们要有自己的坚定。
晚上的EMC宣讲会,上海研发中心的总经理的演讲很有趣,画了一个人,讲了成功人士的各个器官。
确实,要有心,有头脑,有主心骨,有手,有胆,有胃,有脚,有感官。
从高峰到高峰,走铁丝,不要往下看,向远处看,朝美好看,才能到达彼岸
于是,我想,一个人有了很好的特质和能力,就算现在的所有不怎样出色,又如何了?
就像冰山--更多的是水面下那巨大的潜在山体。
I will be somebody!You have my words!