繁体   English   中英

OpenTK - 如何旋转2D对象

[英]OpenTK - How to rotate a 2D object

我正在尝试在OpenTK项目中旋转2D对象。

发生的事情是旋转对象旋转后的对象,我不希望他们这样做。

在我旋转了一个物体后,如何重置旋转?

      protected override void OnRenderFrame(FrameEventArgs e)
       {
           GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit);
           GL.MatrixMode(MatrixMode.Projection);
           GL.LoadIdentity();
           GL.Ortho(0, game.Width, game.Height, 0, -1, 4);

           GL.MatrixMode(MatrixMode.Modelview);
           GL.LoadIdentity();

          drawObject();
          GL.Rotate(180, Vector3d.UnitZ);
          drawObject(); // Object I want to rotate
          GL.Rotate(-180, Vector3d.UnitZ);
          drawObject(); // I don't want this object to be rotated, but it does. How do I fix this?
}

谢谢!

在固定功能管道中,不附加旋转操作。 而是第二个替换第一个(只要中间没有PushMatrix操作)。 因此,您当前绘制的是第一个旋转180度左右的物体,第二个物体旋转-180度左右。

回到你的问题:如果你将第二个调用替换为Rotate with LoadIdentity,当前的模型矩阵将被重置为一个单位矩阵,删除所有变换。

drawObject();
GL.Rotate(180, Vector3d.UnitZ);
drawObject();
GL.LoadIdentity();
drawObject();

注意:此处重置所有转换,如果要保持平移和缩放,可以尝试GL.Rotate(0, Vector3d.UnitZ);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM