0

ウィンドウの全幅を占める rect である必要があります。錐台の幅が -5 から 5 で、四角形のサイズが 10x10 で、四角形が錐台の平面近くのように同じ z 軸の位置にあるため、これを期待しています。結果が非常に小さく、四角形のように見えません。理由がわかりません。

void GLWidget::initializeGL() {

    glClearColor(1.0f, 1.0f, 1.0f, 0.0f);
}

void GLWidget::resizeGL(int w, int h) {

    glViewport(0,0, w, h);
    glMatrixMode(GL_PROJECTION);
    double ratio = (double)w/(double)h;
    double size = ((10.0/ratio)/2.0);
    glFrustum(-5.0, 5.0, -size, size, 10.0, 50.0);

}

void GLWidget::paintGL() {

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    glTranslatef(0.0f, 0.0f, -10.0f);

    glColor3f(0.0f, 0.0f, 0.0f);
    glBegin(GL_QUADS);
    glVertex3f(5.0f, -5.0f, 0.0f);
    glVertex3f(5.0f, 5.0f, 0.0f);
    glVertex3f(-5.0f, 5.0f, 0.0f);
    glVertex3f(-5.0f, -5.0f, 0.0f);
    glEnd();

    glFlush();


}
4

1 に答える 1

1

ウィンドウの全幅を占める rect である必要があります。

それでは、四角形を描画するときのタスクに適したオルソ投影に投影を切り替えます。また、フラスタムまたはオルソを適用する前に、射影行列をアイデンティティにリセットする必要があります。

ヒント: 内のすべてのコードをメソッドresizeGLに入れる必要があります。paintGLQt を使用されているようですが、 getter 関数widthheightgetter 関数を使用してウィジェットの幅と高さを簡単に取得できます。また、次のようglClearColorpainGLもなります。

void GLWidget::initializeGL() {
}

void GLWidget::resizeGL(int w, int h) {


}

void GLWidget::paintGL()
{
    double const ratio = (double)width()/(double)height();
    double const size = ((10.0/ratio)/2.0);

    glClearColor(1.0f, 1.0f, 1.0f, 0.0f);
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glViewport(0,0, width(), height());
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glFrustum(-5.0, 5.0, -size, size, 10.0, 50.0);

    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    glTranslatef(0.0f, 0.0f, -10.0f);

    draw_perspective_stuff();

    glViewport(0,0, width(), height());
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();

    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();

    // using identity projection, this fills the viewport
    glColor3f(0.0f, 0.0f, 0.0f);
    glBegin(GL_QUADS);
    glVertex3f(-1.f, -1.f, 0.0f);
    glVertex3f( 1.f, -1.f, 0.0f);
    glVertex3f( 1.f,  1.f, 0.0f);
    glVertex3f(-1.f,  1.f, 0.0f);
    glEnd();

    glFlush();
}
于 2013-04-18T09:51:04.880 に答える