0

私は、Qt プログラミングの本から OpenGL の例に取り組んでいます。ほとんどすべてが正常に機能しますが、デフォルトのスケールはかなりずれているようです。かなり標準的な立方体が表示されるはずですが、代わりにこれが表示されます。

奇妙な立方体

キューブのコードは次のようになります。

glBegin(GL_QUADS);

//top face
qglColor(m_faceColors[0]);
glVertex3f(-m_cubeSize, m_cubeSize, -m_cubeSize);
glVertex3f(m_cubeSize, m_cubeSize, -m_cubeSize);
glVertex3f(m_cubeSize, m_cubeSize, m_cubeSize);
glVertex3f(-m_cubeSize, m_cubeSize, m_cubeSize);

// left face
qglColor(m_faceColors[1]);
glVertex3f(-m_cubeSize, -m_cubeSize, -m_cubeSize);
glVertex3f(-m_cubeSize, m_cubeSize, -m_cubeSize);
glVertex3f(-m_cubeSize, m_cubeSize, m_cubeSize);
glVertex3f(-m_cubeSize, -m_cubeSize, m_cubeSize);

等々...

奇妙な glScalef を呼び出しているわけではありません。私の resizeGL() は次のようになります。

void GLWidget::resizeGL(int width, int height)
{
    glViewport(0, 0, width, height);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    m_width = (height>0) ? (GLfloat)width/height : 1;
    glOrtho(-width, +width, -1.0, 1.0, -2, 2);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
}

m_cubeSize は 1.0 です

とにかく、 draw() 関数でこれを行うと:

glScalef(275, 0.5, 0.5);

私はこれを見ます(正しいように見えます):

適切な立方体

デフォルトで x スケールが非常に小さい理由を知っている人はいますか? 私は本に書かれていることを正確にやっていますが、本当に混乱しています。以前に (Glut を使用して) OpenGL をかなり使用したことがありますが、Qt をラッパーとして使用するのはこれが初めてです。

4

1 に答える 1

4

あなたはこれを正確に何を期待していますか:

glOrtho(-width, +width, -1.0, 1.0, -2, 2);

する?次のようなことをする方が理にかなっているでしょうか。

glOrtho(-width, +width, -height, height, -2, 2);
于 2011-10-07T20:35:16.047 に答える