zzuzhao 发表于 2014-4-15 20:15:04

OSGEarth里面怎么绘制含有高度的几何体?

osgearth_annotation这个例子里面给出了绘制几何体的例子。
// A path using great-circle interpolation.
    {
      Geometry* path = new LineString();
      path->push_back( osg::Vec3d(-74, 40.714, 0) );   // New York
      path->push_back( osg::Vec3d(139.75, 35.68, 0) ); // Tokyo

      Style pathStyle;
      pathStyle.getOrCreate<LineSymbol>()->stroke()->color() = Color::Red;
      pathStyle.getOrCreate<LineSymbol>()->stroke()->width() = 3.0f;
      pathStyle.getOrCreate<AltitudeSymbol>()->clamping() = AltitudeSymbol::CLAMP_TO_TERRAIN;
      pathStyle.getOrCreate<AltitudeSymbol>()->technique() = AltitudeSymbol::TECHNIQUE_GPU;

      Feature* pathFeature = new Feature(path, geoSRS, pathStyle);
      pathFeature->geoInterp() = GEOINTERP_GREAT_CIRCLE;

      //OE_INFO << "Path extent = " << pathFeature->getExtent().toString() << std::endl;

      FeatureNode* pathNode = new FeatureNode(mapNode, pathFeature);
      annoGroup->addChild( pathNode );

      labelGroup->addChild( new LabelNode(mapNode, GeoPoint(geoSRS,-170, 61.2), "Great circle path", labelStyle) );
    }

像上面这段代码里面,绘制了一条连接两地的线,但是这个线是紧贴着球体的,有什么办法能让线离开球体?就是在不同的海拔高度。比如同样经纬度但是不同高度的两条线的轨迹。。
还有Geometry的PointSet ,绘制点的时候,怎么可以实现绘制位于不同海拔高度的点啊?比如我有很多点,在同一个经纬度但是在不同的高度,怎么体现出来???求教高手指点一下。
path->push_back( osg::Vec3d(-74, 40.714, 0) ); 像这个我将0改掉之后,比较小的数值没有什么区别,比较大的数值的话,直接没有图形了。

ago 发表于 2014-4-15 21:38:03

pathStyle.getOrCreate<AltitudeSymbol>()->clamping() = AltitudeSymbol::CLAMP_ABSOLUTE;


使用绝对高度,会绘制到一定高度

zzuzhao 发表于 2014-4-16 13:16:10

ago 发表于 2014-4-15 21:38
pathStyle.getOrCreate()->clamping() = AltitudeSymbol::CLAMP_ABSOLUTE;




谢谢回复。
我按你的说法改了之后,会出现在地球背面的图像也绘制的结果啊。
如果按例子的方式,是只显示球体正面的,背面不绘制。
但是这样背面的也显示出来了啊

ago 发表于 2014-4-17 10:20:45

zzuzhao 发表于 2014-4-16 13:16
谢谢回复。
我按你的说法改了之后,会出现在地球背面的图像也绘制的结果啊。
如果按例子的方式,是只显 ...

给你个配置文件,配置文件实现与程序实现是等效的




<map name="annotation_line" type="geocentric" version="2">

    <image driver="gdal" name="shouer">
      <url>../data/world.tif</url>
    </image>
      
   
    <options>
      <terrain>
            <lighting>false</lighting>
            <sample_ratio>3</sample_ratio>
      </terrain>
      <!-- <cache_policy usage="cache_only"/> -->
    </options>
   

    <external>
      <viewpoints>
            <viewpoint name="Annotation Samples"
                     lat="33" long="-118" range="500000"
                     heading="35.27" pitch="-35" />
      </viewpoints>
      
      <annotations>
                <feature name="line">
                <srs>wgs84</srs>
                <geometry>
                  LINESTRING(-120 37 100000.0, -120 33 100000.0, -118 33 100000.0, -118 32 100000.0)
                </geometry>
                <style type="text/css">
                  stroke:            #ff3000;
                  stroke-width:      1;
                  stroke-tessellation: 100;
                  altitude-clamping:   absolute;
                  altitude-technique:gpu;
                  render-lighting:   false;
                </style>
            </feature>
            
      </annotations>
      
    </external>
</map>
页: [1]
查看完整版本: OSGEarth里面怎么绘制含有高度的几何体?