关键词:为rgba的ply文件
txt点云文件含有颜色信息
思路:先将ply文件转换为txt点云文件。OpenGL读取显示txt点云,并实现旋转移动、键盘控制、光照等简单操作。
1.将ply文件转换为txt点云文件
一般的ply文件是可以用OpenGL直接读取的,但是ply点云文件尝试之后却不太顺利。
于是转而查如何读取ply点云文件,查到的结果是安装pcl。除了不小心装错位数外,用它来读取和显示ply文件倒是蛮方便的。但是在后面想实现光照模型的时候没有在pcl里找到合适的函数,总想着用OpenGL调节模型更方便。
于是最后将ply文件转换为txt文件。其中保存了ply文件里的xyz坐标和rgba坐标。
如何看ply文件里有什么信息呢?打开方式选写字板看一下它的header就好啦
以下为这个环节的代码:
运行前提是先去安装pcl的教程,推荐一份 http://gyshgx868.github.io/2018/03/06/PointCloud/pcl-install/
#include "stdafx.h"
#include <iostream>
#include <pcl/io/pcd_io.h>
#include <pcl/io/ply_io.h>
#include <pcl/console/print.h>
#include <pcl/console/parse.h>
#include <pcl/console/time.h>
#include <pcl/io/vtk_lib_io.h>
#include <pcl/io/vtk_io.h>
#include <vtkPolyData.h>
#include <vtkSmartPointer.h>
#include <pcl/visualization/cloud_viewer.h>
using namespace pcl;
using namespace pcl::io;
using namespace pcl::console;
using namespace std;
int main()
{
pcl::PointCloud<pcl::PointXYZRGBA>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZRGBA>());
if (pcl::io::loadPLYFile("F:\\3D human model.ply", *cloud) == -1) //* load the file
{
PCL_ERROR("Couldn't read the file \n");
system("PAUSE");
return (-1);
}
ofstream zos("F:\\shixiala.txt"); //包含rgba信息的txt点云
for (size_t i = 0; i < cloud->points.size(); i++)
zos << cloud->points[i].x << " " << cloud->points[i].y
<< " " << cloud->points[i].z << " " << int(cloud->points[i].r) << " " << int(cloud->points[