1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
CVertex CGLfrustum::ScreenToVertex(CVertex vertex, const CVertex depthvert, bool usedepth)
{
double x, y, z;
double proj[17]; glGetDoublev(GL_PROJECTION_MATRIX, &proj[0]);
double mode[17]; glGetDoublev(GL_MODELVIEW_MATRIX, &mode[0]);
int viewport[5]; glGetIntegerv(GL_VIEWPORT, &viewport[0]);
//vertex.x = m_viewport[2] - vertex.x;
vertex.y = m_viewport[3] - vertex.y; // In OpenGL steigt Y von unten (0) nach oben
if (usedepth)//get the depth from given Vertex :-)
gluProject(depthvert.x, depthvert.y, depthvert.z, &mode[0], &proj[0], &m_viewport[0], &x, &y, &z), vertex.z = z;
else //get the depth from given Mouse :-(
glReadPixels(vertex.x, vertex.y, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &vertex.z);
//if(vertex.z == 1)
// vertex.z=z;
// TRACE("Depth Glu(%f) Pix(%f)\r\n",z, vertex.z);
gluUnProject(vertex.x, vertex.y, vertex.z, &mode[0], &proj[0], &viewport[0], &x, &y, &z);
return CVertex(x, y, z);
}
|