主题:  sw3d旋转视角浏览的问题?

老张

职务:普通成员
等级:5
金币:10.0
发贴:2796
#12002/4/30 11:20:49
在max导出sw3d的时候有一个浏览窗口,可以用鼠标拖动来改变观察视角(而不是旋转模型),在d85中如何实现这种效果却是个难题。使用内置的3d行为根本就不行。奥古的朋友给出了一段代码我试验了一下,还是有问题。和使用旋转模型的行为效果一样问题也一样:

on mouseDown me
tOrgMouseH = the mouseH
tOrgMouseV = the mouseV
repeat while the mouseDown
tCurrentH = the mouseH - tOrgMouseH
tCurrentV = the mouseV - tOrgMouseV
tRotateHor = tCurrentH * 0.5
tRotateVer = tCurrentV * 0.5

member("teapot").model(1).rotate(vector(-tRotateVer,0,tRotateHor), #world)

tOrgMouseH = the mouseH
tOrgMouseV = the mouseV
go to the frame
end repeat
end

谢谢,它首先确实能够实现鼠标拖动进行两个轴向的浏览。只是垂直方向是反向的,当然这是小问题,只要把tCurrentV改为负值就行了。

但是,还是没有解决根本问题,因为它是通过旋转mode的自身坐标轴来实现旋转浏览的。这种浏览方式的局限就在于:如果场景的坐标角度与模型自身的坐标有一个偏差时(非正交视图),旋转就会变得很难控制,就好像我们是在一个坐标系统里面按照另一个坐标系统来操纵对象。

我不知道但如果3D-Lingo有类似屏幕坐标系统得话,让模型沿着这个坐标旋转就会很完美了。

我仔细观察了MAX 导出插件的浏览窗口,它好像是通过改变摄影机自身坐标的形式来实现旋转浏览的(至今我没明白:如果在MAX中没有在场景中加入摄影机而使用预览窗口,在生成的SW3D场景中是否能进行摄影机控制)。

如附图所示,使用上面类似的方法判断鼠标点的拖动偏移,来改变摄影机在世界坐标球形浏览轨迹面上的位置(XYZ同时变化),这也是MAX预览视图改变观察视角的方式(保持摄影机目标点固定在世界坐标原点)。这样就不会发生以前那种模型难以控制的情况了。

当然说归说,如何实现它请感兴趣的朋友来研究一下。如果版主能置顶直至讨论出个结果那就太好了。