Уважаемые форумчане извините за простой вопрос, как нужно правильно вызывать 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
Что я делаю неправильно?
adi
> Что я делаю неправильно?
Используешь этот способ выделения?
да
Попробывал немножко переделать функцию вычисляюшую с координатой 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); }
adi
Это был не вопрос, а ответ на вопрос.
jogl ray pick
что значат эти координаты (снизу)? Это ведь вовсе не координаты точки куда я ткнул. После ротации или передвижения по каким либо осям, ткнув в одну и туже точку получаю различные значения к примеру для оси Z. Сильно разные. Мне по идеи нужны только Z и X координаты выбранного объекта.
Amethyst
Что значит одну и ту же? На экране или на модели?
на модели
Amethyst
Если ты вращаешь модель, естественно, что координаты одной точки будут разные при разных поворотах.
то есть координатная система от которой мы считаем не вращается? Я тоже об этом подумал, поэтому взял и нарисовал координатную систему до ротации(насыщенный цвет) и после. Но как показала визуализация, координатная система тоже изменяется.
все, сильно извиняюсь. Нашел ошибку( Забыл прописать что mouse_y = height - y - 1
лучше бы написали статью, как на шейредах реализовать selection buffer. если честно, то задолбался уже писать пересечение с каждой линией, кривой, и окружностью всяких там вспомогательных элементов редактора (не сцены, в сцене нужна трассировка, например, для логики геймплея, да и для сцены это проще). Так же, когда есть векторный редактор в 2д с блекджеком и сплайнами, то вычисление пересечения с каждым микроотрезком сплайна (а ведь тысячи их) - задача весьма и весьма загружающая процессор. а selection buffer выглядит просто спасением - то, что видим, то и выделяем. может быть не столько быстрее, сколько проще. вряд ли кто-то из начинающих (или даже считающих себя продвинутыми) может написать адекватное выделение мышью всяких там манипуляторов перемещения, поворота и изменения размера. некоторые даже не поймут суть проблемы.
EvilSpirit
> лучше бы написали статью, как на шейредах реализовать selection buffer.
А что там писать? Нарисовал каждый объект своим цветом в текстуру, получил цвет пикселя по нужным координатам и готово. Правда непонятно, как нарисовать только один пиксель в текстуру 1x1, чтобы зря не рендерить то, что не используется и не создавать текстуру размером с экран.
Тема в архиве.