如何基于投影坐标旋转3D模型

时间:2014-06-23 01:30:07

标签: c# rotation opentk

我正在尝试在C#中使用OpenTK实现一些东西,当你渲染一个3d绘图时,你可以在我移动鼠标时围绕z轴(向上)旋转它。 我已经有了它的工作但是如下所示,我不得不想出一个任意常数500; 等式是:

arc_length = radius * theta
theta = arc_length / radius

其中radius = eye_pos.Length

arc_length是模型坐标中的delta_x,但是 (e.X - mouse_down_pos.X)处于屏幕坐标。 因此500用于将模型坐标映射到屏幕投影坐标。

问题:有没有办法消除这个常数并正确获得转换因子?

我有根据的猜测是,我应该以某种方式使用[delta_x,0,0]乘以投影矩阵的倒数...但是不知道如何。

private static Vector3 eye_pos = new Vector3(30.0f, 0.0f, 0.0f);
GL.MatrixMode(MatrixMode.Modelview);
Matrix4 lookat = Matrix4.LookAt(eye_pos.X, eye_pos.Y, eye_pos.Z, 0, 0, 0, 0, 0, 1);
...
private void glControl1_MouseMove(object sender, MouseEventArgs e)
{
  if (mouse_op == Mouse_Operation.Rotate)
   {
      decimal yaw = (decimal)MathHelper.DegreesToRadians((e.X - mouse_down_pos.X) * 500 / eye_pos.Length) + ref_yaw;
       SetYawAndRedraw(yaw);

     }
}

enter image description here

0 个答案:

没有答案