繁体   English   中英

二维纹理旋转到一个点

[英]Texture 2D Rotating to a point

无论如何,我可以将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. 对象当前位于(x,y)的中心
  2. 用(-x,-y)转换对象
  3. 对象现在位于(0,0)的中心
  4. 执行旋转
  5. 用(x,y)转换对象
  6. 对象再次以(x,y)为中心

这将旋转到位。

围绕一个点旋转呢? 而不是通过旋转对象的位置平移到原点,而是通过要旋转的点平移

  1. 对象当前位于(x,y)的中心
  2. 围绕其旋转的中心对象位于(a,b)
  3. 用(-a,-b)翻译对象
  4. 执行旋转
  5. 用(a,b)转换对象
  6. 对象现在已绕(a,b)旋转

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM