目标:(七十八)中的问题155
瓦片生成后,就是一堆图片。怎么对这堆图片进行编号,是目前主流互联网地图商分歧最大的地方。总结起来分为四个流派:
下图显示了前三个流派在zoom=1层级上的瓦片编号结果:
高德地图的瓦片划分方式
下表总结了中国主要地图商的瓦片编号流派,点击每个链接就可以获得一个对应编号的瓦片地图:
地图商 | 瓦片编码 | 图层 | 链接 |
---|---|---|---|
高德地图 | 谷歌XYZ | 道路 | http://webrd02.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=8&x=105&y=48&z=7 |
高德地图 | 谷歌XYZ | 卫星 | http://webst04.is.autonavi.com/appmaptile?style=6&x=843&y=388&z=10 |
谷歌地图 | 谷歌XYZ | 道路 | http://mt2.google.cn/vt/lyrs=m&hl=zh-CN&gl=cn&x=105&y=48&z=7 |
谷歌地图 | 谷歌XYZ | 卫星 | http://mt2.google.cn/vt/lyrs=s&hl=zh-CN&gl=cn&x=105&y=48&z=7 |
谷歌地图 | 谷歌XYZ | 地形 |
|
OpenStreetMap | 谷歌XYZ | 道路 | http://a.tile.openstreetmap.org/7/105/48.png |
腾讯地图 | TMS | 道路 |
|
Bing地图 | QuadTree | 道路 | http://r1.tiles.ditu.live.com/tiles/r1321001.png?g=100&mkt=zh-cn |
百度地图 | 百度XYZ | 道路 | http://online4.map.bdimg.com/tile/?qt=tile&x=98&y=36&z=9&;styles=pl&scaler=1&udt=20170406 |
百度地图 | 百度XYZ | 交通 | http://its.map.baidu.com:8002/traffic/TrafficTileService?level=19&x=99052&y=20189&time=1373790856265&label=web2D&;v=017 |
谷歌地图中:z即为瓦片的层次,0层覆盖全球;y为行,从上往下为0~2^z-1;x为列,从左往右依次为0~2^z-1
地址中mt0.google.cn为服务器地址,可用的包括mt1.google.cn、mt2.google.cn、mt3.google.cn等。
lyrs=s为地图类型,如下:
补充一个新的瓦片地图资源:http://map.geoq.cn/,里面有彩色、灰色、暖色和夜色版的中国地图,坐标为GCJ02。举例:http://map.geoq.cn/ArcGIS/rest/services/ChinaOnlineStreetWarm/MapServer/tile/{z}/{y}/{x}
1) http://online0.map.bdimg.com/onlinelabel/?qt=tile&x=49310&y=10244&z=18
2) http://online1.map.bdimg.com/onlinelabel/?qt=tile&x=49310&y=10244&z=18
3) http://online2.map.bdimg.com/onlinelabel/?qt=tile&x=49310&y=10244&z=18
4) http://online3.map.bdimg.com/onlinelabel/?qt=tile&x=49310&y=10244&z=18
5) http://online4.map.bdimg.com/onlinelabel/?qt=tile&x=49310&y=10244&z=18
6) http://online5.map.bdimg.com/onlinelabel/?qt=tile&x=49310&y=10244&z=18
7) http://online6.map.bdimg.com/onlinelabel/?qt=tile&x=49310&y=10244&z=18
8) http://online7.map.bdimg.com/onlinelabel/?qt=tile&x=49310&y=10244&z=18
9) http://online8.map.bdimg.com/onlinelabel/?qt=tile&x=49310&y=10244&z=18
10) http://online9.map.bdimg.com/onlinelabel/?qt=tile&x=49310&y=10244&z=18
11) http://map.baidu.com/
12) http://wprd01.is.autonavi.com/appmaptile?style=7&x=427289&y=227618&z=19
13) http://wprd02.is.autonavi.com/appmaptile?style=7&x=427289&y=227618&z=19
14) http://wprd03.is.autonavi.com/appmaptile?style=7&x=427289&y=227618&z=19
15) http://wprd04.is.autonavi.com/appmaptile?style=7&x=427289&y=227618&z=19
16) http://webrd01.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=8&x=105&y=48&z=7
17) http://webrd02.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=8&x=105&y=48&z=7
18) http://webrd03.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=8&x=105&y=48&z=7
19) http://webrd04.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=8&x=105&y=48&z=7
20) http://webst01.is.autonavi.com/appmaptile?style=6&x=843&y=388&z=10
21) http://webst02.is.autonavi.com/appmaptile?style=6&x=843&y=388&z=10
22) http://webst03.is.autonavi.com/appmaptile?style=6&x=843&y=388&z=10
23) http://webst04.is.autonavi.com/appmaptile?style=6&x=843&y=388&z=10
24) http://its.map.baidu.com:8002/traffic/TrafficTileService?level=19&x=99052&y=20189&time=1373790856265&label=web2D&;v=017
25) http://mt2.google.cn/vt/lyrs=s&hl=zh-CN&gl=cn&x=105&y=48&z=7
26) http://mt2.google.cn/vt/lyrs=m&hl=zh-CN&gl=cn&x=105&y=48&z=7
27) http://mt2.google.cn/vt/lyrs=m@167000000&hl=zh-CN&gl=cn&x=1709157&y=910472&z=21&s=Galil
百度卫星图
http://maponline0.bdimg.com/starpic/?qt=satepc&u=x=0;y=0;z=3;v=009;type=sate&fm=46&app=webearth2&v=009&udt=20211110
let baiduLayer = createBaiduLayer({
type: 'base',
visible: true,
tileUrlFunction: function (tileCoord) {
let x = tileCoord[1];
let y = -tileCoord[2] - 1;// 注意此处,加-号并减1
let z = tileCoord[0];
let s = Math.floor(Math.random() * 4); // 随机整数0-4, 0-9不好用了
return "http://maponline" + s + ".bdimg.com/starpic/?qt=satepc&u=x=" + x + ";y=" + y + ";z=" + z + ";v=009;type=sate&fm=46&app=webearth2&v=009&udt=20211110";
}
})
目前高德的瓦片地址有如下两种:
新版地址:http://wprd0{1-4}.is.autonavi.com/appmaptile?x={x}&y={y}&z={z}&lang=zh_cn&size=1&scl=1&style=7和
老版地址:http://webst0{1-4}.is.autonavi.com/appmaptile?style=7&x={x}&y={y}&z={z}
高德新版的参数设置:
lang可以通过zh_cn设置中文,en设置英文;
size基本无作用;
scl设置标注还是底图,scl=1代表注记,scl=2代表底图(矢量或者影像);
style设置影像和路网,style=6为影像图,style=7为矢量路网,style=8为影像路网。
总结之:
http://wprd0{1-4}.is.autonavi.com/appmaptile?x={x}&y={y}&z={z}&lang=zh_cn&size=1&scl=1&style=7 为矢量图(含路网、含注记)
http://wprd0{1-4}.is.autonavi.com/appmaptile?x={x}&y={y}&z={z}&lang=zh_cn&size=1&scl=2&style=7 为矢量图(含路网,不含注记)
http://wprd0{1-4}.is.autonavi.com/appmaptile?x={x}&y={y}&z={z}&lang=zh_cn&size=1&scl=1&style=6 为影像底图(不含路网,不含注记)
http://wprd0{1-4}.is.autonavi.com/appmaptile?x={x}&y={y}&z={z}&lang=zh_cn&size=1&scl=2&style=6 为影像底图(不含路网、不含注记)
http://wprd0{1-4}.is.autonavi.com/appmaptile?x={x}&y={y}&z={z}&lang=zh_cn&size=1&scl=1&style=8 为影像路图(含路网,含注记)
http://wprd0{1-4}.is.autonavi.com/appmaptile?x={x}&y={y}&z={z}&lang=zh_cn&size=1&scl=2&style=8 为影像路网(含路网,不含注记)
高德地图旧版参数参数:
高德旧版可以通过style参数设置影像、矢量、路网。
总结之:
http://webst0{1-4}.is.autonavi.com/appmaptile?style=6&x={x}&y={y}&z={z} 为影像底图(不含路网,不含注记)
http://webst0{1-4}.is.autonavi.com/appmaptile?style=7&x={x}&y={y}&z={z} 为矢量地图(含路网,含注记)
http://webst0{1-4}.is.autonavi.com/appmaptile?style=8&x={x}&y={y}&z={z} 为影像路网(含路网,含注记)
高德地图按如下方式加载的效果图:
earth文件是XML格式的,里面是禁止使用"<" 字符和"&"字符的。对于上面的url地址中是存在&这些字符的,因此要进行替换。转义字符不合法的XML字符必须被替换为相应的实体,否则会不进行识别处理,直接忽略掉。
下面是五个在XML文档中预定义好的实体:
< |
< |
小于号 |
> |
> |
大于号 |
& |
& |
和 |
' |
' |
单引号 |
" |
" |
双引号 |
或者做如下处理:
高德道路地图为:
http://webrd02.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=8&x={x}&y={y}&z={z}
spherical-mercator
高德卫星地图为:
http://webst04.is.autonavi.com/appmaptile?style=6&x={x}&y={y}&z={z}
spherical-mercator
谷歌交通地图为:
http://mt2.google.cn/vt/lyrs=m&hl=zh-CN&gl=cn&x={x}&y={y}&z={z}
spherical-mercator
谷歌卫星地图为:
http://mt2.google.cn/vt/lyrs=s&hl=zh-CN&gl=cn&x={x}&y={y}&z={z}
spherical-mercator
谷歌地形为:加不加scale都显示异常,高程值过大,是不是单位有问题
http://mt0.google.cn/vt/lyrs=t&scale=2&hl=zh-CN&gl=cn&x={x}&y={y}&z={z}
spherical-mercator
OpenStreetMap地图为(需要curl支持ssl):
https://a.tile.openstreetmap.org/{z}/{x}/{y}.png
spherical-mercator
腾讯地图为(奇怪,通过浏览器读到的图片类型是jpeg,通过osgearth读到的是png?????实际情况是字节流是jpeg格式的,但是给的内容类型描述为png,典型的挂羊头卖狗肉,改进方法是智能识别图片类型,而不是像rex那样根据内容类型描述):
osgEarth/HttpClient.cpp
ReadResult
HTTPClient::doReadImage(const HTTPRequest& request,
const osgDB::Options* options,
ProgressCallback* callback)
{
//这里这是根据response中的mimeType来确定用哪种格式的读写方式,所以是有问题的
osgDB::ReaderWriter* reader = getReader(request.getURL(), response);
}
于比较常用的图片格式Png、Jpg、Gif、Bmp,我们需要针对不同的图片格式使用不同的控件来显示,这里就有一个来解析图片格式的问题。我们不能单纯的用文件后缀名.png、.jpg、.jpeg、.gif、.bmp来区分图片格式,因为实际上我们可以直接修改图片后缀名,修改后缀名并不能修改图片的格式,图片还是保持它原来的格式。
图片文件的格式结果中,在头部信息(一般都会在图片文件最开始的几个字节)中都会包含图片的格式信息。下面就列车常用的这几种格式图片的头部信息标识(十六进制)。
1.Png图片文件包括8字节:89 50 4E 47 0D 0A 1A 0A。即为 .PNG….。
2.Jpg图片文件包括2字节:FF D8。
3.Gif图片文件包括6字节:47 49 46 38 39|37 61 。即为 GIF89(7)a。
4.Bmp图片文件包括2字节:42 4D。即为 BM。
根据图片问题头标识信息我们可以能很方便的判断出文件的格式
http://rt1.map.gtimg.com/realtimerender?z={z}&x={x}&y={y}&type=vector&style=0
spherical-mercator
百度道路图(能加载显示,但不正确,因为百度的瓦片分割和xyz是不一样的):
http://online4.map.bdimg.com/tile/?qt=tile&x={x}&y={y}&z={z}&;styles=pl&scaler=1&udt=20170406
spherical-mercator
百度交通图:
百度瓦片Origin在[0,0],X轴从左至右递增,Y轴从下往上递增(从左下角到右上角),和正常的xyz顺序不一致,并且会存在负值情况
在第1级时百度将世界地图分为4块。
在第2级时,百度地图(中心点右上部分)分为2块,
在第3级时
rex的第二级网格,阴影部分应当与上图对应(但是无法对应)
百度的这种瓦片划分在球面显示时存在问题,因为它的最右或最左瓦片的边界不在地图边界上,造成球迷加载时有缺失,也就是这种瓦片划分是不能和rex的瓦片一一对应起来的
上图earth文件配置如下
驱动的代码做如下修改:
osg::Image* createImage(const TileKey& key,
ProgressCallback* progress )
{
//百度瓦片Origin在[0,0],X轴从左至右递增,Y轴从下往上递增(从左下角到右上角),和正常的xyz顺序不一致,并且会存在负值情况
int xBaidu, yBaidu;
unsigned cols = 0, rows = 0;
key.getProfile()->getNumTiles(key.getLevelOfDetail(), cols, rows);
xBaidu = x-cols / 2;
yBaidu = rows / 2 - y-1;
std::string location = _template;
// support OpenLayers template style:
replaceIn( location, "${x}", Stringify() << xBaidu);
replaceIn( location, "${y}", Stringify() << yBaidu);
replaceIn( location, "${z}", Stringify() << key.getLevelOfDetail()+1 );
// failing that, legacy osgearth style:
replaceIn( location, "{x}", Stringify() << xBaidu);
replaceIn( location, "{y}", Stringify() << yBaidu);
replaceIn( location, "{z}", Stringify() << key.getLevelOfDetail()+1 );
}
国内的经纬度有三套系统:
使用OpenStreetMap的坐标为WGS84;使用高德地图、腾讯地图、天地图的坐标为GCJ02;使用百度地图的坐标为BD09;谷歌地图和Bing地图的中国部分采用了高德地图的数据,所以坐标为GCJ02。
WGS84的坐标转化为GCJ02的坐标是单向的,即WGS84的坐标能够准确地变换为GCJ02坐标;但GCJ02坐标转换为WGS84时会存在精度损失。
GCJ02的坐标和BD09的坐标转换是双向的,转换规则可以参考下面的python代码:
import math
x_pi = 3.14159265358979324 * 3000.0 / 180.0
def amapcoor2bmapcoor(amap_lon, amap_lat):
x = amap_lon
y = amap_lat
z = math.sqrt(x * x + y * y) + 0.00002 * math.sin(y * x_pi)
theta = math.atan2(y, x) + 0.000003 * math.cos(x * x_pi)
bmap_lon = z * math.cos(theta) + 0.0065
bmap_lat = z * math.sin(theta) + 0.006
return (bmap_lon, bmap_lat)
def bmapcoor2amapcoor(bmap_lon, bmap_lat):
x = bmap_lon - 0.0065
y = bmap_lat - 0.006;
z = math.sqrt(x * x + y * y) - 0.00002 * math.sin(y * x_pi);
theta = math.atan2(y, x) - 0.000003 * math.cos(x * x_pi);
amap_lon = z * math.cos(theta);
amap_lat = z * math.sin(theta);
return (amap_lon, amap_lat)
rex引擎加速绘制的一点思路:瓦片在一定可视域范围内才进行绘制,而不是以瓦片和视点的距离计算。这样可以减少每帧绘制的瓦片数量。osgEarth也是这么做的,不可见的TileNode就不会被裁剪:
osgEarthDrivers/engine_rex/TileNode.cpp
bool
TileNode::cull(TerrainCuller* culler)
{
EngineContext* context = culler->getEngineContext();
// Horizon check the surface first:
if (!_surface->isVisibleFrom(culler->getViewPointLocal()))
{
return false;
}
}
另一条思路:加载瓦片高程、影像资源的线程,能够根据当前视点内的瓦片,优先加载这些瓦片的资源,也就是每帧都要按照视点位置进行资源优先级排序,而不是按照请求产生的顺序来顺序加载。也就是地形资源是按请求顺序加载的,而不是按照当前视点范围内优先加载的
rex引擎的优点有哪些?
global-mercator与spherical-mercator的区别?是一回事
osgEarthUtils/TMS.cpp
const Profile*
TileMap::createProfile() const
{
else if (getProfileType() == Profile::TYPE_MERCATOR)
{
profile = osgEarth::Registry::instance()->getSphericalMercatorProfile();
}
}
else if (profile == "global-mercator") tileMap->setProfileType( Profile::TYPE_MERCATOR );
网络加载资源的过程:
通过curl加载网络资源,提示CURLE_UNSUPPORTED_PROTOCOL,这是由于在编译curl时未选择CMAKE_USE_WINSSL开关
高程资源:
免费DEM中分辨率最高的ALOS 12.5米 DEM获取方式_Remote Sensing_Dong的博客-CSDN博客_alos dem
待继续分析列表:
9、earth文件中都有哪些options((九)中问题)
10、如何根据earth文件options创建不同的地理信息引擎节点((九)中问题)
11、rex地理信息引擎的四梁八柱((九)中问题)
12、osgEarth::TerrainEngineNode中setMap方法作用((十二)中问题)
13、RexTerrainEngineNode中_mapFrame的作用((十二)中问题)
14、地形变形(Terrain morphing)((十二)中问题)
15、地球瓦片过期门限的含义((十二)中问题)
16、高分辨率优先的含义((十二)中问题)
17、OSGEARTH_DEBUG_NORMALS环境变量的作用((十二)中问题)
18、活跃瓦片寄存器的作用((十二)中问题)
19、资源释放器子节点的作用((十二)中问题)
20、共享几何图形池子节点的作用((十二)中问题)
21、分页瓦片加载器子节点的作用((十二)中问题)
22、分页瓦片卸载器子节点的作用((十二)中问题)
23、栅格化器子节点的作用((十二)中问题)
24、地形子节点的作用((十二)中问题)
25、绑定渲染器的作用((十二)中问题)
26、地图回调函数的作用((十二)中问题)
27、如何将地图图层添加到rex引擎中((十二)中问题)
28、选择信息的作用((十二)中问题)
29、瓦片包围盒修改回调函数的作用((十二)中问题)
30、刷新rex引擎((十二)中问题)
31、刷新边界作用((十二)中问题)
32、osgEarth::Metrics类的意义((十四)中问题)
33、请求合并队列_mergeQueue((十四)中问题)
34、分页瓦片加载器在更新遍历时对请求处理过程((十四)中问题)
35、分页瓦片加载器在更新遍历时对已处理请求裁剪过程((十四)中问题)
36、已处理的请求队列_requests((十四)中问题)
37、DatabasePager中的_fileRequestQueue和_httpRequestQueue((十六)中问题)
38、瓦片请求的生成到处理过程详解((十六)中问题)
39、瓦片节点TileNode的创建过程((十七)中问题)
40、request请求加载瓦片优先级的含义((十七)中问题)
41、request的_internalHandle的作用((十七)中问题)
42、DatabaseRequest中_objectCache含义((十七)中问题)
42、osgEarth的多线程分析((十七)中问题)
43、osgEarth的缓存及其结构((十七)中问题)
44、DatabaseThread从缓存加载数据过程((十七)中问题)
45、DatabaseThread从文件加载数据过程((十七)中问题)
46、决定创建TileNode的时机条件((十七)中问题)
47、TerrainEngineNode的createTileModel过程详解((十七)中问题)
48、DatabaseThread中CompileSet的含义((十七)中问题)
48、PagerLoader的traverse过程详解((十七)中问题)
49、DatabaseThread的run过程详解((十七)中问题)
50、LoadTileData的invoke过程详解((十七)中问题)
51、TileNode的cull过程详解((十七)中问题)
52、遮罩生成器osgEarth::Drivers::RexTerrainEngine::MaskGenerator((十八)中问题)
53、RexTerrainEngineNode::traverse过程详解((十八)中问题)
54、TileNode节点下的场景树分析((十八)中问题)
55、地形瓦片大小尺寸和LOD的关系((十八)中问题)
56、TileNode的_tileKeyValue作用((十八)中问题)
57、TileNode的_morphConstants作用((十八)中问题)
58、TileNode的_stitchNormalMap作用((十八)中问题)
59、TileNode的_renderModel作用((十八)中问题)
60、初始化高程栅格过程详解((十八)中问题)
61、LoadTileData中的CreateTileModelFilter作用((十八)中问题)
62、TileNode节点何时会从场景树中移除((十八)中问题)
63、osgEarth::Map的Profile创建过程((二十)中问题)
64、osgEarth::TerrainTileModelFactory添加颜色层和影像层的区别((二十一)中问题)
65、osgEarth::PatchLayer修补层的作用((二十一)中问题)
66、osgEarth::TerrainLayer中的_memCache(osgEarth::MemCache)详解((二十一)中问题)
67、osgEarth::Layer::RenderType图层渲染类型的作用((二十一)中问题)
68、osgEarth::TerrainLayer中TileSource的作用((二十一)中问题)
69、earth文件没有设置高程图层会不会有默认高程层(高程均为0)((二十一)中问题)
70、TerrainTileModelFactory::addColorLayers过程详解((二十一)中问题)
71、TerrainTileModelFactory::addElevation过程详解((二十一)中问题)
72、osgearth中可能用到的几个全局实例对象(osgDB::Registry osgEarth::Registry osg::Timer osg::DisplaySetting)((二十三)中问题)
73、osgEarth::Map::addLayer过程详解((二十三)中问题)
74、TileNode::setDirty过程详解((二十三)中问题)
75、请求四个状态的含义(IDLE RUNNING MERGING FINISHED)((二十三)中问题)
76、什么时候删除TileNode节点,不会一直增加吧((二十三)中问题)
77、寄存器中请求状态活动记录的含义Registry::instance()->endActivity( req->getName() )((二十三)中问题)
78、瓦片TileNode的生命周期流程详解((二十三)中问题)
79、rex引擎如何将瓦片构造成地球形状((二十五)中问题)
80、高程、影像文件格式详解((二十五)中问题)
81、TileNode的merge过程详解((二十六)中问题)
82、osgEarth支持的空间参考坐标系详解(osgEarth::SpatialReference、osgEarth::CubeSpatialReference、osgEarth::TangentPlaneSpatialReference)((二十九)中问题)
83、osgEarth地球椭球体ellipsoid 大地基准面datum 地图投影Projection详解((二十九)中问题)
84、空间参考坐标系和坐标系统类型的关系(geocentric projected)((二十九)中问题)
85、proj4是什么((二十九)中问题)
86、为什么要删除设置过的垂直水准面((二十九)中问题)
87、osgEarth如何对投影坐标系和大地坐标系进行显示处理的((二十九)中问题)
88、TileNode的节点构成,一个surface、tilenode((三十)中问题)
89、MapFram和MapInfo的关系((三十)中问题)
90、ModifyBoundingBoxCallback的使用时机和场合((三十)中问题)
91、MapFrame为什么要单独存放高程层_elevationLayers,而不是放在图层_layers中((三十)中问题)
92、MapFrame和Map中高程池的作用osg::ref_ptr
93、osgEarth::Drivers::RexTerrainEngine::TileDrawable分析((三十)中问题)
94、请求读取地理信息失败会如何处理((三十二)中问题)
95、RexTerrainEngineNode的遍历过程详解((三十三)中问题)
96、osgEarth::Drivers::RexTerrainEngine::TerrainCuller的apply过程详解((三十三)中问题)
97、RexTerrainEngineNode的updateState过程详解 设置了很多着色器变量((三十三)中问题)
98、什么时候分配opengl资源((三十三)中问题)
99、TileNode释放opengl资源过程releaseGLObjects详解((三十三)中问题)
100、最近一次遍历的帧号和时间是怎么设置呢(在渲染遍历里),怎么就不会再渲染遍历该瓦片节点了((三十三)中问题)
101、osg::State和osg::StateSet的关系((三十四)中问题)
102、osgEarth::SpatialReference和osgEarth::Profile的关系((三十六)中问题)
103、osgEarth的Geographic、Geodetic、Geocentric和Project的关系((三十六)中问题)
104、TileNode绘制过程详解((三十七)中问题)
105、如何控制父子TileNode节点的显隐((三十七)中问题)
106、GeometryPool的createGeometry过程详解((三十七)中问题)
107、TileNode如何从地图中提取与其分辨率相适应的图像数据((三十七)中问题)
108、如何定制椭球体并进行椭球体间坐标转换((四十五)中问题)
109、Horizon Cull是什么意思((四十五)中问题)
110、osgEarth::Drivers::RexTerrainEngine::DrawState的作用((四十五)中问题)
111、osgEarth的线程分析((四十五)中问题)
112、从osgEarth到osg到Opengl((四十五)中问题)
113、osg::Program与osgEarth::VirtualProgram的关系((四十五)中问题)
114、rex引擎shader文件中的#pragma vp_entryPoint vp_location等含义((四十五)中问题)
115、rex引擎的着色器如何区分顶点和片段((四十五)中问题)
116、osg::Program是如何对着色器及其变量进行管理的((四十五)中问题)
117、osg的窗口是如何与opengl集成的((四十五)中问题)
118、osg是如何实现opengl的初始化的((四十五)中问题)
119、CGCS2000余WGS84坐标系的比较((四十六)中问题)
120、着色器代码文件到着色器程序的过程((五十一)中问题)
121、osgEarth::VirtualProgram默认出现在哪些位置((五十一)中问题)
122、rex引擎默认的几个着色器功能分析((五十一)中问题)
123、osgEarth::TileRasterizer功能详解((五十二)中问题)
124、osgEarth::ImageLayer如何使用VirtualProgram((五十二)中问题)
125、osgEarth::ShaderFactory osgEarth::ShaderLoader关系((五十四)中问题)
126、osgEarth::URI和osgEarth::URIContext的作用((五十四)中问题)
127、RexTerrainEngineNode中_renderBindings的作用((五十四)中问题)
128、Rex引擎如何给shader文件中的uniform变量赋值((五十四)中问题)
129、osgEarth中多个着色器的源代码的编译链接过程((五十四)中问题)
130、osgEarth::ShaderFactory osgEarth::ShaderLoader关系((五十四)中问题)
131、TileNode与DrawTileCommand的关系((五十五)中问题)
132、如何提取出指定范围的高程网格((五十五)中问题)
133、从earth文件加载高层图层的过程((五十五)中问题)
134、TerrainTileModel与TileRenderModel的关系((五十五)中问题)
135、EngineContext的作用((五十五)中问题)
136、几个uniformmap的关系((五十五)中问题)
137、DrawTileCommand中的采样器((五十五)中问题)
138、TileNode中的_surface(SurfaceNode)作用是什么((五十五)中问题)
139、stateset中的adduniform、setTextureAttribute等最后是如何反应到opengl上的((五十五)中问题)
140、状态树和渲染树的关系((五十五)中问题)
141、TileRenderModel中的RenderingPass和RenderBindings((五十五)中问题)
142、高程瓦片的绘制过程((五十五)中问题)
143、如何从高程影像变成高程网格((七十一)中问题)
144、osg::StateSet中的_binMode作用((七十二)中问题)
145、rex的瓦片高程影像和高程文件中的影像尺寸如何对应((七十二)中问题)
146、osgEarth::TerrainLayerOptions高程层选项中参数的含义((七十二)中问题)
147、从高程文件读取的高程信息如何填充rex的高程瓦片((七十二)中问题)
148、地图下载器实现原理((七十二)中问题)
149、RexTerrainEngineNode和TerrainCuller中_terrain的关系((七十二)中问题)
150、TileNodeRegistry和LayerDrawable中_tiles的关系((七十二)中问题)
151、rex引擎中绘制瓦片的调度过程原理((七十二)中问题)
152、晕眩图的制作与实现((七十八)中问题)
153、如何将高层场保存为tif、MBTiles等((七十八)中问题)
154、如何将tif和MBTiles进行格式转换((七十八)中问题)
155、如何加载百度、高德、谷歌、微软的在线地图((七十八)中问题)
156、osgEarth运行起来为什么很占CPU资源((七十九)中问题)
157、wmts与xyz、quadtree、tms的关系((七十九)中问题)