如何在OpenGL中旋转纹理?

问题描述 投票:2回答:3

我是android OpenGL的新手。我可以沿圆形路径旋转纹理,但是问题是当我旋转图像时会倾斜。从而使图像不正确。

android opengl-es
3个回答
7
投票

如果要旋转图像,则需要将其平移到原点,在原处进行旋转,然后再将其平移回原来的位置。

[如果您希望图像绕圆移动,可以尝试将其平移到原点,以相反的方向旋转,平移回去,然后执行已经在做的旋转。


3
投票

有两种补偿方法:

  • 补偿由轮毂周围的旋转引起的四边形的旋转

  • 用四边形旋转纹理坐标空间。>>
  • 解决方案1:

/* This draws a textured quad at the origin; use the modelview to position it */
void draw_textured_quad(void);

void draw_dial(float quad_angular_position)
{
    glMatrixMode(GL_MODELVIEW);
    glPushMatrix();

    glRotatef(-angular_position, 0, 0, 1); /* counterrotate the quad */
    glTranslatef(dial_radius, 0, 0); /* move to the dial */
    glRotatef(angular_position, 0, 0, 1); /* revolve around the dial */
    draw_textured_quad();

    glPopMatrix();
}

解决方案2:

/* This draws a textured quad at the origin; use the modelview to position it */
void draw_textured_quad(void);

void draw_dial(float quad_angular_position)
{
    glMatrixMode(GL_TEXTURE);
    glPushMatrix();
    glRotatef(angular_position, 0, 0, 1); /* rotate the texture_space _with_ the quad */

    glMatrixMode(GL_MODELVIEW);
    glPushMatrix();
    glTranslatef(dial_radius, 0, 0); /* move to the dial */
    glRotatef(angular_position, 0, 0, 1); /* revolve around the dial */
    draw_textured_quad();

    glMatrixMode(GL_TEXTURE);
    glPopMatrix();

    glMatrixMode(GL_MODELVIEW);
    glPopMatrix();
}

0
投票

处理此问题的另一种方法是更改​​顶点和文本坐标的顺序

© www.soinside.com 2019 - 2024. All rights reserved.