0

我写了一些代码,期望在屏幕中间看到一个正方形,而不是正方形看起来更高,在屏幕顶部附近的某些纵横比中,稍微向左。

这是我屏幕上绘制的内容

使用另一个纵横比:

另一个例子

这是我的代码的相关部分:

void resize(uint32_t height, uint32_t width){
    glViewport(0, 0, width, height);

    glMatrixMode (GL_PROJECTION); //set the matrix to projection
    glLoadIdentity();
    gluPerspective(60, (GLfloat)width / (GLfloat)height, 1.0, 1000.0);
}


void draw(){
    glMatrixMode(GL_MODELVIEW);
    glPushMatrix();
    glLoadIdentity();

    glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT);

    //set up camera
    glLoadIdentity();
    gluLookAt(0,10,0,0,0,0,0.001,0.999,0);

    //draw a square in the center of the screen
    glBegin(GL_TRIANGLE_FAN);
    glColor4f(0,1,1,1);
    glVertex3f(-1,0,-1);
    glVertex3f(-1,0,1);
    glVertex3f(1,0,1);
    glVertex3f(1,0,-1);
    glEnd();

    glPopMatrix();
}

0,0,0 不应该是屏幕的中间吗?gluLookAt 不应该将我指定的任何坐标放在屏幕的中心吗?

4

1 回答 1

2

改变up向量的值

gluLookAt(0,10,0,0,0,0,0,0,1);

你的眼睛在正y轴,中心的参考点和up(头部)矢量必须沿着 -z轴。您在调整大小功能中又犯了一个错误

void resize(uint32_t height, uint32_t width){
glViewport(0, 0, width, height);
.....................
gluPerspective(60, (GLfloat)width / (GLfloat)height, 1.0, 1000.0);
}

您的变量height存储屏幕宽度和变量width存储高度,您已经定义了glViewport并且gluPerspective您认为您的比例widthheight,但实际上您的比例heightwidth,因此出现了问题。编辑你的代码如下:

void resize(uint32_t width, uint32_t height){
glViewport(0, 0, width, height);
..................
gluPerspective(60, (GLfloat)width / (GLfloat)height, 1.0, 1000.0);
}
于 2012-09-04T15:06:49.487 回答