将相对于 obj1 的坐标转换为相对于 obj2
Translate coordinates relative to obj1 to be relative to obj2
我有一个创建按钮的对象 (obj1
)。
self.createButton({ position={ 15.7, 0.1, -1.8 }, ...})
当然,这个位置是相对于obj1
。
obj1
是一个袋子,它创建的按钮在游戏板上,远离袋子(从 X 分量的大小可以看出)。这是不合适的,这意味着包不能移动。我想让游戏板创建按钮。
如何确定在游戏面板 (obj2
) 中调用 createButton
时提供的坐标?
我发现可以使用以下方法将相对位置转换为绝对位置:
local rel_pos = Vector(15.7, 0.1, -1.8)
local abs_pos = Vector(-v[1], v[2], v[3])
abs_pos:scale( obj1.getScale() )
abs_pos:rotateOver('z', obj1.getRotation()['z'] ) -- The order is important
abs_pos:rotateOver('x', obj1.getRotation()['x'] )
abs_pos:rotateOver('y', obj1.getRotation()['y'] )
abs_pos:add( obj1.getPosition() )
使用 obj2
反转过程将获得要在 obj2
中使用的矢量。
但为什么 X 分量被取反了?在我发现 positionToWorld
之前,我一直以为我遗漏了一些东西,这个函数正是为了完成上述尝试。原来我还需要否定X分量。
local rel_pos = Vector(15.7, 0.1, -1.8)
local abs_pos = obj1.positionToWorld(Vector(-v[1], v[2], v[3]))
我只能得出结论,createButton
有一个错误,需要一个人否定它提供的 position
的 X 组件。
完整解决方案如下:
local v = Vector(15.7, 0.1, -1.8)
v:setAt(1, -v[1]) -- Bug-compensated loc rel to obj1 -> Loc rel to obj1
v = obj1.positionToWorld(v) -- Loc rel to obj1 -> Absolute loc
v = obj2.positionToLocal(v) -- Absolute loc -> Loc rel to obj2
v:setAt(1, -v[1]) -- Loc rel to obj2 -> Bug-compensated loc rel to obj2
print(logString(v))
最终结果被替换
-- In obj1 (the bag)
self.createButton({ position={ 15.7, 0.1, -1.8 }, ... })
和
-- In obj2 (the game board)
self.createButton({ position={ -7.745875, 13.7634, -1.006971 }, ... })
我有一个创建按钮的对象 (obj1
)。
self.createButton({ position={ 15.7, 0.1, -1.8 }, ...})
当然,这个位置是相对于obj1
。
obj1
是一个袋子,它创建的按钮在游戏板上,远离袋子(从 X 分量的大小可以看出)。这是不合适的,这意味着包不能移动。我想让游戏板创建按钮。
如何确定在游戏面板 (obj2
) 中调用 createButton
时提供的坐标?
我发现可以使用以下方法将相对位置转换为绝对位置:
local rel_pos = Vector(15.7, 0.1, -1.8)
local abs_pos = Vector(-v[1], v[2], v[3])
abs_pos:scale( obj1.getScale() )
abs_pos:rotateOver('z', obj1.getRotation()['z'] ) -- The order is important
abs_pos:rotateOver('x', obj1.getRotation()['x'] )
abs_pos:rotateOver('y', obj1.getRotation()['y'] )
abs_pos:add( obj1.getPosition() )
使用 obj2
反转过程将获得要在 obj2
中使用的矢量。
但为什么 X 分量被取反了?在我发现 positionToWorld
之前,我一直以为我遗漏了一些东西,这个函数正是为了完成上述尝试。原来我还需要否定X分量。
local rel_pos = Vector(15.7, 0.1, -1.8)
local abs_pos = obj1.positionToWorld(Vector(-v[1], v[2], v[3]))
我只能得出结论,createButton
有一个错误,需要一个人否定它提供的 position
的 X 组件。
完整解决方案如下:
local v = Vector(15.7, 0.1, -1.8)
v:setAt(1, -v[1]) -- Bug-compensated loc rel to obj1 -> Loc rel to obj1
v = obj1.positionToWorld(v) -- Loc rel to obj1 -> Absolute loc
v = obj2.positionToLocal(v) -- Absolute loc -> Loc rel to obj2
v:setAt(1, -v[1]) -- Loc rel to obj2 -> Bug-compensated loc rel to obj2
print(logString(v))
最终结果被替换
-- In obj1 (the bag)
self.createButton({ position={ 15.7, 0.1, -1.8 }, ... })
和
-- In obj2 (the game board)
self.createButton({ position={ -7.745875, 13.7634, -1.006971 }, ... })