![]() |
1
1
我建议不要在事件处理程序中进行累积转换,而是在内部存储转换的当前值,然后只转换一次,但我不知道这是否是您想要的行为。 伪码:
|
![]() |
2
1
听起来你在这里发生了一些事情: 首先,你需要知道旋转是围绕原点发生的。所以当你平移然后旋转的时候,你不是围绕你认为的原点旋转,而是围绕新的原点旋转 -1个 0(由平移的反方向变换的原点)。 第二,你让事情变得比你真正需要的更困难。你应该考虑的是 gluLookAt . 你本质上是给它一个在你的场景中的位置,一个在你的场景中可以看到的点和一个“向上”的向量,它将正确地设置场景。要正确使用它,请跟踪相机的位置,调用该向量 第页 ,和向量 n个 (正常情况下。。。指示您正在寻找的方向)和 u型 (你的上方向向量)。如果 n个 和 u型 是正交向量(即它们彼此正交且具有单位长度)。如果你这样做,你可以计算 右 = n个 十 u型 ,(你的“右”向量),它将是与另外两个向量正交的法向量。然后你“看” 第页 + n个 并提供 u型 作为上方向向量。 理想情况下,你的 n个 , u型 和 右 有一些规范形式,例如:
然后逐渐累积旋转,并将其应用于oritenation向量的规范for。你可以用任何一个 Euler Rotations 或 Quaternion Rotations 为了积累你的旋转(我已经开始真正欣赏四元数方法的各种 reasons ). |