OpenGL 2D图形不平行于屏幕



我认为我绘制的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();
}

我认为代码没问题,因为我已经为ModelView和投影加载了。我的图纸的结果是,如果我的矩形平行于水平线,那么它是一个矩形,当转弯时,它会倾斜。看来我正在绘制的飞机向后倾斜。

事物很琐碎:

float32 ratio = width / height;

coz宽度和高度都是int,因此比率不准确。

如果转换为float,则变为正常。

最新更新