【发布时间】:2014-09-28 12:04:25
【问题描述】:
我正在编写一个图形应用程序,它可以使用鼠标控制执行全局转换(旋转和平移)。有没有人有一个示例显示如何使用以下方法实现这一点:
MouseDown(object sender, MouseEventArgs e) - set the translate/rotate offset
MouseMove(object sender, MouseEventArgs e) - increment translate/rotate variables
OnPaint(Graphics graphics, float time) - use Matrix object to do global transform
问题:旋转图形后,当我翻译它们时,它们会根据旋转变换移动。我是否需要在设置翻译变量的 MouseDown 和 MouseMove 中补偿这种旋转?
【问题讨论】:
-
非常不清楚。矩阵乘法不可交换。是先平移再旋转还是先旋转再平移,这会产生很大的不同。
-
没错,汉斯。所以我的问题是“我如何实现这一目标?”。想象一下创建一个用户可以在 2D 迷宫中漫游的电脑游戏。当你按一个键转动时,用户的角色在迷宫转动时保持静止。当您按下一个键向前移动时,角色再次保持静止(例如在屏幕中心),但 2d 地图向下移动。我已经通过将三角函数单独应用于所有世界对象来做到这一点。但使用图形矩阵似乎是一种更好的方法。
-
您是否以正确的方式进行旋转?即,将对象平移到原点,然后旋转,然后将其平移到其原始位置。因为有一种叫做 AXIS OF ROTATION 的东西会产生巨大的影响