Я думаю, что 2D-плоскость, на которой я рисую, не параллельна экрану.
Во-первых, в моей функции изменения размера окна я помещаю:
static void Resize(int w, int h)
{
width = w;
height = h;
glViewport(0, 0, width, height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
float32 ratio = width / height;
b2Vec2 extents(ratio * 25.0f, 25.0f);
extents *= viewZoom;
b2Vec2 lower = settings.viewCenter - extents;
b2Vec2 upper = settings.viewCenter + extents;
gluOrtho2D(lower.x, upper.x, lower.y, upper.y);
}
Вот как я инициализирую opengl.
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA );
glutInitWindowSize(width, height);
mainWindow = glutCreateWindow("window");
И функция drawscene:
void drawScene() {
glClear(GL_COLOR_BUFFER_BIT );
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, texture);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glColor3f(1.0f, 1.0f, 1.0f);
glBegin(GL_QUADS);
glTexCoord2f(0.0f, 0.0f);
glVertex2f(cords[0].x,cords[0].y);
glTexCoord2f(1.0f, 0.0f);
glVertex2f(cords[1].x,cords[1].y);
glTexCoord2f(1.0f, 1.0f);
glVertex2f(cords[2].x,cords[2].y);
glTexCoord2f(0.0f, 1.0f);
glVertex2f(cords[3].x,cords[3].y);
glEnd();
glDisable(GL_BLEND);
glDisable(GL_TEXTURE_2D);
glutSwapBuffers();
}
Я думаю, что код не проблема, потому что я уже загрузил Identity для ModelView и Projection. Результат моего рисунка таков, что если мой прямоугольник параллелен горизонтальной линии, то это прямоугольник, при повороте на некоторый угол он становится перекошенным. Кажется, что плоскость, на которой я рисую, наклонена назад.
gluLookAt
, чтобы указать положение глаз. Потому что по умолчанию положение глаз равно 1,1,1. Так что, если ваш прямоугольник достаточно велик, то после преобразования он может оказаться позади положения глаз. Или заменитеgluOrtho2D
наglOrtho(lower.x, upper.x, lower.y, upper.y, -20, 20)
. - person Frank Cheng   schedule 19.12.2012