VTK学习笔记(八)vtkVectorText和vtkFollower的用法

22 篇文章 19 订阅

这个例子演示了vtkVectorText和vtkFollower的用法。vtkVectorText用于创建3D标注。vtkFollower用于定位3D文本,并确保文本始终面向渲染器的活动摄像机(即文本始终是可读的),文字始终面向一个固定的视角,也就是三维空间内其他物体怎么变都可以,但是文字的朝向不变。

#include <vtkActor.h>
#include <vtkAxes.h>
#include <vtkCamera.h>
#include <vtkFollower.h>
#include <vtkInteractorStyleTrackballCamera.h>
#include <vtkNamedColors.h>
#include <vtkNew.h>
#include <vtkPolyDataMapper.h>
#include <vtkProperty.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkRenderer.h>
#include <vtkVectorText.h>

int main(int, char*[])
{
  vtkNew<vtkNamedColors> colors;

  // Create the axes and the associated mapper and actor.
  vtkNew<vtkAxes> axes;
  axes->SetOrigin(0, 0, 0);
  vtkNew<vtkPolyDataMapper> axesMapper;
  axesMapper->SetInputConnection(axes->GetOutputPort());
  vtkNew<vtkActor> axesActor;
  axesActor->SetMapper(axesMapper);

  // Create the 3D text and the associated mapper and follower (a type of
  // actor).  Position the text so it is displayed over the origin of the
  // axes.
  vtkNew<vtkVectorText> atext;
  atext->SetText(Origin);
  vtkNew<vtkPolyDataMapper> textMapper;
  textMapper->SetInputConnection(atext->GetOutputPort());
  vtkNew<vtkFollower> textActor;
  textActor->SetMapper(textMapper);
  textActor->SetScale(0.2, 0.2, 0.2);
  textActor->AddPosition(0, -0.1, 0);
  textActor->GetProperty()->SetColor(colors->GetColor3d(Peacock).GetData());

  // Create the Renderer, RenderWindow, and RenderWindowInteractor.
  vtkNew<vtkRenderer> renderer;
  vtkNew<vtkRenderWindow> renderWindow;
  renderWindow->AddRenderer(renderer);
  renderWindow->SetSize(640, 480);

  vtkNew<vtkRenderWindowInteractor> interactor;
  interactor->SetRenderWindow(renderWindow);

  vtkNew<vtkInteractorStyleTrackballCamera> style;
  interactor->SetInteractorStyle(style);

  // Add the actors to the renderer.
  renderer->AddActor(axesActor);
  renderer->AddActor(textActor);
  renderer->SetBackground(colors->GetColor3d(Silver).GetData());

  // Zoom in closer.
  renderer->ResetCamera();
  renderer->GetActiveCamera()->Zoom(1.6);

  // Reset the clipping range of the camera; set the camera of the
  // follower; render.
  renderer->ResetCameraClippingRange();
  textActor->SetCamera(renderer->GetActiveCamera());

  interactor->Initialize();
  renderWindow->SetWindowName(TextOrigin);
  renderWindow->Render();
  interactor->Start();

  return EXIT_SUCCESS;
}

如果不明白效果,可以将下面这句代码注释,然后再运行。

textActor->SetCamera(renderer->GetActiveCamera());

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值