我试图在我的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?
}
谢谢!
答案 0 :(得分:3)
在固定功能管道中,不附加旋转操作。而是第二个替换第一个(只要中间没有PushMatrix操作)。所以你当前绘制的是第一个旋转180度左右的物体,第二个物体旋转-180度左右。
回到你的问题:如果你用RotI替换第二次调用LoadIdentity,当前的模型矩阵会被重置为一个单位矩阵,删除所有的变换。
drawObject();
GL.Rotate(180, Vector3d.UnitZ);
drawObject();
GL.LoadIdentity();
drawObject();
注意:此处会重置所有转换,如果您想保留翻译和缩放,可以尝试GL.Rotate(0, Vector3d.UnitZ);