加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

OSG 从高程图创建地形

(2013-08-03 09:30:16)
根据一副高度图片,OSG很容易创建出对应的地形。
其原理想必大家都知道,很方便。
由于没有相关资料,这些代码是从OSG自带的示例中提取出来并结合一位网友的建议
仅供大家参考

#include
#include
#include
#include
#include
#include
#include
#include
#pragma comment(lib,"osgd.lib")
#pragma comment(lib,"osgViewerd.lib")
#pragma comment(lib,"osgUtild.lib")
#pragma comment(lib,"osgDBd.lib")
#pragma comment(lib,"osgGAd.lib")
using namespace osg;
ref_ptr createHeight(std::string heightFile,std::string texFile)
{
ref_ptr geode = new Geode();
ref_ptr heightMap = osgDB::readImageFile(heightFile);
ref_ptr heightFied = new HeightField();
//创建高度场景
heightFied->allocate(heightMap->s(),heightMap->t());
heightFied->setOrigin(Vec3(0,0,0));
//设置X间隔
heightFied->setXInterval(1.0f);
//设置Y间隔
heightFied->setYInterval(1.0f);

for (int r = 0; r < heightFied->getNumRows(); r++)
{
for (int c = 0; c < heightFied->getNumColumns(); c++)
{
heightFied->setHeight(c,r,((*heightMap->data(c,r))/255.0f)*60.0f);
}
}

geode->addDrawable(new ShapeDrawable(heightFied));
ref_ptr tex = new Texture2D(osgDB::readImageFile(texFile));
tex->setFilter(Texture2D::MIN_FILTER,Texture2D::LINEAR_MIPMAP_LINEAR);
tex->setFilter(Texture2D::MAG_FILTER,Texture2D::LINEAR);
tex->setWrap(Texture::WRAP_S,Texture::REPEAT);
tex->setWrap(Texture::WRAP_T,Texture::REPEAT);

geode->getOrCreateStateSet()->setTextureAttributeAndModes(0,tex);

return geode;
}
int main()
{
ref_ptr group = new Group();
group->addChild(createHeight("terrain//Heightmap.jpg","terrain//fungus.dds"));
osgViewer::Viewer view;
view.setSceneData(group);
view.run();
return 0;
}

http://s6/mw690/81b47c3fgx6ByFoOpo105&690从高程图创建地形" TITLE="OSG 从高程图创建地形" />

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有