Я пытаюсь перенести старую игру SDL, которую я написал некоторое время назад, в 3.3+ OpenGL, и у меня есть несколько вопросов, получающих правильную ортогональную матрицу, и это соответствующее представление.Ортогональная проекция для 2D-рендеринга с использованием современного OpenGL
glm::mat4 proj = glm::ortho(0.0f, static_cast<float>(win_W), static_cast<float>(win_H), 0.0f,-5.0f, 5.0f);
Если я просто использовать эту проекцию и попытаться оказать сказать четырехъядерный в границах win_W и win_H, это работает. Однако, если вместо этого я попытаюсь имитировать камеру, используя:
glm::mat4 view = glm::lookAt(
glm::vec3(0.0f, 0.0f, 1.0f),//cam pos
glm::vec3(0.0f, 0.0f, 0.0f),//looking at
glm::vec3(0.0f, 0.0f, 1.0f)//floored
);
Я ничего не получаю. Даже при размещении четверного в центре, то же самое, если вместо этого я центрировать вид:
glm::mat4 view = glm::lookAt(
glm::vec3(static_cast<float>(win_W), static_cast<float>(winH), 1.0f),//cam pos
glm::vec3(static_cast<float>(win_W), static_cast<float>(winH), 0.0f),//looking at
glm::vec3(0.0f, 0.0f, 1.0f)//floored
);
Учитывая, что SDL обычно вычитает значение камеры из вершин в игре, чтобы имитировать вид, это просто лучше заменить мой операция MVP в затенении, как это:
#version 150
in vec2 position;
in vec3 color;
out vec3 Color;
uniform mat4 model;
uniform mat4 view;
uniform mat4 projection;
uniform mat4 camera;
void main()
{
Color = color;
//faulty view
//gl_Position = projection *view * model * vec4(position, 0.0, 1.0);
//new SDL style camera
mat4 newPosition = projection * model * vec4(position, 0.0, 1.0);
gl_Position = newPosition - camera;
}
к сожалению, источник я учусь из (ArcSynthesis книги) не распространяется на вид, что включает в себя систему координат, кроме по умолчанию НДЦ. И почему-то даже сегодня большинство обсуждений о opengl о устаревших версиях. Итак, каков наилучший способ настройки вида на ортогональную матрицу проецирования для простой 2D-рендеринга в современном opengl?
Я бы не стал использовать 'lookAt' для 2D-рендеринга; матрица перевода и масштабирования намного проще и работает так же хорошо. –
Я играю с той же проблемой в течение последних нескольких дней. Есть ли реальная польза от перехода от OpenGL 2.1 к OpenGL 3.x для 2D-игр? – Zammalad