gpt4 book ai didi

c# - OpenTK - 如何旋转二维对象

转载 作者:可可西里 更新时间:2023-11-01 11:28:27 26 4
gpt4 key购买 nike

我正在尝试在我的 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 的第二次调用替换为 LoadIdentity,则当前模型矩阵将重置为单位矩阵,从而删除所有转换。

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

注意:这里重置了所有的变换,如果你想保持平移和缩放你可以尝试GL.Rotate(0, Vector3d.UnitZ);

关于c# - OpenTK - 如何旋转二维对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27712567/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com