2012-09-21 61 views
2

可能重复后保留对象(比方说,一个平方)的大小相同:
Changing projection in OpenGL如何调整窗口大小

我想找到一种方法来保持相同物体的大小。我有这个从屏幕左上角移动到右下角的正方形。当我调整输出窗口的大小时,正方形的大小也会增加。

下面是我的显示和重塑功能。

void Changesize(int w,int h) 
{ 

    ww=w; 
     wh=h; 
    glViewport(0,0,w,h); 
    glMatrixMode(GL_PROJECTION); 
     glLoadIdentity() ; 
    glMatrixMode(GL_MODELVIEW); 

} 

void display(void) 
{ 

    printf("i=%f & j=%f \n",i,j); 
    glClear (GL_COLOR_BUFFER_BIT); 
    glColor3i (rand(), rand(), rand()); 
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
    glLoadIdentity(); 
    glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0); 
    glBegin(GL_POLYGON); 
    glColor3i (rand(), rand(), rand()); 
    glVertex3f (i, j-0.125, 0.0); 
    glVertex3f (i+0.125, j-0.125, 0.0); 
    glVertex3f (i+0.125, j , 0.0); 
    glVertex3f (i, j, 0.0); 
    glEnd(); 
    glFlush(); 
    usleep(100000); 
    i=i+0.0125; 
    j=j-0.0125; 

    if (i>0.999999) 
     { 
      i=0; 
      j=1; 
     } 
    glutSwapBuffers(); 
    glutPostRedisplay(); 

} 
+0

我昨天回答了几乎相同的问题,也许这将帮助你:改变OpenGL的投影(http://stackoverflow.com/questions/12518603/changing-in-opengl/12518816#12518816) – Tim

+0

非常感谢!我很感激。 –

回答

1

给这一个镜头:

#include <GL/glut.h> 

void display(void) 
{ 
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 

    glMatrixMode(GL_MODELVIEW); 
    glLoadIdentity(); 

    glColor3ub(255,0,0); 
    glPushMatrix(); 
     glScalef(50,50,50); 
     glBegin(GL_QUADS); 
      glVertex2f(-1,-1); 
      glVertex2f(1,-1); 
      glVertex2f(1,1); 
      glVertex2f(-1,1); 
     glEnd(); 
    glPopMatrix(); 

    glutSwapBuffers(); 
} 

void reshape(int w, int h) 
{ 
    glViewport(0, 0, w, h); 
    glMatrixMode(GL_PROJECTION); 
    glLoadIdentity(); 
    glOrtho(-w/2.0, w/2.0, -h/2.0, h/2.0, -1, 1); 
} 

int main(int argc, char **argv) 
{ 
    glutInit(&argc, argv); 
    glutInitDisplayMode(GLUT_RGBA | GLUT_DEPTH | GLUT_DOUBLE); 

    glutInitWindowSize(800,600); 
    glutCreateWindow("Scale"); 

    glutDisplayFunc(display); 
    glutReshapeFunc(reshape); 
    glutMainLoop(); 
    return 0; 
}