它应该是矩形的,它将占据整个窗口的宽度。 我期望如此,因为视锥的宽度是-5到5,并且rect的大小是10x10,并且rect像在视锥的普ane膜附近一样在相同的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();


}

===============>>#1 票数:1 已采纳

它应该是矩形的,它将占据整个窗口的宽度。

好了,然后在绘制矩形时将投影切换到更适合的投影(正交投影)。 同样,在应用视锥或正交之前,您还必须将投影矩阵重置为同一性。

提示: resizeGL所有代码都应放入paintGL方法中。 我看到您正在使用Qt,因此您可以使用widthheight getter函数方便地获取小部件的宽度和高度。 glClearColor也同样会进入painGL

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();
}

  ask by Krab translate from so

未解决问题?本站智能推荐: