|
楼主 |
发表于 2009-12-3 10:48:56
|
显示全部楼层
本帖最后由 cooloboy 于 2009-12-3 10:58 编辑
我 看到 湖面之舟 发表的一篇 关于 从文件生成模型的方法 很感兴趣
http://bbs.osgchina.org/viewthre ... &highlight=readdata
但是 我按照他的方法 读入了一个 dem 文件
数据都读入了 没有显示出模型 不知 是否 法线问题~~
代码:
osg::ref_ptr<osg::Geode> ReadData()
{
osg::ref_ptr<osg::Geode> geode=new osg::Geode;
// 三维坐标
osg::ref_ptr<osg::Vec3Array> v=new osg::Vec3Array;
std::ifstream infile;
infile.open("data/E312588N100496.dat");
if(!infile)
{
std::cout << "Unable to open datafile";
exit(1);
}
char buffer[32];
while( infile >> buffer )
{
int i = strlen(buffer);
if ( i == 5)
{
double z = atof(buffer);
v->push_back(osg::Vec3(x, y, (float)z / 10));
y = y + terrainFace -> t() / 1024;
if ( y <= terrainFace -> t() / 1024 ) x = terrainFace -> s() / 512;
}
else
{
y = 0;
std::cout << buffer << std::endl;
}
memset(buffer, '\0', 32);
}
infile.close();
// 总体面片
osg::ref_ptr<osg::Geometry> geom3=new osg::Geometry;
geom3->setVertexArray(v.get());
// 设置面片类型
geom3->addPrimitiveSet(new osg:rawElementsUShort());
// 设置法线
osgUtil::SmoothingVisitor::smooth(*geom3);
// 设置颜色
osg::ref_ptr<osg::Vec4Array> c = new osg::Vec4Array;
c->push_back( osg::Vec4( 1.f, 1.f, 1.f, 1.f ) );
geom3->setColorArray( c.get() );
geom3->setColorBinding( osg::Geometry::BIND_OVERALL );
geode->addDrawable(geom3.get());
return geode.get();
} |
|