W3D引擎游戏开发----从入门到精通【8】

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引擎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值