视口坐标的计算

Calcluation of viewport coordinates

我阅读了一篇关于规范化设备坐标的文章(在德国 DGL wiki 上),并提供了以下示例: “让我们考虑一下我们有一个尺寸为 1024 像素(宽度)和 768 像素高度的视口。具有绝对坐标 P(350/210) 的点 P 将位于标准化坐标 P(-0,32/-0 ,59). 这些坐标现在可以投影到视口 (800x600) 上,只需将标准化的设备坐标(类似于矢量缩放)乘以视口的大小。在这种情况下,结果将是 P(273/164)。

不知何故,我无法理解如何得到所提供的结果(我的意思是 273/164 和 -0,32/-0,59 ...有人可以向我解释如何计算坐标吗?

P.S。 : 这是文章 - https://wiki.delphigl.com/index.php/Normalisierte_Ger%C3%A4tekoordinate

谢谢!

那篇文章确实缺少描述。我可以帮你分道扬镳;也许有更多数学知识的人可以帮助完成。

根据this answer,将非标准化坐标转换为标准化坐标的公式为:

Nx = (Cx / Sx) * 2.0 - 1.0

Ny = 1.0 - (Cy / Sy) * 2.0

(其中 Cx/y = 坐标 X/Y;Sx/y = 屏幕 X/Y;并且 Nx/y = 标准化 X/Y)。

将示例的数字插入:

Nx = (350/1024) * 2 - 1 = -0.31640625
Ny = 1 - (210/768) * 2 = 0.453125

...或 (-.36, 0.45).

反转这个以获得新坐标:

(1 + Nx) / 2 * Sx

(1 - Cy) / 2 * Sx

Cx = (1 + -0.31640625) / 2 * 800 = 273.4375
Cy = (1 - 0.453125) / 2 * 600 = 164.0625

请注意,Y 值不匹配。这可能是因为我的计算没有考虑纵横比,应该是因为这些屏幕的纵横比为 .75,而 NDC 的纵横比为 1。This SO answer 也可能有帮助。