2013-04-17 53 views
0

它应该是rect,这将需要整个窗口的宽度。我期待这一点,因为平截头体的宽度是-5到5,矩形的大小是10x10,并且rect位于相同的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(); 


} 
+0

试着写你的程序接受键盘输入,改变你传递给像截方法的参数,并在屏幕上显示当前正在使用的值。然后你可以实时改变这些值,直到你知道你在做什么错误:) – Patashu

回答

1

它应该是矩形,这将花费窗口的整个宽度。

那么,在绘制矩形时,将投影转换为更适合任何正投影的任务。您还必须在应用平截头体或正视图之前将投影矩阵重置为标识。

提示:您的resizeGL中的所有代码都应该写入paintGL方法。我看到你正在使用Qt,所以你可以使用widthheight getter函数方便地获得widget的宽度和高度。此外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(); 
} 
+0

是的,这是因为我没有重置投影矩阵,thx – Krab