这个问题已经在这里有一个答案:
我有点新的OpenGL和我希望创造一个2D游戏。我已经找到了如何创建与glBegin()
,glVertex2f()
和glEnd()
形状。然而,当我使用这个时,它使用该坐标的屏幕位置(当我使用非正方形显示,形状被拉伸)。
那么我想知道,我将如何创建形状相对于世界上的地位,所以它不会延伸到屏幕(可能有glm::vec2
)?
注意,通过glBegin
/glEnd
序列,其附图和固定功能矩阵堆栈已经从几十年弃用。见Fixed Function Pipeline和Legacy OpenGL。阅读关于Vertex Specification和Shader用于渲染的艺术方式的状态。
在OpenGL的归一化设备坐标范围[-1,1]被映射到视口。投影矩阵变换顶点从视图sapce到夹子坐标坐标。的这些夹子坐标由与夹子坐标的w成分除以也变换到归一化设备坐标(NDC)。
默认情况下,固定的功能矩阵堆栈上的投影矩阵是单位矩阵。这就导致了一个1:视空间1贴图坐标归一化设备坐标。如果视口是矩形的这个具有设定投影矩阵时需要考虑。
一个orthographic projection可以通过glOrtho
设置:
e.g:
double aspect = (double)width/(double)height;
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-aspect, aspect, -1.0, 1.0, -1.0, 1.0);