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取っていると思いますが、実際には比率をで取っているので、問題が発生します。次のようにコードを編集します。widthheightheightwidth

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 に答える