[英]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.