Возможный дубликат:
Перечень мышиных координат
Допустим, у меня есть окно 600х600.
Когда я получаю события мыши, я не знаю, каково реальное положение мыши, в OpenGL я использую это для рисования точек:
(-0.5,0.5) | (0.5,0.5)
|
--------(0,0)-------
|
|
(-0.5,-0.5) | (0.5,-0.5)
Но когда я получаю события мыши GLUT в зависимости от размера окна, я получаю разные координаты. Я хочу относительную (к окну) систему координат. Как мне это получить?
Я почти уверен, что перенасыщение дает вам координаты мыши в пространстве окна (то есть, если окно 800×600, а позиция мыши находится посередине, это даст вам x: 400, y: 300), поэтому, если вы хотите, чтобы это было пространство opengl, которое вы разместили выше, вы должны сделать следующее:
float x = (400 / 800) - 0.5f; //0.0
float y = (300 / 600) - 0.5f; //0.0
поэтому общая версия будет выглядеть примерно так:
float mouseX = (theGlutMouseXCoordinate / theGlutWindowWidth) - 0.5f;
float mouseY = (theGlutMouseYCoordinate / theGlutWindowHeight) - 0.5f;
Может быть, я неправильно читаю ваш вопрос или упрощаю ответ, но разве вы не ищете что-то вроде:
float x = mouse.x / screen.width; //x now in [0,1]
float y = mouse.y / screen.height; //y now in [0,1]
x-=0.5f;
y-=0.5f;
Или наоборот:
float wx = (x + 0.5f) * screen.width;
float wy = (Y + 0.5f) * screen.height;