页面:
点这儿参观==============================================================================
Director 8.5:学习基础3D
每人手里都有Director8.5么?没有,那你还等什么!最新的Director8.5加入了Direcotr前所未有的元素:3D成员。我不谈什么缓慢的VRML,也不谈quicktime的全景图。我所要讲述的是游戏质量的3D(game-quality)。MM公司和Intel公司共同开发的3D引擎使之成为可能。那么,我们来开始应用它吧。
这部分是我这四章节中的第一部分,内容是关于原始模型(primitives),原始模型是可以用lingo来创建的3D物件。没有它,我们只能用其他昂贵的3D建模软件比如3Dmax来作3D图形。如果你有钱买的起的话,用这些建模软件还是很不错的。但是我们今天谈论的是不用化肥额外费用的3D原始模型。
(中间的例子省略)
在第一个例子当中,我们要作一些容易的,一些在老版本的Director中无法创建的东西,我们将创建一个旋转的球体。在以下3个章节中,我们会创建其他类型的原始模型,并让他们动起来,学习使用照相机。
首先,你要作的第一件事是,创建一个3D成员。最简单的办法就是选择插入->媒体元素->shockwave3D,你就会看到在演员组里出现一个新的成员,将它命名为“Scene”.
这个成员是一个小的3D地球,现在我们创建一个用于帧脚本中的行为。这个行为首先要作的就是用属性变量pScene关联上那个成员,这很容易实现。3Dlingo经常会建立一些和那些成员模型的某个属性的某个属性关联的联系。这对于用变量来存储这些关联很有帮助,这样会让你的程序短一些,更快一些。
当你从头创建一个任意的3D场景的时候,你要作什么呢,那就是用resetWorld命令来重置这个地球。其实这在编辑你的场景时候很容易实现,要知道每一次运行程序都要从头开始的。
以下是这个行为,声明了属性变量pScene,它将和将来出现的球体模型关联。
property pScene, pSphere
on beginSprite me
-- get the member
pScene = sprite (me.spriteNum).member
-- reset the world before starting
pScene.resetWorld ()
在我们创建球体之前,我们先作一个星星的背景。背景是3D成员的一个特殊的属性。它是出现在所有的模型后面的一张静态图片。它会替代3D成员默认的颜色。当你想创建一个星空中旋转的飞船。用这个属性会使你的星空背景更加逼真。
这张图实际上是一张位图。创建背景需要两个步骤,第一,要创建一个名字为“backdrop”的材质。3D成员将其存储为类似材质的形式,这样就可以应用在一个或者所有的模型上。所以,我们要在创建背景之前先创建这个材质。
下一步就是用insertBackdrop命令在场景中放置它。背景是照相机的属性。一个照相机就是观察场景的一个视觉角度。每一个3D成员都有一个默认的照相机。camera 1,这就是我们现在要用到的。我们要在几周之内了解更多关于照相机的知识。
-- 创建星空背景
pScene.newtexture ("backdrop", #fromCastMember, member ("stars"))
pScene.camera (1).insertBackdrop (1, pScene.texture ("backdrop"),point (0, 0), 0)
现在我们可以开始创建球体了。记住,在创建任何模型之前先要创建一个源模型。就好像创建一个蓝图似的。一旦你拥有了一个源模型,你就可以用它创建一个或者更多的模型,因此,我们要创建一个球体的源模型。我们把它命名为“SphereResource”,和我们连接它的变量同名,这样我们可以很容易地使用它。以后,通过源模型的名字来指向它也是一种方式。现在,我们创建了sphereResource这个变量,我们就可以用它来指向源模型了。
-- 创建一个球体源模型
sphereResource = pScene.newModelResource ("SphereResource", #sphere)
源模型的类型不同,它所拥有的属性也不同,一个球体的源模型拥有半径属性,现在,我们将这个属性设成50。
sphereResource.radius = 50
接下来,我们要创建实际的模型了。我们要把它放在场景的中心位置。将其命名为“Sphere”,但是我们将来用变量pSphere来指向这个模型会更容易一些。
-- 创建模型
pSphere = pScene.newModel ("Sphere", sphereResource)
下面,我们为其关联一个材质。之前,我们的这个球模型只有一个默认的红白相间的材质。为这个模型关联一个材质还真是一个相当麻烦的过程。首先你需要创建一个新的材质,就像刚才我们创建那个星空的材质一样,每一个材质我们都要命名成不同的名字。我们就将这个材质命名为“Texture”。我们从成员“texture”中获得图象。
-- 为球体关联一个材质
pScene.newtexture ("texture",#fromCastMember, member ("texture"))
当然,你要做的不仅仅是为这个模型关联一个材质。还要必须创建一个叫做阴影(shader)的东西。阴影定义的是模型的哪一侧,那一面要显露出来。我们创建一个标准的阴影,名字叫“shader”。然后,我们要将材质关联到阴影上。
pScene.newshader ("shader", #standard)
pScene.shader ("shader").texture = pScene.texture ("texture")
为了激活模型的阴影,我们需要将模型的阴影列表中的第一个元素设置成我们刚刚创建的那个阴影。球体模型只拥有一个阴影,它覆盖球体的整个表面。那么材质就会扑满球体的整个表面。
pSphere.shaderList[1] = pScene.shader ("shader")
end
我们刚才用的材质是一张火星表面的整图。是无缝的。就是说右边界和左边界非常完美的接合。如果不是这样的话,我们就能在球体的材质上看到区分左右部分的那条线了。最后一步,我们让球体转起来。我们可以利用行为中的exitframe句柄来调用球体模型的属性,用rotate命令来让模型围绕y轴每帧转一度。
on exitFrame me
-- rotate 1 degree per frame
pSphere.rotate (0, 1, 0)
end
(这是最终的影片)。你的浏览器中必须装了Shockwave 8.5 ,下周我们将看看其他类型的源模型。
----------------------------------
欢迎权威大侠斧正 :p