Как получить больше точности в движении мыши - PullRequest
0 голосов
/ 14 мая 2011

os :: windows xp sp3 Qt :: 4.6

Я играю с некоторыми трехмерными вещами и мне нужно реализовать движение мыши.Я попытался с Qt mouseMoveEvent, но обнаружил, что это не хорошо, потому что mouseMoveEvent не обрабатывает каждый пиксель при перемещении мыши.Мне нужно что-то, что регистрирует КАЖДЫЙ пиксель движения.В поисках решения я проверил электронную документацию Qt && нашел класс QCursor && его член pos ().

Вопросы :: Регистрирует ли QCursor :: pos () каждый пиксель в движении? У кого-нибудь есть идея для точной обработки вида камеры в 3d (я не использую openGL, собираю свой движок в маляре (это для забавы и хобби))?

Ответы [ 4 ]

2 голосов
/ 14 мая 2011

Скорее всего, это не имеет ничего общего с Qt, но с вашей скоростью опроса мыши. Возможно, вы захотите сослаться на этот весьма информативный пост в блоге на Coding Horror .

2 голосов
/ 14 мая 2011

Некоторое время назад у меня была похожая проблема (я не использовал QT).Ваша система не имеет такой точной информации.

То, что я сделал, было вычисление изменения положения мыши (dx, dy) и использование этой информации для перемещения камеры.Во многих средах вам не нужно вычислять (dx, dy), когда вы получаете эту информацию с событием (например, SDL).

В качестве альтернативы вы можете вычислить изменение положения и затем интерполировать положения между текущей и предыдущей мышьюposition - тогда вы можете использовать эти положения для перемещения вашей камеры.

У вас возникнет та же проблема, если вы захотите нарисовать движение мыши на экране.Затем вы можете использовать алгоритм Брезенхэма http://en.wikipedia.org/wiki/Bresenham's_line_algorithm для генерации пикселей между двумя заданными точками

2 голосов
/ 14 мая 2011

Нет, мышь может перемещаться на несколько пикселей одновременно.Если вам для чего-то нужны промежуточные точки, рассчитайте их.Рассчитайте все точки на линии между двумя позициями мыши.Мне до сих пор неясно, зачем вам нужны очки, но это должно помочь.

0 голосов
/ 14 мая 2011

Нет, QCursor не предоставляет эту информацию, поскольку у него нет сигнала, дающего вам это. Вы должны явно запросить его положение, и выполнение этого в mouseMoveEvent снова ограничивает точность. Базовая оконная система просто не обеспечивает такой точности. Как говорили другие, просто работайте с произвольными широкими движениями или сами рассчитывайте промежуточные точки.

...