我有一个OpenGL 2D图形显示器。显示器使用标准化设备坐标(即水平方向为-1到+1,垂直方向为-1到+1,原点在视图中心)。我可以使用鼠标对视图中显示的对象进行平移和放大/缩小。
现在几乎所有的计算机显示器都具有非正方形的宽高比(例如16:9的宽高比)。因此,-1到+1的间距在垂直方向上比在水平方向上占据更小的物理距离。当从水平对准旋转到指向垂直方向时,线或等间隔点的线将在物理上看起来较短。
如何旋转视图并动态修正视图的非方形纵横比?以便线从水平对齐旋转为垂直对齐时在显示中保持相同的长度,从而导致线的一部分看起来被图幅“剪裁”。
1条答案
按热度按时间vwkv1x7d1#
假设视口大小为
(w,h)
,设置一个投影矩阵,将像素坐标转换为NDC:(This可以将左下角赋值为(0,0),右上角赋值为(w,h),如果愿意,也可以使用
glm::ortho
。)将其传递给顶点着色器,并在模型视图矩阵之后应用它:
现在你可以用像素来指定你所有的位置。当你在MV中应用旋转时,它会在平移到NDC之前旋转像素位置,从而保持你的2D模型的纵横比。