gluUnProject找到错误的坐标。我贪婪地画在黑色背景上,细胞尺寸为1x1。我尝试检测单元格中的单击并得到错误的坐标(不是1-1)。 我知道OpenGL 1.1已经老了,我必须使用它。我不喜欢它,大多数时候我使用2.1或3.1。
渲染代码:
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();
点击代码:
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;
答案 0 :(得分:0)
glPopMatrix()
正在丢弃您的最后一个矩阵。 glGetxxx()将返回另一个矩阵。