查看: 2621|回复: 10

关于有坐标的图像使用,请大家帮忙

[复制链接]

该用户从未签到

发表于 2012-5-27 21:24:52 | 显示全部楼层 |阅读模式
      俺想在一个带有坐标的地表平面tif图上按经纬度和高度在指定的位置上加物体模型:
    源图像是tif格式的,我使用了osgdem命令把它转化成了ive的格式,然后在VS2008里建立了工程,使用osgDB::readNodeFile来读取。若是仅仅读取这一个图片,可以正常的显示;但是要把它和OSG里原有的模型,比如cow.osg和cessna.osg一起加载,有坐标的图像就显示不出来。
    我试着用过空间变换节点、位置变换节点等方式来处理,都无法把带有坐标的外部图像和OSG已有的模型按想要的相对位置来显示。目前对有坐标的图像很无奈 现在的问题就是不能用好tif图像里面已有的坐标信息,并把这些信息传给想要加载的模型,实现对模型相对地表位置的控制。
   
    本人刚使用OSG没多久,对相关的知识不太了解。请论坛里的各位高人指点迷津。
      也希望看到帖子的XDJM们帮忙顶一下

该用户从未签到

 楼主| 发表于 2012-5-28 15:05:10 | 显示全部楼层
是不是要用VPB来实现呢?

该用户从未签到

发表于 2012-5-28 15:13:42 | 显示全部楼层
1、位置是否相差很远
2、体积是否相差很大(所以您看不到另一个模型)
用不用VPB并不是主因

该用户从未签到

 楼主| 发表于 2012-5-28 20:45:09 | 显示全部楼层
本帖最后由 wszarchy 于 2012-5-29 12:33 编辑
array 发表于 2012-5-28 15:13
1、位置是否相差很远
2、体积是否相差很大(所以您看不到另一个模型)
用不用VPB并不是主因


本人发的第一个帖子能得到array老大的关注,深感荣幸

您在帖子里指出的问题可能是我无法同时加载的、不能看到多个模型的原因。不过对于OSG中已有的模型,我看了您所著的《OpenSceneGraph三维渲染引擎设计与实践》一书,以及OSG本身所带的一些examples,对于OSG已有模型之间距离不当的情况,我尝试过使用osg:ositionAttitudeTransform节点对于坐标osg::Vec3进行设置结合setScale()来对位置和大小做调整(比如cessna.osg和lz.osg的相对位置显示),实现了一定的预想效果。

现在最大的问题就是对有外界坐标(如世界坐标系下经纬度、高度)的图像和模型没辙,除了使用readNodeFile把它单独读出显示外,没手段做出别的空间位置关系的调整。

我的目标是在有地理坐标的图像上(比如tif格式,转化为ive文件后)按想要的位置加物体,就比如cessna模型,这阵子一直尝试着各种办法来做。
除了1楼提到的直接使用osg:: PositionAttitudeTransform节点MatrixTransform节点实现不了外,我还参考您在著述里介绍知识,考虑由真实的地理坐标系经OSG的世界坐标系向屏幕坐标系变换可能是一种办法、以及不知道能否利用osg:: CoordinateSystemNode节点,但查了您的书和另一本《编程指南》的书,找不到从含有外界坐标的图像(比如,OSG下data/Images文件下所带land_shallow_topo_2048.jpg或者从网上可以找到的其他地理坐标平面图)读取和利用坐标信息的详细指导。当前我对单个图像的坐标信息目前都无法处理,再往上面按预定位置加别的模型就更不知该如何是好了?所以再次发帖请教各位高手指点。

不知我把自己遇到困难的情况说清楚了没有。先谢谢了!

该用户从未签到

 楼主| 发表于 2012-5-29 18:59:10 | 显示全部楼层
图像坐标啊,真让人头疼

该用户从未签到

发表于 2012-5-30 10:57:36 | 显示全部楼层
最简单的就是计算一下某个模型应该出现的经纬度坐标,然后用convertLatLongHeightToXYZ()转换到XYZ并且应用到MatrixTransform上

该用户从未签到

 楼主| 发表于 2012-5-30 15:06:53 | 显示全部楼层
本帖最后由 wszarchy 于 2012-5-30 18:57 编辑
array 发表于 2012-5-30 10:57
最简单的就是计算一下某个模型应该出现的经纬度坐标,然后用convertLatLongHeightToXYZ()转换到XYZ并且应用 ...


那我对于打算设为基准的有地理坐标图像(想将它的中心设为OSG中XYZ坐标原点)。对它的经纬度坐标也是先使用convertLatLongHeightToXYZ()转换到XYZ,而后使用MatrixTransform将其中心设置为vec3(0.0f,0.0f,0.0f)。
然后对于想放置的模型再使用convertLatLongHeightToXYZ()转换到XYZ并且应用到MatrixTransform上,来设定模型在OSG渲染空间XYZ的位置吗?

另外关于真实世界的坐标系和OSG渲染场景的坐标系,我也有些概念想向您请教:
大地直角坐标系——真实世界的三维坐标系, 当地水平坐标系——真实世界的二维坐标系
世界坐标系(您在著作里讲场景渲染时所说的)——OSG渲染空间的三维坐标系,XYZ坐标系
是这么一种对应关系么?
尤其是世界坐标系这个概念,仅仅是指真实世界的,还是可用于描述要渲染的OSG三维虚拟空间的?

该用户从未签到

发表于 2012-6-4 10:15:57 | 显示全部楼层
您说的方法本身并没有什么不妥的地方,不过不实验一下的话,永远无法验证它是否符合您的需求

世界坐标系永远指的是虚拟世界的坐标,因为我们要表达的是屏幕上的世界。另外一个重要的概念是:我们构建的虚拟空间,无论OpenGL还是DX,都是没有坐标单位的;如果您要把它和一个已有的坐标系统联系起来,最简单的办法是自己拟定一下单位的映射关系,并且确保当前的投影方式和窗口尺寸能够符合您观览的需要。

该用户从未签到

 楼主| 发表于 2012-6-4 14:37:00 | 显示全部楼层
array 发表于 2012-6-4 10:15
您说的方法本身并没有什么不妥的地方,不过不实验一下的话,永远无法验证它是否符合您的需求

世界坐标系 ...

再次感谢array耐心细致的解答

该用户从未签到

发表于 2012-7-23 17:30:20 | 显示全部楼层
受教了。

该用户从未签到

发表于 2012-7-23 18:01:18 | 显示全部楼层
貌似很复杂的样子,没学习osgEarth的路过
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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