Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Кто шарит в OpenGL? координаты мыши не совпадают с координатами окна по оси Y !

Перистое облако Профи (741), закрыт 1 год назад
Суть такая, размер окна 480x480... значит проблема в оси Y "высота" там где сейчас находится курсор, мышь регистрирует как нижняя точка, то есть 0, хотя по координатам окна там 480, верхняя точка! На скрине видно, консоль что с низу показывает координаты мыши! а в массиве можно увидеть координаты куба, что там указано 480... проще говоря координаты мыши перевернуты верх ногами! Как повернуть координаты мыши? ну или хотя бы окна? по оси Y что бы они совпадали!
код:

static void cursorPositionCallback (GLFWwindow *window, double xPos, double yPos);
void cursorEnterCallback (GLFWwindow *window, int entered);
void mouseButtonCallback (GLFWwindow *window, int button, int action, int mods);
void scrollCallback (GLFWwindow *window, double xOffset, double yOffset);

float cube1 [] {
200, 480, 0,
300, 480, 0,
300, 200, 0,
200, 200, 0
};

void keyCallback (GLFWwindow *window, int key, int scancode, int action, int mods);

int SCREEN_WIDTH = 480;
int SCREEN_HEIGHT = 480;

void windowsResize(GLFWwindow *window,int W,int H)
{
SCREEN_WIDTH = W;
SCREEN_HEIGHT = H;
}

int main (void) {

GLFWwindow *window;

if (!glfwInit() ) {
return -1;
}
window = glfwCreateWindow ( SCREEN_WIDTH, SCREEN_HEIGHT , "Танчики", NULL, NULL);

glfwSetKeyCallback (window, keyCallback );

glfwSetCursorPosCallback (window,cursorPositionCallback);
glfwSetInputMode (window, GLFW_CURSOR, GLFW_CURSOR_NORMAL);
glfwSetCursorEnterCallback (window, cursorEnterCallback);
glfwSetMouseButtonCallback (window, mouseButtonCallback);
glfwSetScrollCallback (window, scrollCallback);

if ( !window ) {
glfwTerminate ();
return - 1;
}

glfwMakeContextCurrent ( window );

glMatrixMode (GL_PROJECTION);
glLoadIdentity ();
glOrtho (0, SCREEN_WIDTH, 0, SCREEN_HEIGHT, 0, 1);
glMatrixMode (GL_MODELVIEW);
glLoadIdentity ();

void glOrtho (GLdouble left, GLdouble right, GLdouble bottom, GLdouble top,
GLdouble near, GLdouble far);

while ( !glfwWindowShouldClose (window))
{
glClear (GL_COLOR_BUFFER_BIT);

glColor3f (1.0, 1.0, 1.0);
glEnableClientState ( GL_VERTEX_ARRAY );
glVertexPointer(3, GL_FLOAT, 0, cube1);
glDrawArrays (GL_POLYGON, 0, 4);
glDisableClientState (GL_VERTEX_ARRAY);
glEnd();

glfwSwapBuffers (window);
glfwPollEvents();
}
glfwTerminate ();

return 0;
}

static void cursorPositionCallback (GLFWwindow *window, double xPos, double yPos) {
cout<<yPos<<"\r\n";
}
Лучший ответ
Андрей Высший разум (466204) 5 лет назад
И что тебе мешает в cursorPositionCallback написать:
cout << SCREEN_HEIGHT - yPos << "\r\n";
Остальные ответы
Похожие вопросы