目標:(五十五)中的問題142
1、在RexTerrainEngineNode遍歷時生成renderleaf,其中的drawable爲LayerDrawable(其對應earth文件中每一個高程、影像層)。在TerrainCuller進行遍歷時,會對LayerDrawable添加實際瓦片對應的高程影像紋理,這樣繪製出來就能看到高程影像效果了。
osgEarthDrivers/engine_rex/RexTerrainEngineNode.cpp
void
RexTerrainEngineNode::dirtyState()
{
LayerDrawable* lastLayer = 0L;
for(LayerDrawableList::iterator i = culler._terrain.layers().begin();
i != culler._terrain.layers().end();
++i)
{
lastLayer = i->get();
cv->apply(*lastLayer);
}
}
osgUtil/RenderLeaf
inline RenderLeaf(osg::Drawable* drawable,osg::RefMatrix* projection,osg::RefMatrix* modelview, float depth=0.0f, unsigned int traversalOrderNumber=0):
osg::Referenced(false),
_parent(0),
_drawable(drawable),
_projection(projection),
_modelview(modelview),
_depth(depth),
_traversalOrderNumber(traversalOrderNumber)
{
_dynamic = (drawable->getDataVariance()==osg::Object::DYNAMIC);
}
2、在渲染時從renderleaf中取出drawable進行繪製,此時會用到頂點着色器,對頂點位置進行設置,對高程進行設置的着色器代碼爲RexEngine.Elevation.glsl(它裏面調用了RexEngine.SDK.vert.glsl的函數)
osgEarthDrivers/engine_rex/LayerDrawable.cpp
void
LayerDrawable::drawImplementation(osg::RenderInfo& ri) const
{
for (DrawTileCommands::const_iterator tile = _tiles.begin(); tile != _tiles.end(); ++tile)
{
tile->draw(ri, *_drawState, 0L);
}
}
osgEarthDrivers/engine_rex/DrawTileCommand.cpp
void
DrawTileCommand::draw(osg::RenderInfo& ri, DrawState& dsMaster, osg::Referenced* layerData) const
{
_geom->render(ptype, ri);
}
osgEarthDrivers/engine_rex/GeometryPool.cpp
void SharedGeometry::render(GLenum primitiveType, osg::RenderInfo& renderInfo) const
{
//調用opengl進行繪製,並進入圖形管線
glDrawElements(primitiveType, _drawElements->getNumIndices(), _drawElements->getDataType(), (const GLvoid *)(ebo->getOffset(_drawElements->getBufferIndex())));
}
待繼續分析列表:
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<ElevationPool> _elevationPool((三十)中問題)
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、如何從高程影像變成高程網格((七十一)中問題)