视口坐标的计算
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,将非标准化坐标转换为标准化坐标的公式为:


(其中 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).
反转这个以获得新坐标:


Cx = (1 + -0.31640625) / 2 * 800 = 273.4375
Cy = (1 - 0.453125) / 2 * 600 = 164.0625
请注意,Y 值不匹配。这可能是因为我的计算没有考虑纵横比,应该是因为这些屏幕的纵横比为 .75,而 NDC 的纵横比为 1。This SO answer 也可能有帮助。
我阅读了一篇关于规范化设备坐标的文章(在德国 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,将非标准化坐标转换为标准化坐标的公式为:
(其中 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).
反转这个以获得新坐标:
Cx = (1 + -0.31640625) / 2 * 800 = 273.4375
Cy = (1 - 0.453125) / 2 * 600 = 164.0625
请注意,Y 值不匹配。这可能是因为我的计算没有考虑纵横比,应该是因为这些屏幕的纵横比为 .75,而 NDC 的纵横比为 1。This SO answer 也可能有帮助。