我正嘗試移植一些前段時間用於3.3+ OpenGL的舊SDL遊戲,並且我有幾個問題得到了正確的正交矩陣,並且它是相應的視圖。使用現代OpenGL進行2D渲染的正交投影
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書)學習源不包括涉及除默認NDC其他的座標系的視圖。由於某種原因,即使在今天,關於opengl的大多數討論都是關於不推薦使用的版本。 所以簡而言之,在現代opengl中,爲簡單的2D渲染設置正交投影矩陣的視圖的最佳方式是什麼?
我不打擾使用'lookAt'進行2D渲染;翻譯和比例矩陣要簡單得多,而且工作起來也一樣。 – 2014-09-23 12:42:22
過去幾天我一直在玩關於同樣的問題。從OpenGL 2.1到2D遊戲的OpenGL 3.x有沒有真正的好處? – Zammalad 2014-09-23 14:44:24