查看: 2088|回复: 3

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

[复制链接]

该用户从未签到

发表于 2014-4-15 20:15:04 | 显示全部楼层 |阅读模式
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改掉之后,比较小的数值没有什么区别,比较大的数值的话,直接没有图形了。

该用户从未签到

发表于 2014-4-15 21:38:03 | 显示全部楼层
pathStyle.getOrCreate<AltitudeSymbol>()->clamping() = AltitudeSymbol::CLAMP_ABSOLUTE;


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

该用户从未签到

 楼主| 发表于 2014-4-16 13:16:10 | 显示全部楼层
ago 发表于 2014-4-15 21:38
pathStyle.getOrCreate()->clamping() = AltitudeSymbol::CLAMP_ABSOLUTE;

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

该用户从未签到

发表于 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>
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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