O
Hier ist ein simpler Beispielcode.
GLint viewport[4];
GLdouble mvmatrix[16], projmatrix[16];
void s2Dto3D (int x,int y)
{
GLint realy;
GLdouble wx, wy, wz;
int z;
realy = viewport[3] - (GLint) y - 1;
glReadPixels(x,realy, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &zwert);
glGetIntegerv(GL_INDEX_MODE,&z);
if(z!=GL_INVALID_ENUM && z!=GL_INVALID_VALUE && z!=GL_INVALID_OPERATION)
{
gluUnProject ((GLdouble) x, (GLdouble) realy,(GLdouble) zwert,
mvmatrix, projmatrix, viewport, &cursorx, &cursory, &cursorz);
}
}
die parameter x und y sind nichts anderes als die 2d mauszeiger positionswerte vom bildschirm.
in cursorx/y/z werden hinterher die koordinaten gespeichert. wenn du vor hast eine kugel oder so auf diese koordinaten zu rendern, ist es ratsam den code zu verbessern, weil der auch die koordinaten der schrift oder andere 2d geometrien umrechnet.