Dear, Abbey.
Basically I discovered that the function is actually failing. What I have in my code:
Code:
class CGame
{
struct CViewingData
{
GLdouble projection[16];
GLdouble modelview[16];
GLint viewport[4];
} data;
...
};
CGame::CGame( int width, int height )
:
m_width( width / 2.0 ),
m_height( height / 2.0 )
...
{
...
glGetIntegerv( GL_VIEWPORT, data.viewport );
glMatrixMode( GL_MODELVIEW );
glLoadIdentity();
gluLookAt( 0, 0, m_width * 2.0, 0, 0, 0, 0, 1, 0 );
glGetDoublev( GL_MODELVIEW_MATRIX, data.modelview );
glMatrixMode( GL_PROJECTION );
glGetDoublev( GL_PROJECTION_MATRIX, data.projection );
...
}
bool CGame::unProject( int x, int y, std::pair< double, double > & result )
{
double world_x, world_y, world_z, z_depth;
glReadPixels( x, y, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &z_depth );
if( gluUnProject( x, data.viewport[3] - y - 1, z_depth,
data.modelview, data.projection, data.viewport,
&world_x, &world_y, &world_z ) == GL_FALSE )
{
return false;
}
result = std::pair< double, double >( world_x, world_y );
return true;
}
I call it like:
Code:
case WM_LBUTTONDOWN:
{
std::pair< double, double > p;
if( s_game->unProject( LOWORD(lParam), HIWORD(lParam), p ) )
{
dout << p.first << TEXT("\t") << p.second << TEXT("\n");
}
else
{
dout << TEXT("BLAH\n");
}
break;
}
And it always is disgusted, replying "BLAH" whenever I click. How am I ever going to get my uncooperative teenage monster to behave?
Sincerely,
FLUSTERED IN MUSTARD