vtk显示属性、窗口以及交互设置
来源:互联网 发布:建筑企业财务报表数据 编辑:程序博客网 时间:2024/04/29 23:00
在上篇简单的cone模型显示的基础上,本篇blog继续讲解与模型显示属性、窗口显示以及交互方式相关的例子。
1. 模型显示属性设置
通过给actor设置颜色来改变模型的颜色显示,通过property类,可以进一步设置模型显示的反射光、高光、环境光等属性的设置。
#include "vtkConeSource.h"#include "vtkPolyDataMapper.h"#include "vtkRenderWindow.h"#include "vtkCamera.h"#include "vtkActor.h"#include "vtkRenderer.h"#include "vtkProperty.h"int main(){ vtkConeSource *cone = vtkConeSource::New(); cone->SetHeight( 3.0 ); cone->SetRadius( 1.0 ); cone->SetResolution( 10 ); vtkPolyDataMapper *coneMapper = vtkPolyDataMapper::New(); coneMapper->SetInputConnection( cone->GetOutputPort() ); vtkActor *coneActor = vtkActor::New(); coneActor->SetMapper( coneMapper );
/* s设置模型显示的属性 */ coneActor->GetProperty()->SetColor(0.2, 0.63, 0.79); //设置模型显示的颜色 coneActor->GetProperty()->SetDiffuse(0.7); //设置散射系数
coneActor->GetProperty()->SetSpecular(0.4); //设置高光系数 coneActor->GetProperty()->SetSpecularPower(20); //设置高光的比例参数,具体参数设置可以参加vtk源码的介绍或者phong模型
//通过新建property对象,实现模型显示颜色的改变 vtkProperty *property = vtkProperty::New(); property->SetColor(1.0, 0.3882, 0.2784); property->SetDiffuse(0.7); property->SetSpecular(0.4); property->SetSpecularPower(20); //添加模型显示属性来显示模型 vtkActor *coneActor2 = vtkActor::New(); coneActor2->SetMapper(coneMapper); coneActor2->GetProperty()->SetColor(0.2, 0.63, 0.79); coneActor2->SetProperty(property); coneActor2->SetPosition(0, 2, 0); //设置模型显示的位置 vtkRenderer *ren1= vtkRenderer::New(); ren1->AddActor( coneActor ); ren1->AddActor( coneActor2 ); ren1->SetBackground( 0.1, 0.2, 0.4 ); vtkRenderWindow *renWin = vtkRenderWindow::New(); renWin->AddRenderer( ren1 ); renWin->SetSize( 300, 300 ); int i; for (i = 0; i < 360; ++i) { // render the image renWin->Render(); // rotate the active camera by one degree ren1->GetActiveCamera()->Azimuth( 1 ); } cone->Delete(); coneMapper->Delete(); coneActor->Delete(); property->Delete(); coneActor2->Delete(); ren1->Delete(); renWin->Delete(); return 0;}
2. 窗口显示
vtkrender可以控制场景在窗口中显示的位置,从而能够方便的实现多窗口显示。
#include "vtkConeSource.h"#include "vtkPolyDataMapper.h"#include "vtkRenderWindow.h"#include "vtkCamera.h"#include "vtkActor.h"#include "vtkRenderer.h"int main(){ vtkConeSource *cone = vtkConeSource::New(); cone->SetHeight( 3.0 ); cone->SetRadius( 1.0 ); cone->SetResolution( 10 ); vtkPolyDataMapper *coneMapper = vtkPolyDataMapper::New(); coneMapper->SetInputConnection( cone->GetOutputPort() ); vtkActor *coneActor = vtkActor::New(); coneActor->SetMapper( coneMapper ); vtkRenderer *ren1= vtkRenderer::New(); ren1->AddActor( coneActor ); ren1->SetBackground( 0.1, 0.2, 0.4 ); ren1->SetViewport(0.0, 0.0, 0.5, 1.0); //设置view显示的位置 vtkRenderer *ren2= vtkRenderer::New(); ren2->AddActor( coneActor ); ren2->SetBackground( 0.2, 0.3, 0.5 ); ren2->SetViewport(0.5, 0.0, 1.0, 1.0); //设置view显示的位置 vtkRenderWindow *renWin = vtkRenderWindow::New(); renWin->AddRenderer( ren1 ); renWin->AddRenderer( ren2 ); renWin->SetSize( 600, 300 );
ren1->ResetCamera(); ren1->GetActiveCamera()->Azimuth(90); int i; for (i = 0; i < 360; ++i) { // render the image renWin->Render(); // rotate the active camera by one degree ren1->GetActiveCamera()->Azimuth( 1 ); ren2->GetActiveCamera()->Azimuth( 1 ); } cone->Delete(); coneMapper->Delete(); coneActor->Delete(); ren1->Delete(); ren2->Delete(); renWin->Delete(); return 0;}
3. 交互设置
vtkRenderWindowInteractor能够支持用户的交互,vtkInteractorStyleTrackballCamera则为其中的一种交互方式。
#include "vtkConeSource.h"#include "vtkPolyDataMapper.h"#include "vtkRenderWindow.h"#include "vtkRenderWindowInteractor.h"#include "vtkCamera.h"#include "vtkActor.h"#include "vtkRenderer.h"#include "vtkInteractorStyleTrackballCamera.h"int main(){ vtkConeSource *cone = vtkConeSource::New(); cone->SetHeight( 3.0 ); cone->SetRadius( 1.0 ); cone->SetResolution( 10 ); vtkPolyDataMapper *coneMapper = vtkPolyDataMapper::New(); coneMapper->SetInputConnection( cone->GetOutputPort() ); vtkActor *coneActor = vtkActor::New(); coneActor->SetMapper( coneMapper ); vtkRenderer *ren1= vtkRenderer::New(); ren1->AddActor( coneActor ); ren1->SetBackground( 0.1, 0.2, 0.4 );
vtkRenderWindow *renWin = vtkRenderWindow::New(); renWin->AddRenderer( ren1 ); renWin->SetSize( 300, 300 ); //设置交互 vtkRenderWindowInteractor *iren = vtkRenderWindowInteractor::New(); iren->SetRenderWindow(renWin); //设置交互方式 vtkInteractorStyleTrackballCamera *style = vtkInteractorStyleTrackballCamera::New(); iren->SetInteractorStyle(style);
//初始化和开始交互 iren->Initialize(); iren->Start(); cone->Delete(); coneMapper->Delete(); coneActor->Delete(); ren1->Delete(); renWin->Delete(); iren->Delete(); style->Delete(); return 0;}
显示结果:鼠标交互(左键旋转,中键移动,右键缩放)
键盘交互(s面片显示,w网格显示........)
0 0
- vtk显示属性、窗口以及交互设置
- vtk 显示属性设置
- VTk显示样式设置
- vtk单窗口显示多个源数据代码
- 关于webview与H5属性设置以及交互的总结
- vtk交互
- VTK交互
- vtk交互
- javafx显示多个窗口以及javafx多窗口之间数据交互传输
- Qt窗口屏幕居中显示以及设置大小
- VTK: VTK实体交互widget
- 设置全屏显示以及横屏等属性
- 设置窗口居中显示
- VTK交互之交互样式
- VTK交互机制
- VTK鼠标交互方式
- vtk交互(2)
- vtk切换交互模式
- Linux/Unix shell 脚本监控磁盘可用空间
- js判断字符长度及中英文数字的例子
- 如何阅读源代码
- dede5.7无法更新栏目与 HTML文档
- linux下gdal的搭建
- vtk显示属性、窗口以及交互设置
- unity3d能应用到什么领域
- 一个简单的jQuery插件ajaxfileupload实现ajax上传文件例子
- SAP下载SE78的图片
- JDBC常见面试题集锦(一)
- asp.net 下面 updatepanel中使用alert弹出框方法(两种)
- 服务端获取客户端IP的方法
- 100-1为什么要等于0“心情”
- JDBC常见面试题集锦(二)