更改

跳转至: 导航搜索

影子坐标

添加1字节2020年12月13日 (日) 15:07
影子的实质
# 使用{{zh|Virtools SDK}}编写独立的Virtools播放器,尝试读取物体(CK3dEntity)的一些属性来比较两者的不同。
比较的结果便是,两者的Moveable­Flags不同,但是二者在Virtools 3.5环境下,通过遍历枚举VX_MOVEABLE_FLAGS所有可能的情况,发现两者完全一致,进一步研究之后发现原版物件(CK3dEntity)使用了一个不存在于Virtools 3.5中的VX_MOVEABLE_FLAGS中的标识。并且观察枚举VX_MOVEABLE_FLAGS,非常容易发现其并不连续,因此一个大胆的推论就是:影子使用了一个Virtools 5中的VX_MOVEABLE_FLAGS中的标识。并且观察枚举VX_MOVEABLE_FLAGS,非常容易发现其并不连续,因此一个大胆的推论是:影子使用了一个Virtools 3.5遗弃的VX_MOVEABLE_FLAGS标识来进行实现。
之后通过编写代码,为一些自定义物体加上此标识后,影子出现。也进行了许多额外的测试,包括将原版关卡中的物体的此标识去除观察影子是否消失来进行验证。此后,根据此推测编写代码,为一些自定义物体加上此标识后,影子出现。同时也进行了许多额外的测试,包括将原版关卡中的物体的此标识去除观察影子是否消失来进行验证。
== 影子的实质 ==
影子坐标的实质就是一个VX_MOVEABLE_FLAGS中被遗弃的标识(VX_MOVEABLE_RENDERCHANNELS)。在Virtools 影子坐标的实质是一个VX_MOVEABLE_FLAGS中被遗弃的标识(VX_MOVEABLE_RENDERCHANNELS)。该标识在Virtools 2.1中起作用,而在Virtools 3.5中完全不可见。更准确的来说,此标识在Virtools 2.5到Virtools 3.0的升级中被新功能替换。
被遗弃的标识,VX_MOVEABLE_RENDERCHANNELS,在文档中做了如下描述:被遗弃的标识,VX_MOVEABLE_RENDERCHANNELS,在文档中存在如下描述:<code>(User) If not set, additional material channels on the mesh used by this entity won't be rendered</code>。即其控制了是否渲染额外的Material Channels。Ballance中的影子是通过自定义Building Block:TT Shadow进行实现。而通过观察TT Shadow的反汇编代码,其与Virtools SDK附带的示例代码中的SimpleShadow极为相似,而通过阅读SimpleShadow的代码可以得知,阴影的实现是通过在对应物体的Mesh上添加Material Channel来进行实现的。因此,如果不启用VX_MOVEABLE_RENDERCHANNELS,影子所属的Material Channel将不会被渲染,呈现影子消失的状态。
属性被丢弃也注定了不可能通过Virtools 3.5的原生操作来实现自主添加影子,只能被动地借用原版具有影子坐标的物体(CK3dEntity)来实现影子。但是可以通过{{zh|VSL}}和Virtools SDK编写的脚本与插件来实现。
<pre>Entity3D ent = Entity3D.Cast(ac.GetObjectByName("NAME",NULL));
int f = ent.GetMoveableFlags();
if ( f / 8 % 2 == 1 0) { f = f-8;}else { f = f+8;}
ent.SetMoveableFlags(f);</pre>
145
个编辑

导航菜单