yuanyulei 发表于 2008-9-2 19:20:53

点云显示的问题(17楼已放出新的源代码)

请教一下高手:
我使用osg显示大量的三维点云数据,发现在显示时,除了原有的点坐标数据外,总是出现3条类似坐标轴那样的很长的条形直线,是由相互平行的短线构成的。会是什么问题呢?
源代码在下面。
请帮忙看一下,先谢过了!

[ 本帖最后由 yuanyulei 于 2008-9-16 19:24 编辑 ]

array 发表于 2008-9-2 20:20:09

我得到的结果如下图所示,似乎这个坐标系整个都是由您的点云组成的,拉进摄像机就可以看到它们都是点阵的集合。不知您所述的问题发生在哪里?

yuanyulei 发表于 2008-9-4 10:30:32

不应该是点云坐标的问题啊
我在Polyworks里面打开就没有这些多余点的
而且文件总共才300多K,没有这么多数据的

yuanyulei 发表于 2008-9-4 10:32:16

将上图放大很多倍后
就会发现里面真实的点云图
在上图中只是一个很小的点
刚开始我以为没有显示出来
后来才发现图中有数据的,只是增加了很多多余的数据
不知道怎么显示出来的

yuanyulei 发表于 2008-9-4 10:33:29

请版主帮忙分析一下
感激涕零

array 发表于 2008-9-4 11:39:11

原帖由 yuanyulei 于 2008-9-4 10:33 发表 http://bbs.osgchina.org/images/common/back.gif
请版主帮忙分析一下
感激涕零

这个问题不是出在OSG,而是您的fscanf。
这样写取出的数据量才正确:
fscanf(pfData, "%f", &(pointdata.x));
fscanf(pfData, "%f", &(pointdata.y));
fscanf(pfData, "%f", &(pointdata.z));
//fscanf(pfData, "%c", &(pointdata.i));
fscanf(pfData, "%d", &(pointdata.i));

您原来的写法取不到最后一个数据i,导致后面读取数据的顺序全乱了。
建议使用C++时,尽量不要混用C的那些函数,比如printf,scanf什么的。虽说运行没什么影响,但从规范性上来说很不舒服,而且难免以后在兼容性上会出问题。

yuanyulei 发表于 2008-9-5 10:36:58


谢谢版主
我回去试一下

Sailent 发表于 2008-9-5 12:04:25

不知道楼主有没有用记事本打开data.xyzi看过,里面的数据类似这样:
1.015000 0.643000 18.136000 170
1.016000 0.645000 18.118000 168
1.011000 0.647000 18.122999 174
1.014000 0.647000 18.122999 167
1.025000 0.650000 18.118000 169
所以,个人认为POINT4应该定义成这样:
struct POINT4
{
        float x;
        float y;
        float z;
//       chari;
        inti;
};
最后一个值i应该为透明度。
楼主把程序完成后共享来看看啊~

[ 本帖最后由 Sailent 于 2008-9-5 12:07 编辑 ]

yuanyulei 发表于 2008-9-10 12:46:14

我已经试过了
将数据格式改过后就没有问题了
下次我把数据和代码贴上来

yuanyulei 发表于 2008-9-11 19:45:11

这是我编译好的程序和数据,在我机器上运行没有问题.

array 发表于 2008-9-11 20:19:33

原帖由 yuanyulei 于 2008-9-11 19:45 发表 http://bbs.osgchina.org/images/common/back.gif
这是我编译好的程序和数据,在我机器上运行没有问题.

呵呵,看起来效果很不错啊~~支持一下。帮您修改了一下标题

Sailent 发表于 2008-9-12 09:30:52

楼主是在哪加LIB的呢?怎么我看见工程属性->properties->configuration properties->linker->Input标签下的Additional Dependencies里面什么都没有,但一编译又会出现找不到“osgIntrospectiond.lib”的错误呢?

FlySky 发表于 2008-9-13 22:09:47

链接器中的命令行里面~~~~~~


效果还不错,,,就是数据少了点,,,来一大片就好了~~~~~哈哈~~~~~~~~

Sailent 发表于 2008-9-16 09:52:35

晕,为什么要把LIB放在那呢……看上去不错,应该贴一下纹理就有真实的云的效果了吧?

FlySky 发表于 2008-9-16 12:20:21



晕,为什么要把LIB放在那呢……看上去不错,应该贴一下纹理就有真实的云的效果了吧?



一样的啦,,,数据足够多的话,,直接设置点的颜色就可以真实的显示云的效果~~~~~

yuanyulei 发表于 2008-9-16 19:17:56

回复 14楼 的帖子

每个点都有灰度信息的
不用纹理

yuanyulei 发表于 2008-9-16 19:23:52

按版主的指点,将光照关闭后
效果就出来了
这是新的代码

yuanyulei 发表于 2008-9-16 19:28:59

再问一个问题
为什么我用viewer.run();可以将场景显示出来
使用
while(!viewer->done())               
{
                osg->PreFrameUpdate();
                viewer->frame();
                osg->PostFrameUpdate();
                Sleep(10);                
}
怎么就不行呢?

array 发表于 2008-9-16 21:17:56

原帖由 yuanyulei 于 2008-9-16 19:28 发表 http://bbs.osgchina.org/images/common/back.gif
再问一个问题
为什么我用viewer.run();可以将场景显示出来
使用
while(!viewer->done())               
{
                osg->PreFrameUpdate();
                viewer->frame();
                osg->PostFrameUpdate();
                Sleep(10);                
}
怎么就不 ...

恐怕是因为您没有设置场景漫游器。viewer.run函数已经自动为您加了缺省的漫游器,自己设置的话,至少需要:
setCameraManipulator(new osgGA::TrackballManipulator());

yuanyulei 发表于 2008-9-19 19:25:10

好的
谢谢版主
我回去试以下

hnhpulyb 发表于 2018-12-29 17:56:46

请问版主如果我要读取一亿以上的点云数据,应该怎嘛操作呢,能给个思路吗

hnhpulyb 发表于 2018-12-29 17:58:40

刚从pcl显示点云转战osg显示点云,对osg刚编译过,搭建vs+qt+osg的点云处理框架
页: [1]
查看完整版本: 点云显示的问题(17楼已放出新的源代码)