一个简单的利用VTK根据三维坐标点集生成点云的例子,仅供参考。
一、环境:vtk-8.1 & vs2013(需自行配置vtk的环境)
二、我所读取的三维坐标点集为txt格式文件,每个点的x,y,z坐标为单独一行。至于读取方法可以根据自己的点集数据结构重写读取方法,源码如下:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
VTK_MODULE_INIT(vtkRenderingOpenGL2); //vs和cmake的编译选项不一致,非cmake生成的工程需添加,否则运行报错
int main()
{
std::string fliename = "../bin/config/pointcloud.txt";
std::ifstream ifs(fliename.c_str());
std::string singleLine;
double x, y, z,low_z = DBL_MAX,high_z = DBL_MIN;
vtkSmartPointer points = vtkSmartPointer::New();
//分行读取文件
while (std::getline(ifs,singleLine))
{
std::stringstream linestream;
linestream << singleLine;
linestream >> x >> y >> z;
if (z < low_z)
low_z = z;
else if (z > high_z)
high_z = z;
points->InsertNextPoint(x, y, z);
}
ifs.close();
vtkSmartPointer polydata = vtkSmartPointer::New();
polydata->SetPoints(points);
vtkSmartPointer glyphFilter = vtkSmartPointer::New();
glyphFilter->SetInputData(polydata);
glyphFilter->Update();
vtkElevationFilter *elevationFilter = vtkElevationFilter::New();
elevationFilter->SetInputConnection(glyphFilter->GetOutputPort());
elevationFilter->SetLowPoint(0, 0, low_z);
elevationFilter->SetHighPoint(0, 0, high_z);
vtkPolyDataMapper *dataMapper = vtkPolyDataMapper::New();
dataMapper->SetInputConnection(elevationFilter->GetOutputPort());
vtkActor *actor = vtkActor::New();
actor->SetMapper(dataMapper);
vtkRenderer *renderer = vtkRenderer::New();
renderer->AddActor(actor);
renderer->SetBackground(.0, .0, .0);//设置背景色
vtkRenderWindow *renderwind = vtkRenderWindow::New();
renderwind->AddRenderer(renderer);
vtkInteractorStyleTrackballCamera *style = vtkInteractorStyleTrackballCamera::New();
vtkRenderWindowInteractor *renderwindIt = vtkRenderWindowInteractor::New();
renderwindIt->SetRenderWindow(renderwind);
renderwindIt->SetInteractorStyle(style);
renderwind->Render();
renderwindIt->Start();
return 0;
}
下面附一张读取的部分点云图:
“为什么DirectX里表示三维坐标要建一个4*4的矩阵?”
0x00 前言 首先要说明的是,本文的标题事实上来自于知乎上的一个同名问题:为什么directX里表示三维坐标要建一个4*4的矩阵? - 编程 .因此,正如Milo Yip大神所说的这个标题事实上是存 ...
ACM1174_爆头解题思路_空间三维坐标求点到直线的距离
/* 爆头 Description gameboy是一个CS高手,他最喜欢的就是扮演警察, 手持M4爆土匪的头.也许这里有人没玩过CS,有必 要介绍一下“爆头”这个术语:所谓爆头,就是子 弹直接命中对 ...
OpenGL 获取当前屏幕坐标的三维坐标(gluUnProject使用例子 Qt)
之前使用VS+glut实现了gluUnProject使用例子,用于渲染管道的逆过程,将屏幕坐标转换为opengl三维坐标,本文将尝试使用QT来实现. 代码如下: main.cpp 12345678 ...
MATLAB在三维坐标中显示图片 并 使得图片部分透明
要画一个光路图,本来可以用proe,但是鼠标不好用,有些操作也忘了,用MATLAB画了个.下面是用到的图片. 但是三维坐标中显示彩色图片的目标没有搞定,做了个灰度图,然后用仿射程序将彩色图片贴到了二维 ...
OpenGL 获取当前屏幕坐标对应的三维坐标
转自原文 OpenGL 获取当前屏幕坐标对应的三维坐标,使用很简单glu库中的一个函数 #include #include #in ...
opencv估计两图的三维坐标变换矩阵
cv::estimateAffine3D(MatFrom, MatTo, Transfrom, inlier); Transform得到的是重MatFrom到MatTo的变换矩阵.inlier给一个空 ...
MATLAB:读取txt文件中物体的三维坐标,显示三维模型
在MATLAB中建立一个脚本show3Dtxt.m文件,编写代码: clear; %%read 3D data fileID= fopen('E:\博士\深度学习与三维重建\代码实现\voxel_gr ...
OpenGL 获取当前屏幕坐标的三维坐标(gluUnProject使用例子 VS+glut)
本例子参考于网络,并进行了一些修改,使用glut+vs2008来实现. 在鼠标点击处重新画一个旋转的红色立方体! 参考代码如下: C++ Code 123456789101112131415161 ...
MATLAB:读取mat文件中物体的三维坐标,显示三维模型
在MATLAB中建立一个脚本show3Dmat.m文件,编写代码: clc; clear; %%read 3D data load('E:\博士\深度学习与三维重建\代码实现\3DRecGAN\X_Y ...
随机推荐
Android HttpClient post MultipartEntity - Android 上传文件
转自[http://blog.csdn.net/hellohaifei/article/details/9707089] 在Android 中使用HttpClient,MultipartEntity ...
IE6下 input 背景图滚动问题及标签规范
ie6 背景图滚动问题:
ie6下input背景图滚动问题