-1

gluUnProject find wrong coordinates. I have greed drawing on black background with cell dimension 1x1. I try to detect click in cells and I getting wrong coordinates (not 1 - 1). I know that is OpenGL 1.1 old, bud I must use it. I don't good with it, most time I use 2.1 or 3.1.

Render code:

glClear(GL_COLOR_BUFFER_BIT);

glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluPerspective(45.0f, width() / (float)height(), 0.1f, 100.0f);
gluLookAt(m_camera->getX(), m_camera->getY(), m_camera->getZ(),
          m_camera->getX(), m_camera->getY(), m_camera->getZ() - 1.0f,
          0.0f, 1.0f, 0.0f);
glPushMatrix();

int i;

/*
 * Render grid
 */
for(i = 0; i <= m_mapProperties->getWidth(); i++)
{
    glm::vec3 position(i * m_mapProperties->getGridWidth(), 0.0f, 0.0f);
    glm::vec3 scale(0.05f, m_mapProperties->getHeight() * m_mapProperties->getGridHeight(), 0.0f);
    RenderUtil::render(position, scale);
}
for(i = 0; i <= m_mapProperties->getHeight(); i++)
{
    glm::vec3 position(0.0f, i * m_mapProperties->getGridHeight(), 0.0f);
    glm::vec3 scale(m_mapProperties->getWidth() * m_mapProperties->getGridWidth(), 0.05f, 0.0f);
    RenderUtil::render(position, scale);
}

for(i = 0; i < m_width * m_height; i++)
    if(m_map[i])
        m_map[i]->render();

glPopMatrix();

Click code:

QPoint cursorPos = event->pos();
    GLint viewport[4];
    GLdouble modelview[16];
    GLdouble projection[16];

    glGetDoublev(GL_MODELVIEW_MATRIX, modelview);
    glGetDoublev(GL_PROJECTION_MATRIX, projection);
    glGetIntegerv(GL_VIEWPORT, viewport);

    GLfloat winX, winY, winZ = 0.0f;
    GLdouble x, y, z;

    winX = (float)cursorPos.x();
    winY = (float)viewport[3] - (float)cursorPos.y();
    glReadPixels(winX, winY, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &winZ);
    winZ = 0.0f;
    winZ = -m_camera->getZ();
    gluUnProject(winX, winY, winZ, modelview, projection, viewport, &x, &y, &z);
    qDebug() << x
             << y;
nekicneko99
  • 3
  • 1
  • 6

1 Answers1

0

glPopMatrix() is discarding your last matrix. glGetxxx() will return another matrix.

BDL
  • 21,052
  • 22
  • 49
  • 55
Ripi2
  • 7,031
  • 1
  • 17
  • 33