簡體   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