首页 > 代码库 > LODProp3D实例
LODProp3D实例
1 #ifndef INITIAL_OPENGL 2 #define INITIAL_OPENGL 3 #include <vtkAutoInit.h> 4 VTK_MODULE_INIT(vtkRenderingOpenGL) 5 VTK_MODULE_INIT(vtkInteractionStyle) 6 VTK_MODULE_INIT(vtkRenderingFreeType) 7 #endif 8 #include <iostream> 9 using namespace std; 10 #include <vtkSmartPointer.h> 11 #include <vtkPolyDataMapper.h> 12 #include <vtkLODProp3D.h> 13 #include <vtkRenderWindow.h> 14 #include <vtkRenderer.h> 15 #include <vtkRenderWindowInteractor.h> 16 #include <vtkPolyData.h> 17 #include <vtkSphereSource.h> 18 #include <vtkCallbackCommand.h> 19 #include <vtkProperty.h> 20 /*关于static_cast的介绍网址: 21 * http://www.cnblogs.com/chio/archive/2007/07/18/822389.html 22 static_cast: 23 用法:static_cast < type-id > ( expression ) 24 说明:该运算符把expression转换为type-id类型,但没有运行时类型检查来保证转换的安全性。 25 来源:为什么需要static_cast强制转换? 26 情况1:void指针->其他类型指针 27 情况2:改变通常的标准转换 28 情况3:避免出现可能多种转换的歧义 29 它主要有如下几种用法: 30 用于类层次结构中基类和子类之间指针或引用的转换。 31 进行上行转换(把子类的指针或引用转换成基类表示)是安全的; 32 进行下行转换(把基类指针或引用转换成子类指针或引用)时,由于没有动态类型检查,所以是不安全的。 33 用于基本数据类型之间的转换,如把int转换成char,把int转换成enum。这种转换的安全性也要开发人员来保证。 34 把void指针转换成目标类型的指针(不安全!!) 35 把任何类型的表达式转换成void类型。 36 注意:static_cast不能转换掉expression的const、volitale、或者__unaligned属性。 37 /////////////////////////////// 38 **关于vtkCommand::ModifiedEvent 39 ** 40 */ 41 42 void RefreshCallback(vtkObject* caller, 43 long unsigned int eventId, 44 void* clientData, 45 void* callData) 46 { 47 vtkSmartPointer<vtkLODProp3D>lodProp=static_cast<vtkLODProp3D*>(clientData); 48 cout<<"Last rendered LOD:"<<lodProp->GetLastRenderedLODID()<<endl; 49 } 50 51 int main() 52 { 53 //创建高分辨率的圆球 54 vtkSmartPointer<vtkSphereSource> highResSphere=vtkSmartPointer<vtkSphereSource>::New(); 55 int res=100; 56 highResSphere->SetThetaResolution(res); 57 highResSphere->SetPhiResolution(res); 58 highResSphere->Update(); 59 //高分辨率球的映射器 60 vtkSmartPointer<vtkPolyDataMapper> highResMapper=vtkSmartPointer<vtkPolyDataMapper>::New(); 61 highResMapper->SetInputConnection(highResSphere->GetOutputPort()); 62 //创建低分辨率的圆球 63 vtkSmartPointer<vtkSphereSource>lowResSphere=vtkSmartPointer<vtkSphereSource>::New(); 64 //低分辨率球的映射器 65 vtkSmartPointer<vtkPolyDataMapper> lowResMapper=vtkSmartPointer<vtkPolyDataMapper>::New(); 66 lowResMapper->SetInputConnection(lowResSphere->GetOutputPort()); 67 //分别创建高、低分辨率属性property 68 //低分辨率属性 69 vtkSmartPointer<vtkProperty> lowResProperty=vtkSmartPointer<vtkProperty>::New(); 70 lowResProperty->SetDiffuseColor(0.89,0.81,0.34); 71 lowResProperty->SetInterpolationToFlat(); 72 //高分辨率属性 73 vtkSmartPointer<vtkProperty> highResProperty=vtkSmartPointer<vtkProperty>::New(); 74 highResProperty->SetDiffuseColor(1,0.3882,0.2784); 75 highResProperty->SetInterpolationToFlat(); 76 //创建vtkLODProp3D 77 vtkSmartPointer<vtkLODProp3D> prop=vtkSmartPointer<vtkLODProp3D>::New(); 78 prop->AddLOD(highResMapper,highResProperty,0); 79 prop->AddLOD(lowResMapper,lowResProperty,0); 80 81 std::cout<<"There are "<<prop->GetNumberOfLODs()<<" LODs"<<std::endl; 82 83 //创建显示窗口 84 //renderer、window和interactor 85 vtkSmartPointer<vtkRenderer> renderer=vtkSmartPointer<vtkRenderer>::New(); 86 vtkSmartPointer<vtkRenderWindow> renderWindow=vtkSmartPointer<vtkRenderWindow>::New(); 87 vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor=vtkSmartPointer<vtkRenderWindowInteractor>::New(); 88 renderWindow->AddRenderer(renderer); 89 renderWindowInteractor->SetRenderWindow(renderWindow); 90 91 //用prop修改渲染时间 92 prop->SetAllocatedRenderTime(1e-1,renderer); 93 renderer->AddActor(prop); 94 //创建回调命令对象,并将自定义的函数设定为该对象的回调函数 95 vtkSmartPointer<vtkCallbackCommand> refreshCallback=vtkSmartPointer<vtkCallbackCommand>::New(); 96 refreshCallback->SetCallback(RefreshCallback); 97 refreshCallback->SetClientData(prop); 98 //添加ModifiedEvent事件侦听器 99 renderWindow->AddObserver(vtkCommand::ModifiedEvent,refreshCallback); 100 renderWindowInteractor->Start(); 101 return 0; 102 }
#ifndefINITIAL_OPENGL
#defineINITIAL_OPENGL
#include<vtkAutoInit.h>
VTK_MODULE_INIT(vtkRenderingOpenGL)
VTK_MODULE_INIT(vtkInteractionStyle)
VTK_MODULE_INIT(vtkRenderingFreeType)
#endif
#include<iostream>
usingnamespacestd;
#include<vtkSmartPointer.h>
#include<vtkPolyDataMapper.h>
#include<vtkLODProp3D.h>
#include<vtkRenderWindow.h>
#include<vtkRenderer.h>
#include<vtkRenderWindowInteractor.h>
#include<vtkPolyData.h>
#include<vtkSphereSource.h>
#include<vtkCallbackCommand.h>
#include<vtkProperty.h>
/*关于static_cast的介绍网址:
*http://www.cnblogs.com/chio/archive/2007/07/18/822389.html
static_cast:
用法:static_cast<type-id>(expression)
说明:该运算符把expression转换为type-id类型,但没有运行时类型检查来保证转换的安全性。
来源:为什么需要static_cast强制转换?
情况1:void指针->其他类型指针
情况2:改变通常的标准转换
情况3:避免出现可能多种转换的歧义
它主要有如下几种用法:
用于类层次结构中基类和子类之间指针或引用的转换。
进行上行转换(把子类的指针或引用转换成基类表示)是安全的;
进行下行转换(把基类指针或引用转换成子类指针或引用)时,由于没有动态类型检查,所以是不安全的。
用于基本数据类型之间的转换,如把int转换成char,把int转换成enum。这种转换的安全性也要开发人员来保证。
把void指针转换成目标类型的指针(不安全!!)
把任何类型的表达式转换成void类型。
注意:static_cast不能转换掉expression的const、volitale、或者__unaligned属性。
///////////////////////////////
**关于vtkCommand::ModifiedEvent
**
*/
voidRefreshCallback(vtkObject*caller,
longunsignedinteventId,
void*clientData,
void*callData)
{
vtkSmartPointer<vtkLODProp3D>lodProp=static_cast<vtkLODProp3D*>(clientData);
cout<<"LastrenderedLOD:"<<lodProp->GetLastRenderedLODID()<<endl;
}
intmain()
{
//创建高分辨率的圆球
vtkSmartPointer<vtkSphereSource>highResSphere=vtkSmartPointer<vtkSphereSource>::New();
intres=100;
highResSphere->SetThetaResolution(res);
highResSphere->SetPhiResolution(res);
highResSphere->Update();
//高分辨率球的映射器
vtkSmartPointer<vtkPolyDataMapper>highResMapper=vtkSmartPointer<vtkPolyDataMapper>::New();
highResMapper->SetInputConnection(highResSphere->GetOutputPort());
//创建低分辨率的圆球
vtkSmartPointer<vtkSphereSource>lowResSphere=vtkSmartPointer<vtkSphereSource>::New();
//低分辨率球的映射器
vtkSmartPointer<vtkPolyDataMapper>lowResMapper=vtkSmartPointer<vtkPolyDataMapper>::New();
lowResMapper->SetInputConnection(lowResSphere->GetOutputPort());
//分别创建高、低分辨率属性property
//低分辨率属性
vtkSmartPointer<vtkProperty>lowResProperty=vtkSmartPointer<vtkProperty>::New();
lowResProperty->SetDiffuseColor(0.89,0.81,0.34);
lowResProperty->SetInterpolationToFlat();
//高分辨率属性
vtkSmartPointer<vtkProperty>highResProperty=vtkSmartPointer<vtkProperty>::New();
highResProperty->SetDiffuseColor(1,0.3882,0.2784);
highResProperty->SetInterpolationToFlat();
//创建vtkLODProp3D
vtkSmartPointer<vtkLODProp3D>prop=vtkSmartPointer<vtkLODProp3D>::New();
prop->AddLOD(highResMapper,highResProperty,0);
prop->AddLOD(lowResMapper,lowResProperty,0);
std::cout<<"Thereare"<<prop->GetNumberOfLODs()<<"LODs"<<std::endl;
//创建显示窗口
//renderer、window和interactor
vtkSmartPointer<vtkRenderer>renderer=vtkSmartPointer<vtkRenderer>::New();
vtkSmartPointer<vtkRenderWindow>renderWindow=vtkSmartPointer<vtkRenderWindow>::New();
vtkSmartPointer<vtkRenderWindowInteractor>renderWindowInteractor=vtkSmartPointer<vtkRenderWindowInteractor>::New();
renderWindow->AddRenderer(renderer);
renderWindowInteractor->SetRenderWindow(renderWindow);
//用prop修改渲染时间
prop->SetAllocatedRenderTime(1e-1,renderer);
renderer->AddActor(prop);
//创建回调命令对象,并将自定义的函数设定为该对象的回调函数
vtkSmartPointer<vtkCallbackCommand>refreshCallback=vtkSmartPointer<vtkCallbackCommand>::New();
refreshCallback->SetCallback(RefreshCallback);
refreshCallback->SetClientData(prop);
//添加ModifiedEvent事件侦听器
renderWindow->AddObserver(vtkCommand::ModifiedEvent,refreshCallback);
renderWindowInteractor->Start();
return0;
}
LODProp3D实例
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。