4.12 通过参数配置场景物体的位置信息
读者可能已经注意到了,之前的场景物体都是通过在3dsmax中设置好位置后,直接导出使用,这样做虽然非常方便,但不利于进行场景物体的位置改变(如导出物体的中心点未在原点位置,此物体将不能正确自旋)。本节,我们将在剧情6中,在高台上放置一个灵龛,并在灵龛里放置一个骷髅手,其中灵龛固定不动,可以直接使用3dsmax导出,骷髅手需要伸出、缩回并自旋。图4.11中(a)显示了初始时手的位置,此时手在灵龛后面,玩家不会看到。(b)图显示了手前向伸出的最大距离。
图4.11 灵龛与骷髅手的初始位置设置
在3dsmax中将此灵龛按照图中位置直接导出,并在[SceneMod1]对灵龛模型进行配置,配置项如下:
...
8mod_lv1=model\LearnW3D\Chapter1\lingkan.obj
8tex=model\LearnW3D\Chapter1\lingkan.bmp
8mtl=model\LearnW3D\Chapter1\lingkan.mtl
8GenShadow=0
...
对于此骷髅手,因为此物体需要移动并自旋,我们不能在图中位置直接导出,需要在3dsmax中将此手的位置归零后再导出,归零后在3dsmax中的位置如下图所示:
图4.12 骷髅手的归零位置
随后在[SceneMod1]中对此手添加配置项,如下所示:
...
9mod_lv1=model\LearnW3D\Chapter1\kuloushou.obj
9tex=model\LearnW3D\Chapter1\kuloushou.bmp
9mtl=model\LearnW3D\Chapter1\kuloushou.mtl
9GenShadow=0
9posx=240.963
9posy=628.531
9posz=-856.255
9ra=0.0
9rx=0.0
9ry=0.0
9rz=0.0
9sx=1.0
9sy=1.0
9sz=1.0
...
配置项中posx、posy和posz表示此物体在3dsmax中的位置(位移),此位置为图4.11中手的3dsmax位置。ra、rx、ry和rz分别为此物体自旋角度,自旋轴x分量、y分量和z分量,这里默认为0.0,即不做任何自旋转。sx、sy和sz表示此物体的缩放系数x分量、y分量和z分量,这里设置为1.0,表示保持原始大小,数值越大表示物体放大系数越大,物体也越大,小于1.0表示物体缩小。(注意:如设置不自旋或不设置缩放,可以不用添加这两个配置项,因为引擎会自动添加默认值。具体参见附录中W3D引擎配置项说明)
4.13 通过程序控制光源
在玩家到达高台后,需要逐渐让此场景的方向光变弱,直到完成没有方向光,这时在灵龛前一盏黄色点光缓缓点亮,为实现场景中方向光的控制,需要使用函数W3DSetPTModDirectionLightInfo设置场景中方向光信息,此函数原型如下:
函数定义 | BOOL W3DSetPTModDirectionLightInfo(DWORD dwModID, BOOL bChangeAm, float AmbientR, float AmbientG, float AmbientB, BOOL bChangeCol, float LightColorR, float LightColorG, float LightColorB, BOOL bChangeDir, float LightDx, float LightDy, float LightDz, BOOL bChangeSn, float Shininess, BOOL bChangeSg, float Strength) |
功能描述 | 设置场景中方向光信息。 dwModID指定此方向光的PT物体ID。 bChangeAm设置是否要改变此方向光的全局光属性: 当为true时,AmbientR,AmbientG,AmbientB指定新的全局光属性 当为false时,AmbientR,AmbientG,AmbientB不使用 bChangeCol设置是否要改变此方向光的颜色属性: 当为true时,LightColorR,LightColorG,LightColorB指定新的光的颜色 当为false时,LightColorR,LightColorG,LightColorB不使用 bChangeDir设置是否要改变此方向光的方向: 当为true时,LightDx,LightDy,LightDz指定新的光的方向 当为false时,LightDx,LightDy,LightDz不使用 bChangeSn设置是否要改变此方向光的光泽度: 当为true时,Shininess指定新的光的光泽度 当为false时,Shininess不使用 bChangeSg设置是否要改变此方向光的强度: 当为true时,Strength指定新的光的强度 当为false时,Strength不使用 |
返回值 | 调用成功返回true,失败返回false,调用W3DGetLastError了解更多错误信息 |
在6号剧情中,添加代码检测玩家与高台中心点的距离是否小于200,如小于200则完成到达高台,此时进入7号剧情,距离200为3dsmax我们自行定义的接近距离,如下所示。通过在3dsmax中指定接近距离,可以非常自由且精准的指定玩家在哪里会触发剧情。
本节演示视频
学习资料下载:
通过网盘分享的文件:W3D引擎游戏开发学习资料
链接: https://pan.baidu.com/s/1mm5f9nDzkT3KlFYQscJBoQ?pwd=1234 提取码: 1234
公众号:W3D引擎