QT opengl 模仿CC~现在可以显示彩色点云啦

那么话不多说了啊,最近发现代码链接失效问题,那么没关系,全部源码已经分享到我置顶的文章上面了。

如果仍然发现失效问题(博主也是个白痴呢),请务必加我QQ 498771026

相信很多人用过CC,也就是CloudCompare。这款软件对于点云的读取和显示有点厉害。

我相信每一个学QT的孩纸都想有自己的点云软件。那么这一次我就来模仿CloudCompare,基本完成。

我不可能把所有代码都贴到博客里面来,但是我可以把这个大工程全部分享给大家。

http://download.csdn.net/download/qq_30547073/9997224

因为有的时候一件事情会花去很多精力,如果花费过多时间在写博客上,就没有时间学习更多东西了,毕竟我本身也是菜鸟。

但是我会吧思路给大家说清楚,贴一点核心代码,大家可以慢慢琢磨,也省了不少事情。

思路主要是这样的:

(1)首先你必须自己写一个点云读取类,可以使用文件映射高速读取ptx、pts、txt、asc、ply、pcd格式的点云。并可以判断任意字段长度,是否有RGB等。这一个文件我已经写好并放在工程目录下了。好像叫qscarlet_CloudIO什么的。

(2)进行opengl显示。这就必须去学opengl了,只是为了显示外包核和点云的话不是那么难。

(3)其余的杂七杂八的逻辑判断,比方说,QTreeView只有当单击的时候才显示外包核,用Checkbox判断是否显示点云等。这个必须多看看connect函数还有模型视图等。。。

(4)利用滚轮可以控制缩放,利用鼠标可以进行旋转。
目前opengl的相机模块研究不是很透彻,我会继续学习的。


//============读取并绘制点云
bool GL_SortPtID(const VertexPositionColor &P1, const VertexPositionColor &P2)//自定义排序
{
    return(P2.PtID > P1.PtID);//小到大
    //return(P1.PtID > P2.PtID);//大到小
}
void DrawStationPoint(std::vector Stations)
{
    for(int i=0;i=0.0&&r<=1.0&&g>=0.0&&g<=1.0&&b>=0.0&&b<=1.0)
            {
                glColor3f( r, g, b );
                glVertex3d(x,y,z);
            }
            else if(r>=0.0&&r<=255.0&&g>=0.0&&g<=255.0&&b>=0.0&&b<=255.0)
            {
                glColor3f( r/255.0, g/255.0, b/255.0 );
                glVertex3d(x,y,z);
            }
            else
            {
                glVertex3d(x,y,z);
            }
        }
    }

}
void DrawStationBox(std::vector Stations)
{
    for(int i=0;i=maxPoint.x)maxPoint.x = Tpoint.x;
            if(Tpoint.y>=maxPoint.y)maxPoint.y = Tpoint.y;
            if(Tpoint.z>=maxPoint.z)maxPoint.z = Tpoint.z;
            gravity.x+=Tpoint.x;
            gravity.y+=Tpoint.y;
            gravity.z+=Tpoint.z;
        }
    }
    gravity.x/=(double)PointNum;
    gravity.y/=(double)PointNum;
    gravity.z/=(double)PointNum;
    center.x =(minPoint.x+maxPoint.x)/2.0;
    center.y =(minPoint.y+maxPoint.y)/2.0;
    center.z =(minPoint.z+maxPoint.z)/2.0;
    cout<<"box min:"<=m_Stations.size())
        return;
    Station StationGet = m_Stations[Index];
    StationGet.ifshowCloud =ifshow;
    m_Stations[Index] = StationGet;//还得赋值回去
}
void qScarletOpenglInterface::SetSelectedCloud(int Index,bool ifshow)//是否绘制外包核
{

    qDebug()<<"Control "<=m_Stations.size())
        return;

    //关闭其它外包核的显示:
    for(int i=0;i



光棍节到了,那么关于本人代码的免费分享

最近CSDN有点走歪路了。
    我发现随着我上传的资源的下载量增加,tmd竟然收取的积分也越来越多了。
    代码的魅力就在于原创与开源。靠着别人上传的资源去赚取利益是不对的。
    所以为了秉承分享的精神,以后我会将代码分享到百度网盘中,随着时间更新,我会将每一个版本都上传上去,供大家免费下载。
    第一波链接在这里了:

https://pan.baidu.com/s/1qYLro0c

在传送门中尽情地下载吧!
    在传送门中尽情地下载吧!
    在传送门中尽情地下载吧!
    我希望大家在下载后将体验效果即使反馈给我,我究竟还有什么做的不好的地方,或者我应该朝着什么样的方向进行学习,都请毫无保留地告诉我吧!
    之前代码由于没有免费,给大家造成学习上的阻碍,还请原谅! 
    在传送门中尽情地下载吧!

你可能感兴趣的:(QT,C++,opengl)