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

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

Пароль



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

Забыли пароль?
Запросите новый здесь.
Темы форума
185 - RPG
9.02.2024
 Vaskrol
В каком банке открыт…
24.01.2024
 Darthman
185 - ?
30.12.2023
 Mefistofel
TESTAMENT - Тактичес…
15.11.2023
 KregHek
WoL
13.10.2023
 Darthman
RES - Движок для пик…
27.09.2023
 rimush
177 - One Button Str…
20.09.2023
 VoroneTZ
JS 13k contest
13.09.2023
 Mefistofel
184 - Arcade II
14.08.2023
 tiger1025
184 - ?
14.07.2023
 Kaps
Сейчас на сайте
Гостей: 1
На сайте нет зарегистрированных пользователей

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

Опубликовано 29.07.2009 10:41 (15 лет назад)    #
Как получить координаты мыши после 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
после выполнения Трансляции... координаты выдаються с погрешностью, плз дополните функцию так чтобы погрешности не было
grouzdev
Администратор
Avatar пользователя

Опубликовано 29.07.2009 13:07 (15 лет назад)    #
А где translate?
Demilivor
Avatar пользователя

Опубликовано 30.07.2009 01:23 (15 лет назад)    #
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();
Adler
Avatar пользователя

Опубликовано 30.07.2009 07:08 (15 лет назад)    #
из руд бука пример.
#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] );
grouzdev
Администратор
Avatar пользователя

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

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

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

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

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

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

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

Опубликовано 30.07.2009 12:12 (15 лет назад)    #
gluPerspective()
мешало :(( все заработало!!
но все же!! если кто нить сможет написать функцию которой будет по барабану любые преобразования в том числе gluPerspective() буду очень рад )))
Перейти на форум:
Конкурсы
Открытые конкурсы:
Активных нет
Недавние конкурсы:
 185 - RPG XII
 184 - Arcade II
 183 - Novel
 182 - RPG XI
 181 - Pixel Craft 128
 Все конкурсы
Случайная игра
Мини-чат
Вам необходимо залогиниться.

Архив чата

25,321,299 уникальных посетителей

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