2011-01-31 7 views
1

Я использую пакет OpenGL и также использовал пакет GLUT. Хотя у пакета GLUT есть обратный вызов колеса мыши, он, похоже, не работает (doc говорит только freeglut).Как реагировать на события колеса мыши в окне GLUT в Haskell?

Итак ... внутри созданного GLUT окна, как получить доступ к событиям колеса мыши?

+0

Хотя ответы, отводящие от GLUT, являются правильными и полезными, ответ на личный вопрос - использование keyboardMouseCallback. Событие mousewheel не работает, но клавиатураMouseCallback также обрабатывает события колес, поэтому работает в GLUT. – mentics

ответ

2

OpenGL не создает окна. По сути это всего лишь куча функций для draw вещей. Обработка событий полностью из сферы OpenGL. GLUT не является основной частью OpenGL. Это довольно старая библиотека с целью упрощения простого написания учебных руководств OpenGL. Больше ничего.

Вместо GLUT вы должны использовать намного более высокую GLFW, для которых также отличные привязок Haskell существуют: http://hackage.haskell.org/package/GLFW

+0

Упс! «Приложения GLFW могут открывать только одно окно». Мне нужно несколько. Похоже, мне нужно использовать ... WX? Не могу найти ничего в wx или wxcore о opengl ... – mentics

+0

@taotree: Возможно, WX или GTK. Вы хотите GLCanvas в WX; он, похоже, не существует в основном пакете, я думаю, из-за отсутствия спроса, но существует в wxcore. –

+0

Я не знаю достаточно WX, но для чего это означает, что он находится в wxcore, но не в wx. Означает ли это, что я все еще могу использовать его просто, или он должен быть реализован в wx для его поддержки в первую очередь? – mentics

1

Просто добавить еще один вариант ...

Когда я надоела GLUT, я переключился на Gtk2Hs , На вики демонстрируется пара простых образцов, демонстрирующих GtkGLext.

1

Я также рекомендую избегать GLUT. В любом случае, это довольно ограничено.

Другой вариант, если вы предпочитаете обрабатывать свой собственный основной цикл событий, а не использовать обратные вызовы, использует SDL. Да, он предназначен для игр, но он может дать вам контекст GL и достаточно хорошо работает для большинства интерактивных приложений OpenGL, которым не нужны стандартные виджеты пользовательского интерфейса. Он дает вам события клавиатуры/мыши, миллисекундные таймеры и некоторые очень простые окна управления.

KINDA POINTLESS POST-HOC EDIT: В сообщении мне сообщили, что GLFW также позволяет запускать собственный цикл событий. Посмотрев на это снова, я определенно соглашусь с тем, что GLFW - это путь для большинства вещей, которым не нужны стандартные виджеты пользовательского интерфейса.

+0

С GLFW поддерживается также обычная основная петля. – datenwolf

+0

@ datenwolf: О, правда? Hunh! По какой-то причине я думал, что он использовал обратные вызовы, но, очевидно, я никогда не использовал его сам, поэтому моя ошибка. Всегда приходилось использовать SDL или полный набор инструментов пользовательского интерфейса, например gtk/wx, по другим причинам. В любом случае, спасибо, что указали это! –

+0

Для полноты, похоже, GLFW может сделать это в любом случае: настраиваемый цикл или обратный вызов регистров. – mentics