我是OpenGL的新手,正在寻求创建2D游戏。我发现了如何使用glBegin()
,glVertex2f()
和glEnd()
创建形状。但是,当我使用它时,它使用屏幕位置作为坐标(当我使用非正方形显示时,形状会被拉伸)。
所以我想知道的是,我将如何相对于世界位置创建形状,以使它不会延伸到屏幕上(可能是glm::vec2
)?
答案 0 :(得分:0)
请注意,数十年来不赞成使用glBegin
/glEnd
序列和固定函数矩阵堆栈进行绘制。请参见Fixed Function Pipeline和Legacy OpenGL。
了解有关Vertex Specification和Shader的最新渲染方式。
在OpenGL中,范围[-1,1]中的规范化设备坐标被映射到视口。投影矩阵将顶点坐标从视图空间转换为剪辑坐标。通过将剪辑坐标的w分量除以将这些剪辑坐标转换为归一化设备坐标(NDC)。
默认情况下,固定功能矩阵堆栈上的投影矩阵是单位矩阵。这导致视图空间坐标到规范化设备坐标的1:1映射。如果视口是矩形的,则在设置投影矩阵时必须考虑这一点。
orthographic projection可以由glOrtho
设置:
例如:
double aspect = (double)width/(double)height;
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-aspect, aspect, -1.0, 1.0, -1.0, 1.0);