查看: 2436|回复: 6

可视域分析

[复制链接]

该用户从未签到

发表于 2013-3-25 17:27:36 | 显示全部楼层 |阅读模式
希望实现的效果在这个帖子中已经贴了一张图,http://bbs.osgchina.org/forum.ph ... =%BF%C9%CA%D3%D3%F2
http://bbs.osgchina.org/forum.ph ... 3D&noupdate=yes
第一阶段,考虑用shader实现,图中的红色的线框,我是通过鼠标点击两个点(A,B)形成的,这个已经实现。在上面的那个贴子里,我最终是考虑2个条件来进行着色的:1,位于锥形线框内(距离小于半径&&角度小于视域角度的一半,相当于fovy*0.5);2,每个点的gl_Normal与(gl_position-A)的夹角,小于90则在正面,即可见,大于90 则不可见。
这个做法没有实现,分析的不正确,于是请教大师之后,采用shadowMap的方法,进入第二阶段。

第二阶段,根据rttCamera得到深度图,osg::Vec3 upDirection(0.0,0.0,1.0);
        float dis=(endP-eyeP).length();
        rttCamera->setProjectionMatrixAsPerspective(120,1.0,0.0,dis);
        rttCamera->setViewMatrixAsLookAt(eyeP,endP,upDirection);
这样设置,虽然得到了深度图,但是结果并不是相机位于eyeP点,沿着endP-eyeP方向得到的深度,这是问题一

将得到的深度图,传给fragMentShader,函数是void getStateset(osg::Node* node,osg::Texture2D *depthTex, osg::Vec3 eyeP, osg::Vec3 endP, osg::Matrixd mat,float angle)在第一阶段所述的鼠标点击事件形成锥形线框的时候调用这个函数,如下:getStateset(model,t2d,eyeP,endP,mat,120);//mat按照我的理解,应该是世界坐标系到裁剪坐标系的变换矩阵,目前还不确定具体怎么计算,这是问题二
目前效果如图 222.jpg

该用户从未签到

发表于 2013-3-26 15:50:14 | 显示全部楼层
您面临的第一个问题其实是:您准备怎么去实现自己的功能,我感觉您并没有准备好一个实现的流程图,因此您提出的问题似乎也是瞎撞的感觉。。。
简单的思路中,基于Projective Texture做视域分析其实需要做两件事,
1、通过空间分析计算,得到视域内所有可见和不可见区域,绘制成一张图(这张图可以是红绿间隔的,或者您给的那个例子貌似只有绿色?),这个要绘制的内容显然是计算得到的,不是渲染得到的
2、把这张图用projective texture(也就是shadow map中最后的合成部分)的方式贴到场景中。换句话说贴这张图的时候UV坐标就是屏幕坐标。而您目前提出的问题,我不知道是基于一种什么样的分析策略

该用户从未签到

 楼主| 发表于 2013-3-26 16:25:33 | 显示全部楼层
array 发表于 2013-3-26 15:50
您面临的第一个问题其实是:您准备怎么去实现自己的功能,我感觉您并没有准备好一个实现的流程图,因此您提 ...

谢谢Array大师,我会努力滴……

该用户从未签到

 楼主| 发表于 2013-4-1 09:00:52 | 显示全部楼层
array 发表于 2013-3-26 15:50
您面临的第一个问题其实是:您准备怎么去实现自己的功能,我感觉您并没有准备好一个实现的流程图,因此您提 ...

阿瑞大师,您给我回复的答案,第一步,“通过空间分析计算”,目前我只知道如何确定分析范围,百度谷歌,没有找到合适的算法来实现可见区域与不可见区域的区分,还望大师能在百忙之中抽出些许时间,指点一二,谢谢

该用户从未签到

发表于 2013-4-1 10:20:49 | 显示全部楼层
这已经是纯粹GIS分析的范畴了吧,您可以调查了解一下相关的知识

该用户从未签到

 楼主| 发表于 2013-4-24 10:33:16 | 显示全部楼层
本帖最后由 Berly 于 2013-4-24 10:33 编辑
array 发表于 2013-3-26 15:50
您面临的第一个问题其实是:您准备怎么去实现自己的功能,我感觉您并没有准备好一个实现的流程图,因此您提 ...


阿瑞大师,我已经区分出了那些点可见的,哪些点不可见,我肿么样才绘制到一张图片上呢?给点思路呗

该用户从未签到

发表于 2013-4-26 09:45:36 | 显示全部楼层
直接对Image的data()进行操作就可以了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

OSG中国官方论坛-有您OSG在中国才更好

网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

联系我们

  • 工作时间:09:00--18:00
  • 反馈邮箱:1315785073@qq.com
快速回复 返回顶部 返回列表