Использование правильной системы координат в вершинном шейдере GLSL

Кажется, у меня любопытная проблема. Я установил 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.

Я понимаю, что могу масштабировать эти значения внутри шейдера, но это кажется немного грязным. Наверняка я что-то не так делаю в настройке. Любая помощь горячо приветствуется.

5
задан whg 19 November 2011 в 13:53
поделиться