OpenGL 2D转换而不保持方面

时间:2013-02-19 11:47:37

标签: opengl

我需要在我的OpenGL应用程序中有一个2D图层。我首先使用这样的典型正交投影实现它:

 Mat4 ortho =Glm.ortho(0,viewWidth , 0 ,viewHeight);

2d工作得很好,除了在不同屏幕尺寸下运行时,2d形状相对于新的方面缩放。这不是我想要的(与通常人们需要的相反)。我需要根据新的屏幕尺寸拉伸或挤压2d形状。

我尽量不使用正交矩阵但只是一个身份。这个有效但在这种情况下我必须使用范围0 -1中的数字来操纵可见平截头体区域中的对象。我需要使用数字在常规(非标准化)范围内。所以它有点迫使我回到正投影,这是有问题的,因为已经说过。 所以问题是如何在没有透视图的情况下将2d对象转换为世界坐标系。

更新

最佳示例是Adobe AfterEffects中的2D图层。如果改变构图尺寸,则2d图层不会根据新尺寸进行缩放。这就是我所追求的。

1 个答案:

答案 0 :(得分:1)

知道如何回答这个问题很棘手,因为在某种程度上你的要求是相互排斥的。您不希望使用标准化坐标,而是希望使用屏幕坐标。但是根据定义,屏幕坐标是以像素为单位定义的,像素通常是方形的...所以我认为你需要一些形式的标准化坐标,尽管可能是统一缩放的。

也许你想要的是修正你的ortho中宽度和高度的比例。这将允许您以某种伪像素单位寻址屏幕,其中一个轴是“真实”像素,但另一个轴可以拉伸。因此,不是高度,而是传递宽度的3/4用于4:3显示,或9/16用于16:9等。如果显示是“正确”尺寸,则将以像素为单位,但是只有在没有的情况下才能在一个维度上伸展。

您可能需要切换哪个尺寸为“真实”像素,具体取决于比例小于或大于“最佳”比例,但要知道您在这里拍摄的内容真的很棘手。

相关问题