Как преобразовать координаты GLUT в координаты окна

Возможный дубликат:
Перечень мышиных координат

Допустим, у меня есть окно 600х600.
Когда я получаю события мыши, я не знаю, каково реальное положение мыши, в OpenGL я использую это для рисования точек:

(-0.5,0.5) | (0.5,0.5)
|
--------(0,0)-------
|
|
(-0.5,-0.5) | (0.5,-0.5)

Но когда я получаю события мыши GLUT в зависимости от размера окна, я получаю разные координаты. Я хочу относительную (к окну) систему координат. Как мне это получить?

1

Решение

Я почти уверен, что перенасыщение дает вам координаты мыши в пространстве окна (то есть, если окно 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;
4

Другие решения

Может быть, я неправильно читаю ваш вопрос или упрощаю ответ, но разве вы не ищете что-то вроде:

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;
1

По вопросам рекламы [email protected]