因为项目需求,想要对一个模型文件进行渲染,从而获取更多的模型图像数据。
这个因为本来自己理解也不多,工具也不太熟悉。正好在计算机图形学课程上看到vtk的工具库,因此,想利用vtk实现对于模型文件的灰度图像(彩色图像等数据需要贴纹理操作,因此也没继续搞)和模型的深度图像(图像中各个像素点处距离相机平面的距离)
因为本来对于vtk都不太熟悉,所以胡乱摸索了好几天。推荐vtk学习基本教程还是从官网例子上来看,一番摸索下来,感觉对于未知问题描述能力以及搜索能力,都是非常重要,而且本人需要提高的。
问题还存在一些,包括
- 没有实现纹理的渲染
- 深度图像背景距离应该为0或者为无穷,但是实际上是一个farClipping Dsitance。如何在vtk中去除也是一个问题。
- 渲染图象只有在renderWindow中交互之后才有物体。 目前还没有找到在不显示renderWindow,并且不进行交互作业之后,生成真实的渲染图象。理想上是要找一个 renderWindow->Update之类的东西,可是因为理解不够,还没有找到。
- 感觉这个渲染方法有些繁琐,可能还存在更好的渲染图象的软件或者工具包。如果有同学知道的话还请推荐一个
代码如下:
int main(int argc, char** argv){
// 设定相机的参数
float fx = 1423.81;
float fy = 1423.0;
int imgU = 1280;
int imgV = 960;
int magnification = 1;
// 读取模型文件
vtkSmartPointer<vtkPolyData> polyData =
ReadPolyData(argc > 1 ? argv[1] : "model.ply");
vtkSmartPointer<vtkPolyDataMapper> mapper =
vtkSmartPointer<vtkPolyDataMapper>::New();
mapper->SetInputData(polyData);
vtkSmartPointer<vtkActor> actor =
vtkSmartPointer<vtkActor>::New();
actor->SetMapper(mapper);
actor->Se