2016-10-17 2 views
0

Я пытаюсь сделать серию 2D-фигур (Rectangle, Circle) и т. Д. В современном opengl, надеюсь, без использования каких-либо матриц преобразования. Я хотел бы для меня, чтобы быть в состоянии определить координаты скажут прямоугольник 2 треугольников, как так:2D-координаты формы с современным Opengl

float V[] = { 20.0, 20.0, 0.0, 
       40.0, 20.0, 0.0, 
       40.0, 40.0, 0.0, 
       40.0, 40.0, 0.0, 
       20.0, 40.0, 0.0, 
       20.0, 20.0, 0.0 } 

Вы можете видеть, что координаты вершин задаются в окне просмотра? пространство (я считаю, что это называется). Теперь, когда это получается с помощью opengl, оно не работает, потому что пространство для клипа идет от -1.0 до 1.0 с началом в центре.

Что было бы правильным способом справиться с этим? Первоначально я думал, что настройка glClipControl в верхнем левом углу и от 0 до 1 будет работать, но это не так. При установке клипа в верхнем левом углу и от 0 до 1 начало координат находилось в центре, но это позволило увеличить ось Y по мере ее перемещения вниз (что является началом).

В идеале, я хотел бы получить opengl, чтобы 0.0.0.0 был левым верхним и 1.0, 1.0, чтобы быть нижним правым, тогда я просто нормализую каждую позицию вершин, но я понятия не имею, как получить opengl для используйте этот тип системы координат.

+0

Я думаю, что вы хотите ортогональную перспективу. – CoffeeandCode

+0

Значит, нет возможности победить OpenGL в том, чтобы делать что-то по-моему? – user1435899

+0

Ну, почему вы хотите избежать матриц? – CoffeeandCode

ответ

0

Легко можно сделать эти преобразования без матриц в вершинном шейдере:

// From pixels to 0-1 
vPos.xy /= vResolution.xy; 

// Flip Y so that 0 is top 
vPos.y = (1.-vPos.y); 

// Map to NDC -1,+1 
vPos.xy = vPos.xy*2.-1.; 
+0

Это сделало это, спасибо! – user1435899

Смежные вопросы