纹理2D旋转到一个点

时间:2013-11-21 19:35:52

标签: c# opengl rotation

无论如何我可以将我的2D纹理图像旋转到一个点吗?我尝试过glRotate函数,它旋转并移动对象。我正在寻找一种函数/方法,通过不移动纹理将纹理旋转到一个点。

这是我的抽奖代码:

static void Draw2DTexture(int textureid, float x1, float y1, float width, float height, Color color)
{
    float x2 = x1 + width;
    float y2 = y1 + height;
    RectangleF rect;
    rect = new RectangleF(0, 0, 1, 1);
    GL.PushAttrib(AttribMask.ColorBufferBit);
    GL.Color3(color);
    GL.BindTexture(TextureTarget.Texture2D, textureid);
    GL.Enable(EnableCap.Texture2D);
    GL.Disable(EnableCap.DepthTest);
    GL.Rotate(35, 0f, 0f, 1f);
    GL.Begin(BeginMode.Quads);
    GL.TexCoord2(rect.Right, rect.Bottom); GL.Vertex2(x2, y2);
    GL.TexCoord2(rect.Right, rect.Top); GL.Vertex2(x2, y1);
    GL.TexCoord2(rect.Left, rect.Top); GL.Vertex2(x1, y1);
    GL.TexCoord2(rect.Left, rect.Bottom); GL.Vertex2(x1, y2);
    GL.End();
    GL.Enable(EnableCap.DepthTest);
    GL.PopAttrib();
}

Draw2DTexture(5, 300f, 300f, 256f, 512f, Color.White);

1 个答案:

答案 0 :(得分:1)

“它旋转并移动对象”

我不确定将旋转到点是什么,但你在这里提到的问题是关于拥有正确的旋转中心。

无论何时向对象应用旋转,都会围绕原点旋转。这很好,但是当你的物体不是以原点为中心时会发生什么?您需要将对象转换为原点,旋转它并将其转换回原始位置。

  1. 对象当前以(x,y)
  2. 为中心
  3. 通过(-x,-y)
  4. 翻译对象
  5. 对象现在以(0,0)
  6. 为中心
  7. 执行轮换
  8. 通过(x,y)翻译对象
  9. 对象再次居中于(x,y)
  10. 这将在适当的位置旋转。

    围绕某个点旋转 怎么样?不是通过旋转物体的位置平移到原点,而是通过您想要旋转的点进行平移

    1. 对象当前以(x,y)
    2. 为中心
    3. 要旋转的中心对象位于(a,b)
    4. 通过(-a,-b)
    5. 翻译对象
    6. 执行轮换
    7. 通过(a,b)
    8. 翻译对象
    9. 对象现在围绕(a,b)
    10. 旋转