0

私が描いている 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 と Projection の loadIdentity は既にロード済みなので、コードは問題ないと思います。私の描画の結果は、私の長方形が水平線に平行である場合、それは長方形であり、角度を変えると歪んだものになります。私が描いている平面が後方に傾いているようです。

4

1 に答える 1

0

物事は些細なことです:

float32 ratio = width / height;

cozの幅と高さは両方ともintであるため、比率は正確ではありません。

フロートに変換すると正常になります。

于 2013-03-01T01:27:25.370 に答える