0

我需要在我的 OpenGL 应用程序中有一个 2D 层。我首先使用典型的正射投影来实现它,如下所示:

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

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

我试图不使用正交矩阵,而只是使用一个恒等式。这个行得通,但在这种情况下,我必须使用 0 -1 范围内的数字来操作可见平截头体区域中的对象。我需要使用常规数字(未标准化)范围。所以这有点迫使我回到正射投影,这是有问题的,因为已经说过了。所以问题是我如何在没有透视保持在世界坐标系中的情况下变换 2d 对象。

更新:

最好的例子是 Adob​​e AfterEffects 中的 2D 图层。如果一个人改变了构图维度,二维层不会根据新维度进行缩放。这就是我所追求的。

4

1 回答 1

1

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

也许您想要的是在您的正交中固定宽度和高度的比率。这将允许您以某种伪像素单元对屏幕进行寻址,其中一个轴是“真实”像素,但另一个轴可以拉伸。因此,在 4:3 显示中传递宽度的 3/4,或者在 16:9 上传递 9/16 等,而不是高度,如果显示是“正确”尺寸,这将以像素为单位,但会仅在没有拉伸时才在一维中拉伸。

您可能需要根据比率小于或大于您的“最佳”比率来切换哪个维度是“真实”像素,但是要知道您在这里真正拍摄的是什么是很棘手的。

于 2013-02-19T12:01:47.823 回答