Войти
ПрограммированиеФорумГрафика

Способ выделения объектов мышью в OpenGL приложениях. (Комментарии к статье) (2 стр)

Страницы: 1 2
#15
17:13, 11 мая 2011

Уважаемые форумчане извините за простой вопрос,  как нужно правильно вызывать calc_select_line();в консольном приложении. Определяю кординаты мыши с помошью GetCursorPos(&CursorPos); , рассатриваю CursorPos.x , CursorPos.y координаты правильные , вызываю функцию в обработчике нажатия мышы.

POINT CursorPos;
CVector3 a1,a2;
GetCursorPos(&CursorPos);
std::cout<<CursorPos.x<<" "<<CursorPos.y<<std::endl;
calc_select_line(CursorPos.x,CursorPos.y,a1,a2);
std::cout<<a1.x<<" "<<a1.y<<" "<<a1.z<<std::endl;
std::cout<<a2.x<<" "<<a2.y<<" "<<a2.z<<std::endl;
Выводит -1.#INF -1.#INF -1.#INF
Что я делаю неправильно?


#16
17:23, 11 мая 2011

adi
> Что я делаю неправильно?
Используешь этот способ выделения?

#17
17:26, 11 мая 2011

да

#18
17:45, 11 мая 2011

Попробывал немножко переделать функцию вычисляюшую с координатой Z,  тот же самый результат.

void calc_mck(int mouse_x, int mouse_y, CVector& p1){
  GLint    viewport[4];   
  GLdouble projection[16];
  GLdouble modelview[16]; 
  GLdouble vx,vy,vz;    
  GLdouble wx,wy,wz;  
  glGetIntegerv(GL_VIEWPORT,viewport);       
  glGetDoublev(GL_PROJECTION_MATRIX,projection); 
  glGetDoublev(GL_MODELVIEW_MATRIX,modelview);   
  vx = mouse_x;
  vy = WinHeight - mouse_y - 1;
    glReadPixels(vx, int(vy), 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &vz );
    gluUnProject(vx, vy, vz, modelview, projection, viewport, &wx, &wy, &wz);
  p1 = CVector(wx,wy,wz);
}

#19
18:49, 11 мая 2011

adi
Это был не вопрос, а ответ на вопрос.

Прошло более 2 лет
#20
2:14, 23 дек. 2013

jogl ray pick
jogl ray pick | Способ выделения объектов мышью в OpenGL приложениях. (Комментарии к статье)
что значат эти координаты (снизу)? Это ведь вовсе не координаты точки куда я ткнул. После ротации или передвижения по каким либо осям, ткнув в одну и туже точку получаю различные значения к примеру для оси Z. Сильно разные. Мне по идеи нужны только Z и X координаты выбранного объекта.

#21
8:16, 23 дек. 2013

Amethyst
Что значит одну и ту же? На экране или на модели?

#22
13:02, 23 дек. 2013

на модели

#23
13:05, 23 дек. 2013

Amethyst
Если ты вращаешь модель, естественно, что координаты одной точки будут разные при разных поворотах.

#24
13:24, 23 дек. 2013

то есть координатная система от которой мы считаем не вращается? Я тоже об этом подумал, поэтому взял и нарисовал координатную систему до ротации(насыщенный цвет) и после. Но как показала визуализация, координатная система тоже изменяется.
Jogl w cs | Способ выделения объектов мышью в OpenGL приложениях. (Комментарии к статье)

#25
14:02, 23 дек. 2013

все, сильно извиняюсь. Нашел ошибку( Забыл прописать что mouse_y = height - y - 1

#26
6:46, 24 дек. 2013

лучше бы написали статью, как на шейредах реализовать selection buffer. если честно, то задолбался уже писать пересечение с каждой линией, кривой, и окружностью всяких там вспомогательных элементов редактора (не сцены, в сцене нужна трассировка, например, для логики геймплея, да и для сцены это проще). Так же, когда есть векторный редактор в 2д с блекджеком и сплайнами, то вычисление пересечения с каждым микроотрезком сплайна (а ведь тысячи их) - задача весьма и весьма загружающая процессор. а selection buffer выглядит просто спасением - то, что видим, то и выделяем. может быть не столько быстрее, сколько проще. вряд ли кто-то из начинающих (или даже считающих себя продвинутыми) может написать адекватное выделение мышью всяких там манипуляторов перемещения, поворота и изменения размера.  некоторые даже не поймут суть проблемы.

#27
14:41, 24 дек. 2013

EvilSpirit
> лучше бы написали статью, как на шейредах реализовать selection buffer.
А что там писать? Нарисовал каждый объект своим цветом в текстуру, получил цвет пикселя по нужным координатам и готово. Правда непонятно, как нарисовать только один пиксель в текстуру 1x1, чтобы зря не рендерить то, что не используется и не создавать текстуру размером с экран.

Страницы: 1 2
ПрограммированиеФорумГрафика

Тема в архиве.