查看: 1882|回复: 9

如何在vpb生成的地球模型上模拟海浪?

[复制链接]

该用户从未签到

发表于 2009-12-7 09:06:49 | 显示全部楼层 |阅读模式
我用vpb生成了地球模型,并在局部区域加上了高程值,我想在海面区域模拟波浪不知该如何下手,请高手指教,谢谢!

该用户从未签到

发表于 2009-12-7 09:29:59 | 显示全部楼层
不知道您打算使用着色器还是网格来模拟海面。一种简单的方式是在着色器中判断Z值小于0(或者您指定的方式来判断海面)的顶点并对其应用特殊的着色方式,另一种方法是重新建一个海面的模型并同时加载到场景中,与地球模型一起显示

该用户从未签到

 楼主| 发表于 2009-12-7 09:55:33 | 显示全部楼层
那就是要对vpb生成的地球模型进行遍历来判断了。如果用网格来生成海面的话不知道图元怎么来构造了,因为有海岸线的在在。
for(int i = 0; i<noYSteps;i++)
{
        osg::Vec2d q = tuuu;
        for(int j = 0; j<noXSteps;j++)
{
  if(latlonheight[i][j].height<0)
  {
   coordnates->push_back(osg::Vec3d(latlonheight[i][j].latitude,latlonheight[i][j].longitude,-120));
   texcoord->push_back(q);
  }
   q=q+ddx;
   
  }
  tuuu=tuuu+ddy;
}
以上是构建网格,下面是来图元代码
for(int row=0;row<noYSteps-1;row++)
{
  osg:rawElementsUInt* quadstrip = new osg::DrawElementsUInt(osg:rimitiveSet::TRIANGLE_STRIP);
        quadstrip->reserve(noXSteps*2);
        for(int col=0;col<noXSteps-1;col++)        
        {
   if(latlonheight[row][col].height<0)
   {
            quadstrip->push_back(row*noXSteps+col);
   quadstrip->push_back((row+1)*noXSteps+col);   
   }
        }   
        geom->addPrimitiveSet(quadstrip);
   }
但在运行的时候出现了错误,如图所示

不知该如何来解决了。谢谢!
新建 Bitmap 图像.jpg

该用户从未签到

发表于 2009-12-7 10:38:41 | 显示全部楼层
“在着色器中判断Z值小于0”的话,用gl_Vertex.z这个条件就可以了,但是如果您用的是WGS坐标系,那么不会如此简单。

最好的办法还是自己构建海面的模型,您的方法是否可行需要自己斟酌

该用户从未签到

 楼主| 发表于 2009-12-7 14:26:59 | 显示全部楼层
您所说的海面模型是指建模生成的?那在海岸线这块不知该如何来解决,谢谢!

该用户从未签到

发表于 2009-12-8 08:36:12 | 显示全部楼层
这就没有一定之规了,比如通过设置模型陆地部分的Alpha值使其透明,种种

该用户从未签到

 楼主| 发表于 2009-12-8 09:26:54 | 显示全部楼层
您所说的在着色器里生成海面的方法是指什么呢?我是这样做的,载入地形节点,然后在顶点着色器里用glvertex.z<0来生成海面,结果发现不对,海面是在地形表面上生成的,并不是在海平面上?

该用户从未签到

发表于 2009-12-8 09:56:42 | 显示全部楼层
如果地形是使用投影坐标系做得,那么海面Z值应当是小于等于0的,因此在GLSL中找到符合这一条件的顶点,然后直接操作像素片元的颜色就可以了。不用再另行生成什么。当然这种方法本身也会有诸多局限性

该用户从未签到

 楼主| 发表于 2009-12-8 15:20:18 | 显示全部楼层
那海面的波浪如何生成呢如果不另行生成什么的话?您所说的这个方法有诸多局限性不知能否例举一下呢?谢谢

该用户从未签到

发表于 2009-12-8 15:30:10 | 显示全部楼层
我没有系统的研究过,不能立即解答这么多的问题~~您可以自行研究
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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