работает ТОЛЬКО ДО glTranslatef
после выполнения Трансляции... координаты выдаються с погрешностью, плз дополните функцию так чтобы погрешности не было
//Реакция на мышь
void mouse(int button,int state,int x, int y)
{
GLint viewport[4];
GLdouble mvmatrix[16], projmatrix[16];
//y – координата в OpenGL
GLint realy;
//Возвращаемые объектные x, y, z координаты
GLdouble wx,wy,wz;
switch(button)
{
case GLUT_LEFT_BUTTON:
if (state==GLUT_DOWN)
{
glGetIntegerv(GL_VIEWPORT,viewport);
glGetDoublev(GL_MODELVIEW_MATRIX,mvmatrix);
glGetDoublev(GL_PROJECTION_MATRIX,projmatrix);
//viewport[3] - высоте окна в пикселях
realy=viewport[3]-(GLint)y-1;
printf("Координаты в позиции курсора (%4d,%4d)\n",x,realy);
gluUnProject((GLdouble)x,(GLdouble)realy,0.0,mvmatrix,projmatrix,viewport,&wx,&wy,&wz);
printf("Объектные координаты при z=0 (%f,%f,%f)\n",wx,wy,wz);
gluUnProject((GLdouble)x,(GLdouble)realy,1.0,mvmatrix,projmatrix,viewport,&wx,&wy,&wz);
printf("Объектные координатыпри z=1 (%f,%f,%f)\n",wx,wy,wz);
}
break;
case GLUT_RIGHT_BUTTON:
if (state==GLUT_DOWN)
exit(0);
break;
}
}
надо
realy=viewport[3]-(GLint)y-1;
а у тебя
Yb = (float)viewport[3] - (float)MouseY;
и ещё ты Z координату выкинул...
gluUnProject( Xb, Yb, 0, modelview, projection, viewport, &GLX, &GLY, &modelview[0] );
Adler
z. координата мне не нужна.
realy=viewport[3]-(GLint)y-1; без нее тоже самое.
grouzdev
Да это функция отрисовки курсора
так вот, как избавиться от этой зависимости( от смещения ) я хочу чтобы функция работала независимо от любых преобразований, выдавала OpenGL позицию курсора. А моя функция после преобразований выдает с погрешностью. в данном случае -4.1f.
Demilivor, ты сначала выполняешь смещение (для рисования?), а потом находишь координаты мыши, должно быть наоборот. Т.е. нужно поменять glTranslatef и TransMouseCordsGL местами.
И ещё, когда что-то делаешь с матрицей, лучше бы её сохранять, а после рисования возвращать (см. glPushMatrix/glPopMatrix).
gluPerspective()
мешало :(( все заработало!!
но все же!! если кто нить сможет написать функцию которой будет по барабану любые преобразования в том числе gluPerspective() буду очень рад )))