Навигация
Поддержать материально
Steam Greenlight

Логотипы
Медальки
Гость
Имя

Пароль



Вы не зарегистрированны?
Нажмите здесь для регистрации.

Забыли пароль?
Запросите новый здесь.
Темы форума
189 - Race V
Вчера, 14:43
 BlitzID
Разрешите представит…
6.07.2025
 BlitzID
189 - ?
2.07.2025
 BlitzID
В каком банке открыт…
29.06.2025
 Dan
WoL
23.06.2025
 PapkaI_Igrodel
Привет выжившие
23.06.2025
 PapkaI_Igrodel
MarketGameV4
13.06.2025
 IAmNotARobot
188 - RPG
17.02.2025
 Mefistofel
Galactic Showdown -…
30.01.2025
 Darthman
188 - ?
1.01.2025
 Mefistofel
Сейчас на сайте
Гостей: 1
На сайте нет зарегистрированных пользователей

Пользователей: 1,795
новичок: BlitzID
Обсуждение «Координаты мыши GL»
Demilivor
Avatar пользователя

Опубликовано 29.07.2009 10:41 (16 лет назад)    #
Как получить координаты мыши после glTranslatef( 0, 0, -0.1f );

void TransMouseCordsGL( GLdouble &GLX, GLdouble &GLY )
{
GLdouble Xb = MouseX, Yb; // = Y;
GLint viewport[4];
GLdouble modelview[16];
GLdouble projection[16];

glGetDoublev( GL_MODELVIEW_MATRIX, modelview );
glGetDoublev( GL_PROJECTION_MATRIX, projection );
glGetIntegerv( GL_VIEWPORT, viewport );

Yb = (float)viewport[3] - (float)MouseY;
gluUnProject( Xb, Yb, 0, modelview, projection, viewport, &GLX, &GLY, &modelview[0] );
}

работает ТОЛЬКО ДО glTranslatef
после выполнения Трансляции... координаты выдаються с погрешностью, плз дополните функцию так чтобы погрешности не было
Race V:Не участвую.
grouzdev
Администратор
Avatar пользователя

Опубликовано 29.07.2009 13:07 (16 лет назад)    #
А где translate?
Race V:Не участвую.
Demilivor
Avatar пользователя

Опубликовано 30.07.2009 01:23 (16 лет назад)    #
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // Clear Screen And Depth Buffer
glMatrixMode( GL_MODELVIEW );
glLoadIdentity();
glTranslatef( 0, 0, -4.1f );

TransMouseCordsGL( GLMouseCoordX, GLMouseCoordY ); //КОСЯК, КОСЯК, КОСЯК :)
glBegin( GL_LINES );
glColor3f( 1, 0, 0 );
glVertex2f( GLMouseCoordX - 0.01f, GLMouseCoordY - 0.01f);
glVertex2f( GLMouseCoordX + 0.01f, GLMouseCoordY + 0.01f);
glVertex2f( GLMouseCoordX - 0.01f, GLMouseCoordY + 0.01f);
glVertex2f( GLMouseCoordX + 0.01f, GLMouseCoordY - 0.01f);
glEnd();
Race V:Не участвую.
Adler
Avatar пользователя

Опубликовано 30.07.2009 07:08 (16 лет назад)    #
из руд бука пример.
#include <glut.h>
#include <stdlib.h>
#include <stdio.h>

//Изменение размеров окна
void reshape(int w, int h)
{
glViewport(0,0,(GLsizei) w, (GLsizei) h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(45.0,(GLfloat) w/ (GLfloat) h,1.0,100.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}

//Отображение
void display(void)
{
glClear(GL_COLOR_BUFFER_BIT);
glFlush();
}

//Реакция на мышь
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;
}
}

int main(int argc, char **argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);
glutInitWindowSize(500,500);
glutInitWindowPosition(100,100);
glutCreateWindow("Reversing the Geometric Processing Pipeline");
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutMouseFunc(mouse);
glutMainLoop();
return 0;
}

надо
realy=viewport[3]-(GLint)y-1;
а у тебя
Yb = (float)viewport[3] - (float)MouseY;
и ещё ты Z координату выкинул...
gluUnProject( Xb, Yb, 0, modelview, projection, viewport, &GLX, &GLY, &modelview[0] );
Race V:Не участвую.
grouzdev
Администратор
Avatar пользователя

Опубликовано 30.07.2009 07:49 (16 лет назад)    #
Demilivor, если второе - функция отрисовки курсора, то всё правильно - он смещён на -4.1f
Race V:Не участвую.
Demilivor
Avatar пользователя

Опубликовано 30.07.2009 08:36 (16 лет назад)    #
Adler
z. координата мне не нужна.
realy=viewport[3]-(GLint)y-1; без нее тоже самое.

grouzdev
Да это функция отрисовки курсора
так вот, как избавиться от этой зависимости( от смещения ) я хочу чтобы функция работала независимо от любых преобразований, выдавала OpenGL позицию курсора. А моя функция после преобразований выдает с погрешностью. в данном случае -4.1f.
Race V:Не участвую.
grouzdev
Администратор
Avatar пользователя

Опубликовано 30.07.2009 08:53 (16 лет назад)    #
Demilivor, ты сначала выполняешь смещение (для рисования?), а потом находишь координаты мыши, должно быть наоборот. Т.е. нужно поменять glTranslatef и TransMouseCordsGL местами.

И ещё, когда что-то делаешь с матрицей, лучше бы её сохранять, а после рисования возвращать (см. glPushMatrix/glPopMatrix).
Race V:Не участвую.
Demilivor
Avatar пользователя

Опубликовано 30.07.2009 09:01 (16 лет назад)    #
да смещение для рисования иначе просто не будет видно( если поменять glTranslatef с TransMouseCordsGL )
Race V:Не участвую.
grouzdev
Администратор
Avatar пользователя

Опубликовано 30.07.2009 11:59 (16 лет назад)    #
Demilivor, какую-то ты странную матрицу вида выставляешь, если ничего не видно. Сделай как в примере :)
Race V:Не участвую.
Demilivor
Avatar пользователя

Опубликовано 30.07.2009 12:12 (16 лет назад)    #
gluPerspective()
мешало :(( все заработало!!
но все же!! если кто нить сможет написать функцию которой будет по барабану любые преобразования в том числе gluPerspective() буду очень рад )))
Race V:Не участвую.
Перейти на форум:
Конкурсы
Открытые конкурсы:
Race V

Старт: 5 июля 2025г.
Финиш: 16 июля 2025г.

Участники: 6
Недавние конкурсы:
 188 - RPG XIII
 187 - Bullet Heaven
 186 - Strategy
 185 - RPG XII
 184 - Arcade II
 Все конкурсы
Случайная игра
Голосование

Погнали?

Я в деле!
50% [5 Голосов]
Я сомневаюсь...
40% [4 Голосов]
Мде (
10% [1 Голос]

Голосов: 10
Начало: 04.07.2025 20:01

Для доступа к голосованию, у вас должно быть 10 сообщений на форуме.
 Архив опросов
Мини-чат
Вам необходимо залогиниться.

Архив чата

27,328,213 уникальных посетителей

Создано на базе русской версии PHP-Fusion copyright © 2003-2006 by Nick Jones.
Released as free software under the terms of the GNU/GPL license.