2016-08-21 94 views
0

我阅读了一篇关于规范化设备坐标的文章(在德国DGL维基上),并提供了以下示例: “让我们考虑我们有一个尺寸为1024像素(宽)和768像素高的视口。具有绝对的,未标准化的坐标P(350/210)的点P将处于标准化坐标P(-0,32/-0,59)中。现在可以将这些坐标投影到视口(800×600)上, (273/164)视口坐标的计算

不知怎的,我不明白怎样才能得到所提供的结果(我的标准化设备坐标(类似于矢量缩放))与视口的大小。意思是273/164和-0,32/-0,59 ...有人可以向我解释如何计算坐标?

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

谢谢!

回答

1

那篇文章绝对缺乏说明。我可以让你成为那里的一部分;也许有更多数学的人可以帮助完成。

根据this answer,公式非归一化COORDS转换为归一化坐标为:

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也可能有帮助。

+0

感谢您的回答和计算!现在我懂了 ! :) – Teo

+0

很高兴我能帮忙! –