Почему мои координаты у обратные - PullRequest
1 голос
/ 22 декабря 2009

Итак, я пытаюсь отобразить свою программу в ландшафтном режиме ... однако я сталкиваюсь с чем-то, что мне не удается обернуть вокруг себя. Чтобы двигаться вниз по моей карте, я должен иметь отрицательное смещение. Если оставить текущее положительное значение yOffset равным 100, карта прокручивается вниз, а не вверх. Почему это? Я не рад, что для того, чтобы увидеть карту, нужно указать отрицательные координаты. Есть ли способ, которым я могу изменить это так, чтобы карта прокручивалась в противоположном направлении, когда yOffset положителен?

        float yOffset = 100;
    float xOffset = 0;
    glOrthof(0 - yOffset,
             320 - yOffset,
             480 + xOffset,
             0 + xOffset,
             -10000.0f,10000.0f);

    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();       
    glTranslatef(320.0f, 0.0f, 0.0f );
    glRotatef(90.0, 0.0, 0.0, 1.0);

    static const GLfloat squareVertices[] = {
    0.0f,  0.0f,
    1024.0f,  0.0f,
    0.0f,   1024.0f,
    1024.0f,   1024.0f
};



static const GLfloat texCoords[] = {
    0.0, 1.0,
    1.0, 1.0,
    0.0, 0.0,
    1.0, 0.0
};


glEnable(GL_BLEND);
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_TEXTURE_2D);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);    

glTexCoordPointer(2, GL_FLOAT, 0, texCoords);   
glVertexPointer(2, GL_FLOAT, 0, squareVertices);        


glBindTexture(GL_TEXTURE_2D, mapTexture);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);


glDisableClientState(GL_TEXTURE_COORD_ARRAY);
glDisable(GL_TEXTURE_2D);
glDisable(GL_BLEND);

Ответы [ 4 ]

2 голосов
/ 23 декабря 2009

Ваши координаты Y отрицательны, потому что вы делаете поворот экрана на 90 градусов 320x480, возможно, потому что вы играете в альбомной, а не в портретной ориентации. Поворот на 90 градусов в векторной математике можно выразить как:

(X, Y) становится (-Y, X)

Это происходит в вашем звонке на glOrtho(), когда вы вводите -yOffset в границы X и +xOffset в границы Y.

Что касается исправления, у меня есть один из тех моментов "как 3D математика работает снова", так что, возможно, один из этих хороших респондентов поможет вам.

...

(Старая версия этого ответа, которую я не считаю корректной, но может быть полезной):

Две идеи:

Вас может смущать тот факт, что при преобразовании матрицы в OpenGL вы не перемещаете камеру. Ты двигаешь мир. Чтобы переместить камеру вверх, вам действительно нужно переместить мир вниз. Но это может быть не вашей проблемой, в зависимости от того, как вы трансформируетесь.

Я заметил, что вы поворачиваетесь на 90 градусов вокруг X. Я забыл что, но это либо превратит ваши + Z в + Y и + Y в -Z, либо превратит ваши + Z в -Y и ваши + Y в + Z. Это может быть источником вашей инверсии оси. Вы можете попробовать повернуть в другую сторону (-90), или вы просто не можете вращаться и использовать собственную ориентацию координат.

1 голос
/ 22 декабря 2009

OpenGL использует «правую» систему координат . Чтобы изменить направление y, вы можете сделать что-то вроде:

glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glScalef (1.0f, -1.0f, 1.0f);
// multiply view transforms as usual... 
// multiply model transforms as usual...
0 голосов
/ 23 декабря 2009

Возможно, поменять местами эти значения: -10000.0f,10000.0f

0 голосов
/ 22 декабря 2009

OpenGL инвертирует координаты оси Y относительно UIKit (CGxyz и т. Д.) Или наоборот, в зависимости от вашей перспективы.

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