Как повернуть текстуру в OpenGL? - PullRequest
1 голос
/ 09 ноября 2011

Я новичок в Android OpenGL. Я могу вращать текстуру по кругу, но проблема в том, что когда я вращаю, изображение наклонено. Так что изображение не правильное.

Ответы [ 2 ]

7 голосов
/ 09 ноября 2011

Если вы хотите, чтобы ваше изображение вращалось, вам нужно перевести его в исходное положение, выполнить вращение там, а затем перевести его туда, где оно было изначально.

Если вы хотите, чтобы ваше изображение двигалось по кругу, вы можете попробовать перевести его в исходное положение, сделать поворот в противоположном направлении, перевести его обратно, а затем выполнить вращение, которое вы уже делаете.

3 голосов
/ 09 ноября 2011

Существует два способа компенсировать это:

  • компенсировать вращение четырехугольника, вызванное вращением вокруг ступицы

или

  • повернуть текстурное координатное пространство с помощью квадрата.

Решение 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();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...