有没有办法将世界点转换为规范化视口位置?我怎样才能做到这一点 ?我看到了如何将世界位置转换为视口,但不是规范化视口 ...你能帮帮我吗? 谢谢。
答案 0 :(得分:1)
解决方案:
- 只需使用渲染器更改vtkRenderer,使用yourviewport更改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);
}
答案 1 :(得分:1)
我从未使用VTK,但在大多数情况下,数学术语规范化意味着将某个规模的任意数量转换为标准规模。
假设值的范围为0到800(可能是像素位置或要复制的文件或任何其他数量)。对此进行标准化的一种方法是使该间隔适合于区间[0,100]。这是通常使用的着名百分比系统,例如在显示文件复制对话框时或在谈论年龄超过50岁的员工百分比等时。实际值与标准化值之间的映射将由某个缩放因子确定。 800应该映射到100%800 * s = 100
⇒s = 1/8
,即乘以给定区间[0,800]中的任何值都会将其映射到范围[0,100]。
可以将另一个标准化系统公式化为具有[0,1]而不是[0,100]的目标间隔。这在图形中很常见。当颜色通道的强度是浮点值时,通常它被钳位到区间[0,1],0是最暗的,1是最亮的。另一个间隔为[0,255]的常见系统使用一个字节来拟合通道的强度。
根据VTK documentation,归一化像素的间隔为[0,1]。因此,将实际像素值转换为标准化像素值的比例因子将取决于实际视口大小。对于大小为800 × 600
的视口,缩放系数将为S x = 1/800,S y = 1/600。
有没有办法将世界点转换为标准化视口位置?
是,从世界空间转换为视口空间,然后将值标准化以获得标准化视口位置。如果已经有了帮助函数(来自 gele 的答案,似乎已经有这样的函数),请使用它们。