Масштаб Qt OpenGL по умолчанию действительно странный - PullRequest
0 голосов
/ 08 октября 2011

Я работаю над примером OpenGL из книги по программированию на Qt. Почти все работает нормально, но масштаб по умолчанию, кажется, далеко. Я должен был видеть довольно стандартный куб, но вместо этого я вижу это.

wierd cube

Мой код для куба выглядит так:

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);

Я вижу это (выглядит правильно):

proper cube

Кто-нибудь знает, почему масштаб по умолчанию будет таким маленьким? Я делаю именно то, что написано в книге, но я действительно запутался. Я уже довольно много работал с OpenGL (с Glut), но я впервые использую Qt в качестве оболочки.

1 Ответ

4 голосов
/ 08 октября 2011

Что именно вы ожидаете от этого:

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

делать? Разве не имеет смысла делать что-то вроде этого:

glOrtho(-width, +width, -height, height, -2, 2);
...