将世界转换为标准化视口

Convert world to normalized viewport

有没有办法将世界点转换成标准化视口位置?我怎样才能做到这一点 ?我看到了如何将世界位置转换为视口,但不是 标准化视口 ...你能帮我吗? 谢谢。

解决方案:

-只需将 vtkRenderer 更改为您的渲染器,将 vtkViewport 更改为您的视口

void WorldToView(double &x, double &y, double &z)
{
    double coordinates[3];
    coordinates[0]=x;
    coordinates[1]=y;
    coordinates[2]=z;

    vtkRenderer->SetWorldPoint(coordinates);
    vtkRenderer->WorldToView();
    vtkRenderer->GetViewPoint(coordinates);

    x = coordinates[0];
    y = coordinates[1];

    vtkViewport->ViewportToNormalizedViewport(x,y);

}

我从未使用过 VTK,但在大多数情况下,数学术语 标准化 表示将某个比例的任意数量转换为标准比例。

假设一个值可以在 0 到 800 之间(可以是像素位置或要复制的文件或任何其他数量)。对此进行规范化的一种方法是使该区间适合区间 [0, 100]。这是常用的著名百分比系统,比如在显示文件复制对话框或谈论 50 岁以上员工的百分比等时。实际值和规范化值之间的映射将由某个比例因子确定。 800 应映射到 100%,因此 800 * s = 100s = 1/8 即乘以给定区间 [0, 800] 中的任何值会将其映射到范围 [0, 100].

另一个标准化系统可以制定为具有 [0, 1] 而不是 [0, 100] 的目标间隔。这在图形中很常见。当颜色通道的强度是一个浮点值时,通常它被限制在区间 [0, 1],0 最暗,1 最亮。另一个间隔为 [0, 255] 的常见系统使用一个字节来适应通道的强度。

根据VTK documentation,归一化像素的间隔为[0, 1]。因此,将实际像素值转换为标准化像素值的比例因子将取决于实际视口大小。对于大小为 800 × 600 的视口,缩放因子将为 Sx = 1/800,Sy = 1/600。

Is there a way to convert a world point into normalized viewport position ?

是的,从世界 space 转换为视口 space,然后对值进行规范化以获得规范化的视口位置。如果有帮助函数已经为你做了这个(从 gele 的回答看来已经有这样的函数),使用它们。