找回密码
 点一下
查看: 3923|回复: 17

空间物体模型函数 (用特效堆模型)

[复制链接]
发表于 2011-3-27 00:17:21 | 显示全部楼层 |阅读模式
用这个系统做的一个简单演示地图: test.w3x (40 KB, 下载次数: 48)
忘记说明了,演示地图里按ESC触发效果

预览什么的

预览什么的

预览什么的

预览什么的


[jass]// Objects 空间物体模型函数
// 可建立Objects对象, 并向其中添加点, 添加的点会随物体的转动而转动

// ------ 常用操作
// NewObject(x,y,z) //新建一个物体, 返回物体obj值
// DeleteObject(obj) //删除物体
// SetObjectPosition(obj,x,y,z) //设置物体坐标(移动物体)
// ObjectCreateLoc(obj,x,y,z) //创建一个点然后添加到物体,与中心点相对坐标x,y,z,返回loc在物体内的index
// GetObjectLocX(obj,index) //获得物体第index个点的坐标x,y,z
// GetObjectLocY(obj,index)
// GetObjectLocZ(obj,index)
// ObjectAttachObject(whichObj,toObj) //将whichObj绑定到toObj上,绑定后将当前朝向作为默认朝向,并且会随着toObj的移动而改变默认朝向
// ------ 操作物体
// AdjustObjectRotationX(obj,rad) //调整物体x,y,z轴旋转角度
// AdjustObjectRotationY(obj,rad)
// AdjustObjectRotationZ(obj,rad)
// ResetObjectRotation(obj) //重置物体到默认旋转角度
// SetObjectRotation(obj,ax,ay,az) //设置物体x,y,z轴旋转角度(实际上是重置+调整)
// AdjustObjectScale(obj,scaleX,scaleY,scaleZ) //调整物体缩放倍率(会被重置动作恢复)
// AdjustObjectDefaultScale(obj,scaleX,scaleY,scaleZ) //调整物体默认缩放倍率
// ------ 改变物体默认性质
// AdjustObjectDefaultRotationX(baseobj,obj,a) //设置物体x,y,z轴的默认旋转角度(一般不会用到)
// AdjustObjectDefaultRotationY(baseobj,obj,a) // baseobj:作为旋转轴的obj 非绑定的使用自身obj值
// AdjustObjectDefaultRotationZ(baseobj,obj,a)
// ResetObjectDefaultRotation(obj) //重置默认旋转角度到标准x,y,z轴朝向
// SetObjectDefaultRotation(obj,ax,ay,az) //设置物体默认的x,y,z轴旋转角度,实际是重置+调整
// ------ 有关点和物体的操作
// CreateLoc(x,y,z) //创建一个新的点,返回loc值,创建的点可以被添加到物体内
// GetObjectOriginLoc(obj) //获得物体中心点 返回loc值
// MoveLoc(loc) //改变点的坐标x,y,z
// GetLocX(loc) //获得点坐标x,y,z
// GetLocY(loc)
// GetLocZ(loc)
// GetObjectX(obj) //获得物体中心点坐标x,y,z
// GetObjectY(obj)
// GetObjectZ(obj)
// ObjectAddLoc(obj,loc) //向物体内添加一个点 loc
// ObjectCountLoc(obj) //获得物体点的个数
// GetObjectLoc(obj,index) //获得物体第index个点,返回loc值

globals
    real glrf_x=0.
    real glrf_y=0.
    real glrf_z=0.
    hashtable tdo_loc_ht=InitHashtable()
    hashtable tdo_obj_ht=InitHashtable()
endglobals
//glRotatef
function Rotatef takes real old_x,real old_y,real old_z,real angle,real x,real y,real z returns nothing
    local real cos=Cos(angle)
    local real sin=Sin(angle)
    set glrf_x=(x*x*(1-cos)+cos)*old_x+(x*y*(1-cos)-z*sin)*old_y+(x*z*(1-cos)+y*sin)*old_z
    set glrf_y=(y*y*(1-cos)+cos)*old_y+(y*z*(1-cos)-x*sin)*old_z+(y*x*(1-cos)+z*sin)*old_x
    set glrf_z=(z*z*(1-cos)+cos)*old_z+(x*z*(1-cos)-y*sin)*old_x+(y*z*(1-cos)+x*sin)*old_y
endfunction
//objects
function AdjustObjectDefaultRotationX takes integer baseobj,integer obj,real a returns nothing
    //设置obj的默认x轴旋转角度
    local integer i
    local integer loc
    //
    local real x=LoadReal(tdo_obj_ht,baseobj,4)
    local real y=LoadReal(tdo_obj_ht,baseobj,5)
    local real z=LoadReal(tdo_obj_ht,baseobj,6)
    // - y
    call Rotatef(LoadReal(tdo_obj_ht,obj,7),LoadReal(tdo_obj_ht,obj,8),LoadReal(tdo_obj_ht,obj,9),a,x,y,z)
    call SaveReal(tdo_obj_ht,obj,7,glrf_x)
    call SaveReal(tdo_obj_ht,obj,8,glrf_y)
    call SaveReal(tdo_obj_ht,obj,9,glrf_z)
    // - z
    call Rotatef(LoadReal(tdo_obj_ht,obj,10),LoadReal(tdo_obj_ht,obj,11),LoadReal(tdo_obj_ht,obj,12),a,x,y,z)
    call SaveReal(tdo_obj_ht,obj,10,glrf_x)
    call SaveReal(tdo_obj_ht,obj,11,glrf_y)
    call SaveReal(tdo_obj_ht,obj,12,glrf_z)
    // - dy
    call Rotatef(LoadReal(tdo_obj_ht,obj,-7),LoadReal(tdo_obj_ht,obj,-8),LoadReal(tdo_obj_ht,obj,-9),a,x,y,z)
    call SaveReal(tdo_obj_ht,obj,-7,glrf_x)
    call SaveReal(tdo_obj_ht,obj,-8,glrf_y)
    call SaveReal(tdo_obj_ht,obj,-9,glrf_z)
    // - dz
    call Rotatef(LoadReal(tdo_obj_ht,obj,-10),LoadReal(tdo_obj_ht,obj,-11),LoadReal(tdo_obj_ht,obj,-12),a,x,y,z)
    call SaveReal(tdo_obj_ht,obj,-10,glrf_x)
    call SaveReal(tdo_obj_ht,obj,-11,glrf_y)
    call SaveReal(tdo_obj_ht,obj,-12,glrf_z)
    // - locs
    set i=LoadInteger(tdo_obj_ht,obj,0)
    loop
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;exitwhen i<=0
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;set x=LoadReal(tdo_obj_ht,baseobj,4)
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;set y=LoadReal(tdo_obj_ht,baseobj,5)
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;set z=LoadReal(tdo_obj_ht,baseobj,6)
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;set loc=LoadInteger(tdo_obj_ht,obj,i)
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;call Rotatef(LoadReal(tdo_loc_ht,loc,1),LoadReal(tdo_loc_ht,loc,2),LoadReal(tdo_loc_ht,loc,3),a,x,y,z)
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;call SaveReal(tdo_loc_ht,loc,1,glrf_x)
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;call SaveReal(tdo_loc_ht,loc,2,glrf_y)
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;call SaveReal(tdo_loc_ht,loc,3,glrf_z)
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if LoadBoolean(tdo_loc_ht,loc,0) then //origin loc
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;set baseobj=obj
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;set obj=LoadInteger(tdo_loc_ht,loc,-1) //该中心点
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;call AdjustObjectDefaultRotationX(baseobj,obj,a) //改变默认轴角度
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;endif
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;set i=i-1
&#160;&#160;&#160;&#160;endloop
endfunction
function AdjustObjectDefaultRotationY takes integer baseobj,integer obj,real a returns nothing
&#160;&#160;&#160;&#160;//设置obj的默认Y轴旋转角度
&#160;&#160;&#160;&#160;local integer i
&#160;&#160;&#160;&#160;local integer loc
&#160;&#160;&#160;&#160;//
&#160;&#160;&#160;&#160;local real x=LoadReal(tdo_obj_ht,baseobj,7)
&#160;&#160;&#160;&#160;local real y=LoadReal(tdo_obj_ht,baseobj,8)
&#160;&#160;&#160;&#160;local real z=LoadReal(tdo_obj_ht,baseobj,9)
&#160;&#160;&#160;&#160;// - x
&#160;&#160;&#160;&#160;call Rotatef(LoadReal(tdo_obj_ht,obj,4),LoadReal(tdo_obj_ht,obj,5),LoadReal(tdo_obj_ht,obj,6),a,x,y,z)
&#160;&#160;&#160;&#160;call SaveReal(tdo_obj_ht,obj,4,glrf_x)
&#160;&#160;&#160;&#160;call SaveReal(tdo_obj_ht,obj,5,glrf_y)
&#160;&#160;&#160;&#160;call SaveReal(tdo_obj_ht,obj,6,glrf_z)
&#160;&#160;&#160;&#160;// - z
&#160;&#160;&#160;&#160;call Rotatef(LoadReal(tdo_obj_ht,obj,10),LoadReal(tdo_obj_ht,obj,11),LoadReal(tdo_obj_ht,obj,12),a,x,y,z)
&#160;&#160;&#160;&#160;call SaveReal(tdo_obj_ht,obj,10,glrf_x)
&#160;&#160;&#160;&#160;call SaveReal(tdo_obj_ht,obj,11,glrf_y)
&#160;&#160;&#160;&#160;call SaveReal(tdo_obj_ht,obj,12,glrf_z)
&#160;&#160;&#160;&#160;// - dx
&#160;&#160;&#160;&#160;call Rotatef(LoadReal(tdo_obj_ht,obj,-4),LoadReal(tdo_obj_ht,obj,-5),LoadReal(tdo_obj_ht,obj,-6),a,x,y,z)
&#160;&#160;&#160;&#160;call SaveReal(tdo_obj_ht,obj,-4,glrf_x)
&#160;&#160;&#160;&#160;call SaveReal(tdo_obj_ht,obj,-5,glrf_y)
&#160;&#160;&#160;&#160;call SaveReal(tdo_obj_ht,obj,-6,glrf_z)
&#160;&#160;&#160;&#160;// - dz
&#160;&#160;&#160;&#160;call Rotatef(LoadReal(tdo_obj_ht,obj,-10),LoadReal(tdo_obj_ht,obj,-11),LoadReal(tdo_obj_ht,obj,-12),a,x,y,z)
&#160;&#160;&#160;&#160;call SaveReal(tdo_obj_ht,obj,-10,glrf_x)
&#160;&#160;&#160;&#160;call SaveReal(tdo_obj_ht,obj,-11,glrf_y)
&#160;&#160;&#160;&#160;call SaveReal(tdo_obj_ht,obj,-12,glrf_z)
&#160;&#160;&#160;&#160;// - locs
&#160;&#160;&#160;&#160;set i=LoadInteger(tdo_obj_ht,obj,0)
&#160;&#160;&#160;&#160;loop
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;exitwhen i<=0
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;set x=LoadReal(tdo_obj_ht,baseobj,7)
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;set y=LoadReal(tdo_obj_ht,baseobj,8)
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;set z=LoadReal(tdo_obj_ht,baseobj,9)
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;set loc=LoadInteger(tdo_obj_ht,obj,i)
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;call Rotatef(LoadReal(tdo_loc_ht,loc,1),LoadReal(tdo_loc_ht,loc,2),LoadReal(tdo_loc_ht,loc,3),a,x,y,z)
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;call SaveReal(tdo_loc_ht,loc,1,glrf_x)
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;call SaveReal(tdo_loc_ht,loc,2,glrf_y)
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;call SaveReal(tdo_loc_ht,loc,3,glrf_z)
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if LoadBoolean(tdo_loc_ht,loc,0) then //origin loc
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;set baseobj=obj
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;set obj=LoadInteger(tdo_loc_ht,loc,-1) //该中心点
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;call AdjustObjectDefaultRotationY(baseobj,obj,a) //改变默认轴角度
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;endif
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;set i=i-1
&#160;&#160;&#160;&#160;endloop
endfunction
function AdjustObjectDefaultRotationZ takes integer baseobj,integer obj,real a returns nothing
&#160;&#160;&#160;&#160;//设置obj的默认Z轴旋转角度
&#160;&#160;&#160;&#160;local integer i
&#160;&#160;&#160;&#160;local integer loc
&#160;&#160;&#160;&#160;//
&#160;&#160;&#160;&#160;local real x=LoadReal(tdo_obj_ht,baseobj,10)
&#160;&#160;&#160;&#160;local real y=LoadReal(tdo_obj_ht,baseobj,11)
&#160;&#160;&#160;&#160;local real z=LoadReal(tdo_obj_ht,baseobj,12)
&#160;&#160;&#160;&#160;// - x
&#160;&#160;&#160;&#160;call Rotatef(LoadReal(tdo_obj_ht,obj,4),LoadReal(tdo_obj_ht,obj,5),LoadReal(tdo_obj_ht,obj,6),a,x,y,z)
&#160;&#160;&#160;&#160;call SaveReal(tdo_obj_ht,obj,4,glrf_x)
&#160;&#160;&#160;&#160;call SaveReal(tdo_obj_ht,obj,5,glrf_y)
&#160;&#160;&#160;&#160;call SaveReal(tdo_obj_ht,obj,6,glrf_z)
&#160;&#160;&#160;&#160;// - y
&#160;&#160;&#160;&#160;call Rotatef(LoadReal(tdo_obj_ht,obj,7),LoadReal(tdo_obj_ht,obj,8),LoadReal(tdo_obj_ht,obj,9),a,x,y,z)
&#160;&#160;&#160;&#160;call SaveReal(tdo_obj_ht,obj,7,glrf_x)
&#160;&#160;&#160;&#160;call SaveReal(tdo_obj_ht,obj,8,glrf_y)
&#160;&#160;&#160;&#160;call SaveReal(tdo_obj_ht,obj,9,glrf_z)
&#160;&#160;&#160;&#160;// - dx
&#160;&#160;&#160;&#160;call Rotatef(LoadReal(tdo_obj_ht,obj,-4),LoadReal(tdo_obj_ht,obj,-5),LoadReal(tdo_obj_ht,obj,-6),a,x,y,z)
&#160;&#160;&#160;&#160;call SaveReal(tdo_obj_ht,obj,-4,glrf_x)
&#160;&#160;&#160;&#160;call SaveReal(tdo_obj_ht,obj,-5,glrf_y)
&#160;&#160;&#160;&#160;call SaveReal(tdo_obj_ht,obj,-6,glrf_z)
&#160;&#160;&#160;&#160;// - dy
&#160;&#160;&#160;&#160;call Rotatef(LoadReal(tdo_obj_ht,obj,-7),LoadReal(tdo_obj_ht,obj,-8),LoadReal(tdo_obj_ht,obj,-9),a,x,y,z)
&#160;&#160;&#160;&#160;call SaveReal(tdo_obj_ht,obj,-7,glrf_x)
&#160;&#160;&#160;&#160;call SaveReal(tdo_obj_ht,obj,-8,glrf_y)
&#160;&#160;&#160;&#160;call SaveReal(tdo_obj_ht,obj,-9,glrf_z)
&#160;&#160;&#160;&#160;// - locs
&#160;&#160;&#160;&#160;set i=LoadInteger(tdo_obj_ht,obj,0)
&#160;&#160;&#160;&#160;loop
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;exitwhen i<=0
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;set x=LoadReal(tdo_obj_ht,baseobj,10)
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;set y=LoadReal(tdo_obj_ht,baseobj,11)
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;set z=LoadReal(tdo_obj_ht,baseobj,12)
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;set loc=LoadInteger(tdo_obj_ht,obj,i)
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;call Rotatef(LoadReal(tdo_loc_ht,loc,1),LoadReal(tdo_loc_ht,loc,2),LoadReal(tdo_loc_ht,loc,3),a,x,y,z)
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;call SaveReal(tdo_loc_ht,loc,1,glrf_x)
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;call SaveReal(tdo_loc_ht,loc,2,glrf_y)
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;call SaveReal(tdo_loc_ht,loc,3,glrf_z)
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if LoadBoolean(tdo_loc_ht,loc,0) then //origin loc
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;set baseobj=obj
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;set obj=LoadInteger(tdo_loc_ht,loc,-1) //该中心点
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;call AdjustObjectDefaultRotationZ(baseobj,obj,a) //改变默认轴角度
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;endif
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;set i=i-1
&#160;&#160;&#160;&#160;endloop
endfunction
function AdjustLocRotationX takes integer obj,integer loc,real a returns nothing
&#160;&#160;&#160;&#160;local real x=LoadReal(tdo_obj_ht,obj,4)
&#160;&#160;&#160;&#160;local real y=LoadReal(tdo_obj_ht,obj,5)
&#160;&#160;&#160;&#160;local real z=LoadReal(tdo_obj_ht,obj,6)
&#160;&#160;&#160;&#160;local integer baseobj=obj
&#160;&#160;&#160;&#160;call Rotatef(LoadReal(tdo_loc_ht,loc,1),LoadReal(tdo_loc_ht,loc,2),LoadReal(tdo_loc_ht,loc,3),a,x,y,z)
&#160;&#160;&#160;&#160;call SaveReal(tdo_loc_ht,loc,1,glrf_x)
&#160;&#160;&#160;&#160;call SaveReal(tdo_loc_ht,loc,2,glrf_y)
&#160;&#160;&#160;&#160;call SaveReal(tdo_loc_ht,loc,3,glrf_z)
&#160;&#160;&#160;&#160;if LoadBoolean(tdo_loc_ht,loc,0) then //origin loc
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;set obj=LoadInteger(tdo_loc_ht,loc,-1) //该中心点
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;call AdjustObjectDefaultRotationX(baseobj,obj,a) //改变默认轴角度
&#160;&#160;&#160;&#160;endif
endfunction
function AdjustLocRotationY takes integer obj,integer loc,real a returns nothing
&#160;&#160;&#160;&#160;local real x=LoadReal(tdo_obj_ht,obj,7)
&#160;&#160;&#160;&#160;local real y=LoadReal(tdo_obj_ht,obj,8)
&#160;&#160;&#160;&#160;local real z=LoadReal(tdo_obj_ht,obj,9)
&#160;&#160;&#160;&#160;local integer baseobj=obj
&#160;&#160;&#160;&#160;call Rotatef(LoadReal(tdo_loc_ht,loc,1),LoadReal(tdo_loc_ht,loc,2),LoadReal(tdo_loc_ht,loc,3),a,x,y,z)
&#160;&#160;&#160;&#160;call SaveReal(tdo_loc_ht,loc,1,glrf_x)
&#160;&#160;&#160;&#160;call SaveReal(tdo_loc_ht,loc,2,glrf_y)
&#160;&#160;&#160;&#160;call SaveReal(tdo_loc_ht,loc,3,glrf_z)
&#160;&#160;&#160;&#160;if LoadBoolean(tdo_loc_ht,loc,0) then //origin loc
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;set obj=LoadInteger(tdo_loc_ht,loc,-1) //该中心点
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;call AdjustObjectDefaultRotationY(baseobj,obj,a) //改变默认轴角度
&#160;&#160;&#160;&#160;endif
endfunction
function AdjustLocRotationZ takes integer obj,integer loc,real a returns nothing
&#160;&#160;&#160;&#160;local real x=LoadReal(tdo_obj_ht,obj,10)
&#160;&#160;&#160;&#160;local real y=LoadReal(tdo_obj_ht,obj,11)
&#160;&#160;&#160;&#160;local real z=LoadReal(tdo_obj_ht,obj,12)
&#160;&#160;&#160;&#160;local integer baseobj=obj
&#160;&#160;&#160;&#160;call Rotatef(LoadReal(tdo_loc_ht,loc,1),LoadReal(tdo_loc_ht,loc,2),LoadReal(tdo_loc_ht,loc,3),a,x,y,z)
&#160;&#160;&#160;&#160;call SaveReal(tdo_loc_ht,loc,1,glrf_x)
&#160;&#160;&#160;&#160;call SaveReal(tdo_loc_ht,loc,2,glrf_y)
&#160;&#160;&#160;&#160;call SaveReal(tdo_loc_ht,loc,3,glrf_z)
&#160;&#160;&#160;&#160;if LoadBoolean(tdo_loc_ht,loc,0) then //origin loc
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;set obj=LoadInteger(tdo_loc_ht,loc,-1) //该中心点
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;call AdjustObjectDefaultRotationZ(baseobj,obj,a) //改变默认轴角度
&#160;&#160;&#160;&#160;endif
endfunction
function AdjustObjectRotationX takes integer obj,real a returns nothing
&#160;&#160;&#160;&#160;//设置obj的x轴旋转角度
&#160;&#160;&#160;&#160;local integer i
&#160;&#160;&#160;&#160;//
&#160;&#160;&#160;&#160;local real x=LoadReal(tdo_obj_ht,obj,4)
&#160;&#160;&#160;&#160;local real y=LoadReal(tdo_obj_ht,obj,5)
&#160;&#160;&#160;&#160;local real z=LoadReal(tdo_obj_ht,obj,6)
&#160;&#160;&#160;&#160;// - y
&#160;&#160;&#160;&#160;call Rotatef(LoadReal(tdo_obj_ht,obj,7),LoadReal(tdo_obj_ht,obj,8),LoadReal(tdo_obj_ht,obj,9),a,x,y,z)
&#160;&#160;&#160;&#160;call SaveReal(tdo_obj_ht,obj,7,glrf_x)
&#160;&#160;&#160;&#160;call SaveReal(tdo_obj_ht,obj,8,glrf_y)
&#160;&#160;&#160;&#160;call SaveReal(tdo_obj_ht,obj,9,glrf_z)
&#160;&#160;&#160;&#160;// - z
&#160;&#160;&#160;&#160;call Rotatef(LoadReal(tdo_obj_ht,obj,10),LoadReal(tdo_obj_ht,obj,11),LoadReal(tdo_obj_ht,obj,12),a,x,y,z)
&#160;&#160;&#160;&#160;call SaveReal(tdo_obj_ht,obj,10,glrf_x)
&#160;&#160;&#160;&#160;call SaveReal(tdo_obj_ht,obj,11,glrf_y)
&#160;&#160;&#160;&#160;call SaveReal(tdo_obj_ht,obj,12,glrf_z)
&#160;&#160;&#160;&#160;// - locs
&#160;&#160;&#160;&#160;set i=LoadInteger(tdo_obj_ht,obj,0)
&#160;&#160;&#160;&#160;loop
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;exitwhen i<=0
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;call AdjustLocRotationX(obj,LoadInteger(tdo_obj_ht,obj,i),a)
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;set i=i-1
&#160;&#160;&#160;&#160;endloop
endfunction
function AdjustObjectRotationY takes integer obj,real a returns nothing
&#160;&#160;&#160;&#160;//设置obj的Y轴旋转角度
&#160;&#160;&#160;&#160;local integer i
&#160;&#160;&#160;&#160;//
&#160;&#160;&#160;&#160;local real x=LoadReal(tdo_obj_ht,obj,7)
&#160;&#160;&#160;&#160;local real y=LoadReal(tdo_obj_ht,obj,8)
&#160;&#160;&#160;&#160;local real z=LoadReal(tdo_obj_ht,obj,9)
&#160;&#160;&#160;&#160;// - x
&#160;&#160;&#160;&#160;call Rotatef(LoadReal(tdo_obj_ht,obj,4),LoadReal(tdo_obj_ht,obj,5),LoadReal(tdo_obj_ht,obj,6),a,x,y,z)
&#160;&#160;&#160;&#160;call SaveReal(tdo_obj_ht,obj,4,glrf_x)
&#160;&#160;&#160;&#160;call SaveReal(tdo_obj_ht,obj,5,glrf_y)
&#160;&#160;&#160;&#160;call SaveReal(tdo_obj_ht,obj,6,glrf_z)
&#160;&#160;&#160;&#160;// - z
&#160;&#160;&#160;&#160;call Rotatef(LoadReal(tdo_obj_ht,obj,10),LoadReal(tdo_obj_ht,obj,11),LoadReal(tdo_obj_ht,obj,12),a,x,y,z)
&#160;&#160;&#160;&#160;call SaveReal(tdo_obj_ht,obj,10,glrf_x)
&#160;&#160;&#160;&#160;call SaveReal(tdo_obj_ht,obj,11,glrf_y)
&#160;&#160;&#160;&#160;call SaveReal(tdo_obj_ht,obj,12,glrf_z)
&#160;&#160;&#160;&#160;// - locs
&#160;&#160;&#160;&#160;set i=LoadInteger(tdo_obj_ht,obj,0)
&#160;&#160;&#160;&#160;loop
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;exitwhen i<=0
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;call AdjustLocRotationY(obj,LoadInteger(tdo_obj_ht,obj,i),a)
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;set i=i-1
&#160;&#160;&#160;&#160;endloop
endfunction
function AdjustObjectRotationZ takes integer obj,real a returns nothing
&#160;&#160;&#160;&#160;//设置obj的Z轴旋转角度
&#160;&#160;&#160;&#160;local integer i
&#160;&#160;&#160;&#160;//
&#160;&#160;&#160;&#160;local real x=LoadReal(tdo_obj_ht,obj,10)
&#160;&#160;&#160;&#160;local real y=LoadReal(tdo_obj_ht,obj,11)
&#160;&#160;&#160;&#160;local real z=LoadReal(tdo_obj_ht,obj,12)
&#160;&#160;&#160;&#160;// - x
&#160;&#160;&#160;&#160;call Rotatef(LoadReal(tdo_obj_ht,obj,4),LoadReal(tdo_obj_ht,obj,5),LoadReal(tdo_obj_ht,obj,6),a,x,y,z)
&#160;&#160;&#160;&#160;call SaveReal(tdo_obj_ht,obj,4,glrf_x)
&#160;&#160;&#160;&#160;call SaveReal(tdo_obj_ht,obj,5,glrf_y)
&#160;&#160;&#160;&#160;call SaveReal(tdo_obj_ht,obj,6,glrf_z)
&#160;&#160;&#160;&#160;// - y
&#160;&#160;&#160;&#160;call Rotatef(LoadReal(tdo_obj_ht,obj,7),LoadReal(tdo_obj_ht,obj,8),LoadReal(tdo_obj_ht,obj,9),a,x,y,z)
&#160;&#160;&#160;&#160;call SaveReal(tdo_obj_ht,obj,7,glrf_x)
&#160;&#160;&#160;&#160;call SaveReal(tdo_obj_ht,obj,8,glrf_y)
&#160;&#160;&#160;&#160;call SaveReal(tdo_obj_ht,obj,9,glrf_z)
&#160;&#160;&#160;&#160;// - locs
&#160;&#160;&#160;&#160;set i=LoadInteger(tdo_obj_ht,obj,0)
&#160;&#160;&#160;&#160;loop
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;exitwhen i<=0
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;call AdjustLocRotationZ(obj,LoadInteger(tdo_obj_ht,obj,i),a)
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;set i=i-1
&#160;&#160;&#160;&#160;endloop
endfunction
function ResetObjectRotation takes integer obj returns nothing
&#160;&#160;&#160;&#160;local integer i=LoadInteger(tdo_obj_ht,obj,0)
&#160;&#160;&#160;&#160;local integer loc
&#160;&#160;&#160;&#160;//中轴线恢复默认
&#160;&#160;&#160;&#160;call SaveReal(tdo_obj_ht,obj,4,LoadReal(tdo_obj_ht,obj,-4)) // x_x 4~6 中轴线
&#160;&#160;&#160;&#160;call SaveReal(tdo_obj_ht,obj,5,LoadReal(tdo_obj_ht,obj,-5)) // x_y
&#160;&#160;&#160;&#160;call SaveReal(tdo_obj_ht,obj,6,LoadReal(tdo_obj_ht,obj,-6)) // x_z
&#160;&#160;&#160;&#160;call SaveReal(tdo_obj_ht,obj,7,LoadReal(tdo_obj_ht,obj,-7)) // y_x 7~9 中轴线
&#160;&#160;&#160;&#160;call SaveReal(tdo_obj_ht,obj,8,LoadReal(tdo_obj_ht,obj,-8)) // y_y
&#160;&#160;&#160;&#160;call SaveReal(tdo_obj_ht,obj,9,LoadReal(tdo_obj_ht,obj,-9)) // y_z
&#160;&#160;&#160;&#160;call SaveReal(tdo_obj_ht,obj,10,LoadReal(tdo_obj_ht,obj,-10)) // z_x 10~12 中轴线
&#160;&#160;&#160;&#160;call SaveReal(tdo_obj_ht,obj,11,LoadReal(tdo_obj_ht,obj,-11)) // z_y
&#160;&#160;&#160;&#160;call SaveReal(tdo_obj_ht,obj,12,LoadReal(tdo_obj_ht,obj,-12)) // z_z
&#160;&#160;&#160;&#160;loop
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;exitwhen i<=0
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;set loc=LoadInteger(tdo_obj_ht,obj,i)
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;call SaveReal(tdo_loc_ht,loc,1,LoadReal(tdo_loc_ht,loc,-1))
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;call SaveReal(tdo_loc_ht,loc,2,LoadReal(tdo_loc_ht,loc,-2))
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;call SaveReal(tdo_loc_ht,loc,3,LoadReal(tdo_loc_ht,loc,-3))
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;set i=i-1
&#160;&#160;&#160;&#160;endloop
endfunction
function AdjustObjectDefaultScale takes integer obj,real scaleX,real scaleY,real scaleZ, returns nothing
&#160;&#160;&#160;&#160;local integer i=LoadInteger(tdo_obj_ht,obj,0)
&#160;&#160;&#160;&#160;local integer loc
&#160;&#160;&#160;&#160;loop
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;exitwhen i<=0
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;set loc=LoadInteger(tdo_obj_ht,obj,i)
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;call SaveReal(tdo_loc_ht,loc,-1,LoadReal(tdo_loc_ht,loc,-1)*scaleX)
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;call SaveReal(tdo_loc_ht,loc,-2,LoadReal(tdo_loc_ht,loc,-2)*scaleY)
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;call SaveReal(tdo_loc_ht,loc,-3,LoadReal(tdo_loc_ht,loc,-3)*scaleZ)
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;set i=i-1
&#160;&#160;&#160;&#160;endloop
endfunction
function AdjustObjectScale takes integer obj,real scaleX,real scaleY,real scaleZ, returns nothing
&#160;&#160;&#160;&#160;local integer i=LoadInteger(tdo_obj_ht,obj,0)
&#160;&#160;&#160;&#160;local integer loc
&#160;&#160;&#160;&#160;loop
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;exitwhen i<=0
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;set loc=LoadInteger(tdo_obj_ht,obj,i)
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;call SaveReal(tdo_loc_ht,loc,1,LoadReal(tdo_loc_ht,loc,1)*scaleX)
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;call SaveReal(tdo_loc_ht,loc,2,LoadReal(tdo_loc_ht,loc,2)*scaleY)
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;call SaveReal(tdo_loc_ht,loc,3,LoadReal(tdo_loc_ht,loc,3)*scaleZ)
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;set i=i-1
&#160;&#160;&#160;&#160;endloop
endfunction
function SetObjectRotation takes integer obj,real ax,real ay,real az returns nothing
&#160;&#160;&#160;&#160;call ResetObjectRotation(obj)
&#160;&#160;&#160;&#160;call AdjustObjectRotationX(obj,ax)
&#160;&#160;&#160;&#160;call AdjustObjectRotationY(obj,ay)
&#160;&#160;&#160;&#160;call AdjustObjectRotationZ(obj,az)
endfunction
function SetObjectPosition takes integer obj,real x,real y,real z returns nothing
&#160;&#160;&#160;&#160;//设置obj的位置
&#160;&#160;&#160;&#160;call SaveReal(tdo_loc_ht,LoadInteger(tdo_obj_ht,obj,-1),1,x)
&#160;&#160;&#160;&#160;call SaveReal(tdo_loc_ht,LoadInteger(tdo_obj_ht,obj,-1),2,y)
&#160;&#160;&#160;&#160;call SaveReal(tdo_loc_ht,LoadInteger(tdo_obj_ht,obj,-1),3,z)
endfunction
function GetObjectX takes integer obj returns real
&#160;&#160;&#160;&#160;return LoadReal(tdo_loc_ht,LoadInteger(tdo_obj_ht,obj,-1),1)
endfunction
function GetObjectY takes integer obj returns real
&#160;&#160;&#160;&#160;return LoadReal(tdo_loc_ht,LoadInteger(tdo_obj_ht,obj,-1),2)
endfunction
function GetObjectZ takes integer obj returns real
&#160;&#160;&#160;&#160;return LoadReal(tdo_loc_ht,LoadInteger(tdo_obj_ht,obj,-1),3)
endfunction
function GetObjectLoc takes integer obj,integer index returns integer
&#160;&#160;&#160;&#160;return LoadInteger(tdo_obj_ht,obj,index)
endfunction
function GetObjectLocX takes integer obj,integer index returns real
&#160;&#160;&#160;&#160;return LoadReal(tdo_loc_ht,LoadInteger(tdo_obj_ht,obj,-1),1)+LoadReal(tdo_loc_ht,LoadInteger(tdo_obj_ht,obj,index),1)
endfunction
function GetObjectLocY takes integer obj,integer index returns real
&#160;&#160;&#160;&#160;return LoadReal(tdo_loc_ht,LoadInteger(tdo_obj_ht,obj,-1),2)+LoadReal(tdo_loc_ht,LoadInteger(tdo_obj_ht,obj,index),2)
endfunction
function GetObjectLocZ takes integer obj,integer index returns real
&#160;&#160;&#160;&#160;return LoadReal(tdo_loc_ht,LoadInteger(tdo_obj_ht,obj,-1),3)+LoadReal(tdo_loc_ht,LoadInteger(tdo_obj_ht,obj,index),3)
endfunction
function ObjectCountLocs takes integer obj returns integer
&#160;&#160;&#160;&#160;return LoadInteger(tdo_obj_ht,obj,0)
endfunction
function CreateLoc takes real x,real y,real z returns integer
&#160;&#160;&#160;&#160;//新建一个点,(相对)坐标为x,y,z, 返回loc
&#160;&#160;&#160;&#160;local integer i
&#160;&#160;&#160;&#160;set i=1+LoadInteger(tdo_loc_ht,0,0) //点index
&#160;&#160;&#160;&#160;call SaveInteger(tdo_loc_ht,0,0,i) //设置点总数量增加1
&#160;&#160;&#160;&#160;call SaveReal(tdo_loc_ht,i,1,x)&#160;&#160;//设置 点的相对坐标
&#160;&#160;&#160;&#160;call SaveReal(tdo_loc_ht,i,2,y)
&#160;&#160;&#160;&#160;call SaveReal(tdo_loc_ht,i,3,z)
&#160;&#160;&#160;&#160;call SaveReal(tdo_loc_ht,i,-1,x)&#160;&#160;//记录点的原始相对坐标
&#160;&#160;&#160;&#160;call SaveReal(tdo_loc_ht,i,-2,y)
&#160;&#160;&#160;&#160;call SaveReal(tdo_loc_ht,i,-3,z)
&#160;&#160;&#160;&#160;call SaveBoolean(tdo_loc_ht,i,0,false) //设置点非obj的中心点(默认)
&#160;&#160;&#160;&#160;return i
endfunction
function ObjectAddLoc takes integer obj,integer loc returns integer
&#160;&#160;&#160;&#160;//为obj添加点
&#160;&#160;&#160;&#160;local integer oi
&#160;&#160;&#160;&#160;if HaveSavedInteger(tdo_obj_ht,obj,0) and HaveSavedReal(tdo_loc_ht,loc,1) then
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;call SaveInteger(tdo_loc_ht,loc,0,obj) //设置所属obj(被该obj所控制)
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;set oi=1+LoadInteger(tdo_obj_ht,obj,0)
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;call SaveInteger(tdo_obj_ht,obj,0,oi) //设置数量增加1
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;call SaveInteger(tdo_obj_ht,obj,oi,loc) //obj储存点
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;return oi //返回在obj内存储的顺序 loc
&#160;&#160;&#160;&#160;endif
&#160;&#160;&#160;&#160;return 0
endfunction
function ObjectCreateLoc takes integer obj,real x,real y,real z returns integer
&#160;&#160;&#160;&#160;//为obj添加点,与中心点的相对坐标,x,y,z
&#160;&#160;&#160;&#160;return ObjectAddLoc(obj,CreateLoc(x,y,z))
endfunction
function MoveLoc takes integer loc,real x,real y,real z returns nothing
&#160;&#160;&#160;&#160;call SaveReal(tdo_loc_ht,loc,1,x)
&#160;&#160;&#160;&#160;call SaveReal(tdo_loc_ht,loc,2,y)
&#160;&#160;&#160;&#160;call SaveReal(tdo_loc_ht,loc,3,z)
endfunction
function GetLocX takes integer loc returns real
&#160;&#160;&#160;&#160;return LoadReal(tdo_loc_ht,loc,1)
endfunction
function GetLocY takes integer loc returns real
&#160;&#160;&#160;&#160;return LoadReal(tdo_loc_ht,loc,2)
endfunction
function GetLocZ takes integer loc returns real
&#160;&#160;&#160;&#160;return LoadReal(tdo_loc_ht,loc,3)
endfunction
function GetObjectOriginLoc takes integer obj returns integer
&#160;&#160;&#160;&#160;//获得obj的中心点 返回loc
&#160;&#160;&#160;&#160;return LoadInteger(tdo_obj_ht,obj,-1)
endfunction
function SetObjectOriginLoc takes integer obj,integer loc returns nothing
&#160;&#160;&#160;&#160;call SaveInteger(tdo_obj_ht,obj,-1,loc) //储存中心点
&#160;&#160;&#160;&#160;call SaveBoolean(tdo_loc_ht,loc,0,true) //设置点属性: 中心点
&#160;&#160;&#160;&#160;call SaveInteger(tdo_loc_ht,loc,-1,obj) //记录是obj的中心点
endfunction
function ResetObjectDefaultRotation takes integer whichObj returns nothing
&#160;&#160;&#160;&#160;call SaveReal(tdo_obj_ht,whichObj,-4,1)
&#160;&#160;&#160;&#160;call SaveReal(tdo_obj_ht,whichObj,-5,0)
&#160;&#160;&#160;&#160;call SaveReal(tdo_obj_ht,whichObj,-6,0)
&#160;&#160;&#160;&#160;call SaveReal(tdo_obj_ht,whichObj,-7,0)
&#160;&#160;&#160;&#160;call SaveReal(tdo_obj_ht,whichObj,-8,1)
&#160;&#160;&#160;&#160;call SaveReal(tdo_obj_ht,whichObj,-9,0)
&#160;&#160;&#160;&#160;call SaveReal(tdo_obj_ht,whichObj,-10,0)
&#160;&#160;&#160;&#160;call SaveReal(tdo_obj_ht,whichObj,-11,0)
&#160;&#160;&#160;&#160;call SaveReal(tdo_obj_ht,whichObj,-12,1)
endfunction
function SetObjectDefaultRotation takes integer obj,real ax,real ay,real az returns nothing
&#160;&#160;&#160;&#160;call ResetObjectDefaultRotation(obj)
&#160;&#160;&#160;&#160;call AdjustObjectDefaultRotationX(obj,obj,ax)
&#160;&#160;&#160;&#160;call AdjustObjectDefaultRotationY(obj,obj,ay)
&#160;&#160;&#160;&#160;call AdjustObjectDefaultRotationZ(obj,obj,az)
endfunction
function ObjectAttachObject takes integer whichObj,integer toObj returns nothing
&#160;&#160;&#160;&#160;//将whichObj绑定到toObj上
&#160;&#160;&#160;&#160;//设置默认中轴线为当前中轴线
&#160;&#160;&#160;&#160;call SaveReal(tdo_obj_ht,whichObj,-4,LoadReal(tdo_obj_ht,whichObj,4))
&#160;&#160;&#160;&#160;call SaveReal(tdo_obj_ht,whichObj,-5,LoadReal(tdo_obj_ht,whichObj,5))
&#160;&#160;&#160;&#160;call SaveReal(tdo_obj_ht,whichObj,-6,LoadReal(tdo_obj_ht,whichObj,6))
&#160;&#160;&#160;&#160;call SaveReal(tdo_obj_ht,whichObj,-7,LoadReal(tdo_obj_ht,whichObj,7))
&#160;&#160;&#160;&#160;call SaveReal(tdo_obj_ht,whichObj,-8,LoadReal(tdo_obj_ht,whichObj,8))
&#160;&#160;&#160;&#160;call SaveReal(tdo_obj_ht,whichObj,-9,LoadReal(tdo_obj_ht,whichObj,9))
&#160;&#160;&#160;&#160;call SaveReal(tdo_obj_ht,whichObj,-10,LoadReal(tdo_obj_ht,whichObj,10))
&#160;&#160;&#160;&#160;call SaveReal(tdo_obj_ht,whichObj,-11,LoadReal(tdo_obj_ht,whichObj,11))
&#160;&#160;&#160;&#160;call SaveReal(tdo_obj_ht,whichObj,-12,LoadReal(tdo_obj_ht,whichObj,12))
&#160;&#160;&#160;&#160;call ObjectAddLoc(toObj,GetObjectOriginLoc(whichObj))
endfunction
function NewObject takes real x,real y,real z returns integer
&#160;&#160;&#160;&#160;//新建obj,中心坐标x,y,z 返回obj值
&#160;&#160;&#160;&#160;local integer i=1+LoadInteger(tdo_obj_ht,0,0)
&#160;&#160;&#160;&#160;call SaveInteger(tdo_obj_ht,0,0,i)
&#160;&#160;&#160;&#160;call SaveInteger(tdo_obj_ht,i,0,0)&#160;&#160;//点数初始0
&#160;&#160;&#160;&#160;call SetObjectOriginLoc(i,CreateLoc(x,y,z)) //设置中心点
&#160;&#160;&#160;&#160;//LoadReal(tdo_loc_ht,LoadInteger(tdo_obj_ht,i,-1),1~3) //获得坐标
&#160;&#160;&#160;&#160;call SaveReal(tdo_obj_ht,i,4,1) // x_x 4~6 中轴线
&#160;&#160;&#160;&#160;call SaveReal(tdo_obj_ht,i,5,0) // x_y
&#160;&#160;&#160;&#160;call SaveReal(tdo_obj_ht,i,6,0) // x_z
&#160;&#160;&#160;&#160;call SaveReal(tdo_obj_ht,i,7,0) // y_x 7~9 中轴线
&#160;&#160;&#160;&#160;call SaveReal(tdo_obj_ht,i,8,1) // y_y
&#160;&#160;&#160;&#160;call SaveReal(tdo_obj_ht,i,9,0) // y_z
&#160;&#160;&#160;&#160;call SaveReal(tdo_obj_ht,i,10,0) // z_x 10~12 中轴线
&#160;&#160;&#160;&#160;call SaveReal(tdo_obj_ht,i,11,0) // z_y
&#160;&#160;&#160;&#160;call SaveReal(tdo_obj_ht,i,12,1) // z_z
&#160;&#160;&#160;&#160;//默认中轴线 //恢复默认时用
&#160;&#160;&#160;&#160;call SaveReal(tdo_obj_ht,i,-4,1) // x_x 4~6 中轴线
&#160;&#160;&#160;&#160;call SaveReal(tdo_obj_ht,i,-5,0) // x_y
&#160;&#160;&#160;&#160;call SaveReal(tdo_obj_ht,i,-6,0) // x_z
&#160;&#160;&#160;&#160;call SaveReal(tdo_obj_ht,i,-7,0) // y_x 7~9 中轴线
&#160;&#160;&#160;&#160;call SaveReal(tdo_obj_ht,i,-8,1) // y_y
&#160;&#160;&#160;&#160;call SaveReal(tdo_obj_ht,i,-9,0) // y_z
&#160;&#160;&#160;&#160;call SaveReal(tdo_obj_ht,i,-10,0) // z_x 10~12 中轴线
&#160;&#160;&#160;&#160;call SaveReal(tdo_obj_ht,i,-11,0) // z_y
&#160;&#160;&#160;&#160;call SaveReal(tdo_obj_ht,i,-12,1) // z_z
&#160;&#160;&#160;&#160;return i
endfunction
function DeleteObject takes integer index returns nothing
&#160;&#160;&#160;&#160;local integer i=LoadInteger(tdo_obj_ht,index,0)
&#160;&#160;&#160;&#160;loop
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;exitwhen i<=0
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;call FlushChildHashtable(tdo_loc_ht,LoadInteger(tdo_obj_ht,index,i))
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;set i=i-1
&#160;&#160;&#160;&#160;endloop
&#160;&#160;&#160;&#160;call FlushChildHashtable(tdo_obj_ht,index)
endfunction[/jass]

评分

参与人数 1威望 +1 收起 理由
德鲁依 + 1 前辈乃好。

查看全部评分

 楼主| 发表于 2011-3-27 00:20:19 | 显示全部楼层
觉得图里的有时会"走形", 其实没走形- -
仔细看的话, 可以看出是因为位置原因
回复

使用道具 举报

 楼主| 发表于 2011-3-27 00:23:36 | 显示全部楼层
= =好难看的头像,我要上传
123.jpg
回复

使用道具 举报

发表于 2011-3-27 01:08:42 | 显示全部楼层
发现萃梦一只
回复

使用道具 举报

发表于 2011-3-27 08:32:59 | 显示全部楼层
发现梦梦与渣橙一只...
回复

使用道具 举报

 楼主| 发表于 2011-3-27 10:15:34 | 显示全部楼层
咦.
回复

使用道具 举报

发表于 2011-3-27 11:09:59 | 显示全部楼层
不明白是技能触发,还是什么触发,地图编辑器打不开,演示图我怎么也触发不出那个特效无语中
回复

使用道具 举报

 楼主| 发表于 2011-3-27 11:33:47 | 显示全部楼层
ESC就会做动作的~

是1.24版本
回复

使用道具 举报

 楼主| 发表于 2011-3-27 11:36:05 | 显示全部楼层
我可以打开呀= = 用自带WE都可以打开呢,
回复

使用道具 举报

发表于 2011-4-1 16:11:34 | 显示全部楼层
可以告诉我你是怎样旋转的吗,我也弄了个旋转代码,也可以做到你那种效果,具体是创建两个高度不等的圆形马甲阵,然后我让这两个马甲圆阵跟随着虚拟的一个面做旋转运动,但是不知道和你里面的那个比起来哪个好?
function Rotatef takes real old_x,real old_y,real old_z,real angle,real x,real y,real z returns nothing
    local real cos=Cos(angle)
    local real sin=Sin(angle)
    set glrf_x=(x*x*(1-cos)+cos)*old_x+(x*y*(1-cos)-z*sin)*old_y+(x*z*(1-cos)+y*sin)*old_z
    set glrf_y=(y*y*(1-cos)+cos)*old_y+(y*z*(1-cos)-x*sin)*old_z+(y*x*(1-cos)+z*sin)*old_x
    set glrf_z=(z*z*(1-cos)+cos)*old_z+(x*z*(1-cos)-y*sin)*old_x+(y*z*(1-cos)+x*sin)*old_y
endfunction
你这段代码公式可以讲解一下吗
回复

使用道具 举报

 楼主| 发表于 2011-4-2 07:51:42 | 显示全部楼层
glRotatef
求一点坐标(x,y,z) 以单位向量 (x0,y0,z0)为轴旋转 angle 度所在的新坐标..

我是给每个"物体"一个坐标系, 具有3个坐标轴的.
有3种旋转方向, 就是X,Y,Z轴的旋转, 这样说可能不理解
举个例子吧, FPS游戏中, 比如cs,穿越火线.
你可以上下看(X轴旋转)
也可以左右看(Z轴旋转)
但是不能把头歪过来看(Y轴旋转)

这个主要是可以做各种样式的物体- -
回复

使用道具 举报

 楼主| 发表于 2011-4-2 08:43:10 | 显示全部楼层
虚拟的面的话, ..也是2轴变换的吧,
mian.jpg
回复

使用道具 举报

 楼主| 发表于 2011-4-2 08:58:23 | 显示全部楼层
最重要的是这个不是专门为了做那个圆柱体才做的呢.

圆柱体只是个演示嘛.

比如用这个可以做个轮子会转的闪电特效堆成的卡车- -

= =额..  似乎不论怎么使用, 实际用途都没呢
回复

使用道具 举报

发表于 2011-4-2 09:09:54 | 显示全部楼层
实际效果其实是用来观赏的吧,如果有这个旋转平面函数就可以把地面上的图形和运动任意旋转,例如地面上的椭圆运动,可以把椭圆给“翻起来”,这样看起来会赏心悦目很多的。我也是有个相对坐标附着在指定平面上面,但是旋转了平面后,相对坐标的另外两条轴方向改变了,所以在旋转另外两条轴的时候我又要用坐标系旋转把点的坐标变换为没有旋转前的坐标,我觉得我的做法复杂了。
回复

使用道具 举报

 楼主| 发表于 2011-4-2 11:14:53 | 显示全部楼层
我是根据当前坐标, 直接计算按轴旋转后的新坐标的- - 就是那个函数,

看起来很复杂..(实际上是抄的openGL里的旋转函数)
回复

使用道具 举报

发表于 2011-4-2 22:22:16 | 显示全部楼层
葱白~~~
回复

使用道具 举报

发表于 2011-4-3 03:58:28 | 显示全部楼层
是1.24的..可惜了....如果是1.20e的话就好了...发现现在大家在逐渐淘汰1.20e的说.
回复

使用道具 举报

发表于 2011-4-3 18:08:17 | 显示全部楼层
貌似能用来做屏保的说……看到的第一眼就联想到windows 的三维花盒- -!!
ls的别泄气啊,其实我的机子上安了3个魔兽,1.20e,1.24d,1.26
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 点一下

本版积分规则

Archiver|移动端|小黑屋|地精研究院

GMT+8, 2024-12-22 10:55 , Processed in 0.097764 second(s), 26 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表