Кажется, у меня любопытная проблема. Я установил OpenGL следующим образом:
glViewport(0, 0, width, height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0, width, height, 0, -width, width);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
Очевидно, ширина и высота - это размер моего окна, который составляет 600 на 400. Внутри OpenGL все в порядке, я могу перемещаться по правильной системе координат. т.е. перевод на 200 перемещает все, что рисуется на 200 пикселей.
Теперь, внутри моего вершинного шейдера я не могу использовать ту же систему координат, я делаю как обычно:
vec4 pos = gl_ModelViewProjectionMatrix * gl_Vertex;
gl_Position = pos;
внутри main (), и вроде все в порядке. Однако когда я пытаюсь сделать что-то вроде этого:
vec4 pos = gl_ModelViewProjectionMatrix * gl_Vertex;
pos.x+= 1.0;
pos.y-= 1.0;
gl_Position = pos;
Позиции вершин переводятся не на 1 пиксель в каждом направлении, а на 300 по оси x и 200 по оси y.
Я понимаю, что могу масштабировать эти значения внутри шейдера, но это кажется немного грязным. Наверняка я что-то не так делаю в настройке. Любая помощь горячо приветствуется.