Stasiuuuuu gl_DEPTH_COMPONENT jest nieposrotwany, natomiast GL_COLOR_BUFFER_BIT.
ja bym ci stasiu proponowal ustawic sobie gdzies w przestrzeni przed kamera kwadraciki o roznyvch kolorach i bym na podstawie na ktorym kwadracie jest kursor wstawil tam punkt
bool TFCOpenGL::mouse_tick( int button, int state, int x, int y, t3dpoint & obj )
{
glPushMatrix();
double *objx=new double;
double *objy=new double;
double *objz=new double;
int*viewport = new int[4];
double* projection = new double[16];
double* modelview = new double[16];
float z;
//get the projection matrix
glGetDoublev( GL_PROJECTION_MATRIX, projection );
//get the modelview matrix
glGetDoublev( GL_MODELVIEW_MATRIX, modelview );
//get the viewport
glViewport(0, 0, FCOpenGL->Width, FCOpenGL->Height);
glGetIntegerv( GL_VIEWPORT, viewport );
//Read the window z co-ordinate
//(the z value on that point in unit cube)
// unsigned char* pdata = new unsigned char[1];
// glReadPixels( x, FCOpenGL->Height-y, 1, 1,
// GL_DEPTH_COMPONENT, GL_FLOAT, &z);
// z = pdata[0];
//Unproject the window co-ordinates to
//find the world co-ordinates.
// ShowMessage(FloatToStr(z));
gluUnProject( x, FCOpenGL->Height-y-1, 0.0, modelview,
projection, viewport, objx, objy, objz );
Gef1.x = (*objx);
Gef1.y = (*objy);
Gef1.z = (*objz);
gluUnProject( x, FCOpenGL->Height-y-1, 0.986, modelview,
projection, viewport, objx, objy, objz );
Gef2.x = (*objx);
Gef2.y = (*objy);
Gef2.z = (*objz);
glPopMatrix();
ballpos = vectors_add(Gef1,vector_multiple(Normalize(vectorAB(Gef1,Gef2)),1000.0f));
// PGLVEC3 ps;
//ps= GetOpenGLPos(x,y);
//ballpos.x = ps.x;
//ballpos.y = ps.y;
//ballpos.z = ps.z;
// obj = Normalize(obj);
//
//obj = vectors_add(old,vector_multiple(obj,1000.0f));
/*
SCENE_MODELS[0]->CreateCollArrays();
ShowMessage(IntToStr(SCENE_MODELS[0]->VBO_BE.Length));
double mvmatrix[16];
double projmatrix[16];
int viewport[4];
double dX, dY, dZ, dClickY; // glUnProject uses doubles, but I'm using floats for these 3D vectors
glGetIntegerv(GL_VIEWPORT, viewport);
glGetDoublev (GL_MODELVIEW_MATRIX, mvmatrix);
glGetDoublev (GL_PROJECTION_MATRIX, projmatrix);
dClickY = double (FCOpenGL->Height - y); // OpenGL renders with (0,0) on bottom, mouse reports with (0,0) on top
gluUnProject ((double) x, dClickY, 0.0, mvmatrix, projmatrix, viewport, &dX, &dY, &dZ);
t3dpoint ClickRayP1 = triplesingletoT3DPOINT ( (float) dX, (float) dY, (float) dZ );
gluUnProject ((double) x, dClickY, 1.0, mvmatrix, projmatrix, viewport, &dX, &dY, &dZ);
t3dpoint ClickRayP2 = triplesingletoT3DPOINT ( (float) dX, (float) dY, (float) dZ );
Gef1 = ClickRayP1;
Gef2 = ClickRayP2;
t3dpoint normal;
float distance;
//normal = Normalize(vectorAB(old,Gef2));
normal = Normalize(vectors_frontadd(FCOpenGL->old,FCOpenGL->SUPERPOINT));
distance = getplaneD(normal, old);
//SCENE_MODEL RayIntersectModel2
if (classifyapointagainstaplane(Gef2,normal,distance) == isBack) {
normal = Normalize(vectorAB(Gef1,Gef2));
normal.x = -normal.x;
normal.y = -normal.y;
normal.z = -normal.z;
distance = n3ddistance(Gef1,Gef2);
Gef2 = vectors_add(Gef1,vector_multiple(normal,distance));
}
t3dpoint line[2];
line[0] = Gef1;line[1] = Gef2;
if(SCENE_MODELS[0]->RayIntersectModel2(old,line)==true) ShowMessage("INTERSECTION");
*/
}
Tak na boku ten kod zawsze mi zwraca punkt troche za wysoko ale os X jest poprawna :S