c++ - VTK 定位相机以用对象填充视口(viewport)

标签 c++ ios vtk

我有一个图像平面,可以从相机接收流视频。我试图将该图像放置在相机前面,使其充满屏幕。但是,我在计算相机与图像之间的距离时遇到了困难。

auto camera = this->renderer()->camera();
double *origin = imageData->GetOrigin();
int *extent = imageData->GetExtent();
double *spacing = imageData->GetSpacing();
double viewportHeight = this->renderer()->camera()->viewport()->height();

this->Internal->cameraImagePlaneRepresentation()->setImageData(imageData);

double imageCenterX = origin[0] + 0.5f * (extent[0] + extent[1]) * spacing[0];
double imageCenterY = origin[1] + 0.5f * (extent[2] + extent[3]) * spacing[1];
double imageWidth = (extent[1] - extent[0] + 1.f) * spacing[0];
double imageHeight = (extent[3] - extent[2] + 1.f) * spacing[1];

double viewAngleRadians = degreesToRadians(camera->viewAngle());
double hypotenuse = imageHeight / viewAngleRadians;
double distance = tan(viewAngleRadians * 0.5f) * hypotenuse;

camera->setFocalPoint(vesVector3f(imageCenterX, imageCenterY, 0.f));
camera->setPosition(vesVector3f(imageCenterX, imageCenterY, distance));

我认为这个距离是正确的,但它偏离了一个数量级。

最佳答案

如果您获得正确的距离计算公式,将会非常有帮助。

double viewAngleRadians = degreesToRadians(camera->viewAngle());
double distance = imageHeight / viewAngleRadians;

关于c++ - VTK 定位相机以用对象填充视口(viewport),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28147206/

相关文章:

c++ - 使用VTK和QT多线程时访​​问冲突异常

c++ - 如何在 C++ 中创建一个类的多个实例

c++ - 智能感知 : expression must have class type (prefix postfix error)

ios - 转换为不相关的类型总是失败

ios - TableView 中的动态节数和行数

c++ - 如何链接到 Windows 7 64 位 Visual Studio 2012 中的 VTK 库?

c++ - 什么是四规则(半规则)?

c++ - Book Not Compiling 中的示例(时间函数)

ios - 以编程方式将 subview 添加到 UIView - ios

python - 停止 VTK 定时器回调