2013-04-19 9 views
0

Я ищу несколько примеров (не устаревший код) OpenGL, которые на самом деле показывают код/​​преобразование, шаг за шагом, между координатами от начала до конца, в 2D-режиме, использующем нестандартные координаты. т.е.OpenGL конвертировать/переводить/нормализовать координаты?

GLfloat Square[] = 
{ 
    -5.5f, -5.0f, 0.0f, 1.0f, 
    -5.5f, 5.0f, 0.0f, 1.0f, 
    5.5f, 5.0f, 0.0f, 1.0f, 
    5.5f, -5.0f, 0.0f, 1.0f 
}; 

И затем, используя координаты, такие, как указано выше, принимая эти & конвертировать их в необходимые координаты, чтобы они отображаются на -1,1 и т.д. & вывода на экран.

Каждый отдельный пример, учебник, который я нашел в сети и т. Д., Делает это только с использованием координат в вышеуказанном диапазоне от -1 <> 1.

Окружающая среда: C++.

+0

Будьте любезны, если те, что вниз, фактически объяснили, почему. Я сам/другие могут так учиться. – ReturnVoid

ответ

1

Ну, если вы используете glm (http://glm.g-truc.net/index.html), вы можете просто использовать glm :: ortho, чтобы создать матрицу вида так же, как и glOrtho в старом стиле OpenGL.

EG:

glm::mat4 viewMatrix = glm::ortho(-5.0f, 5.0f, -5.0f, 5.0f, 0.0f, 1.0f); 

Если затем подключить, что в ваш шейдер вы должны получить отображение от -5 до +5 вместо -1 до +1, или независимо от масштаба это то, что вы хотите.

1

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

в этом случае в вершинном шейдере будет линия похожа на это:

gl_Position = attribVertexPos; // no transformation 

Для 2D, если вы хотите, чтобы обеспечить COORDS из другого диапазона, все, что вам нужно сделать, это просто шкала позиций:

  • для диапазона от -10 до 10 использования вершинного шейдера с кодом gl_Position = attribVertexPos * 0.1
  • или вы можете искать матрицу масштабирования и использовать его, а также
+0

Действительно ли это изменяет сам вектор или просто представляет его со смещением? – ReturnVoid

+0

это код из вершинного шейдера: вам нужно применить некоторое масштабирование, чтобы иметь возможность пропускать вершины в более широком пространстве с -1 до 1. Но, возможно, используйте этот glm :: ortho, из ответа выше – fen

+0

Благодарим за ответ. Есть ли способ сделать это с помощью современного Opengl без использования шейдеров? – ReturnVoid

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