1. 程式人生 > >OSG 各個Example介紹

OSG 各個Example介紹

自己寫了一半,發現多是廢話,還是人家的好。

1.example_osganimate

一)演示了路徑動畫的使用(AnimationPath、AnimationPathCallback),路徑動畫回撥可以作用在Camera、CameraView、MatrixTransform、PositionAttitudeTransform等四種類型的節點上。 二)演示了osgSim::OverlayNode的使用

2.example_osganimationeasemotion 一)演示了osgAnimation::EaseMotion的使用,EaseMotion可以用於表達位移、速度值隨時間的變化情況,通過不同的模板引數(functor),實現了不同的變化曲線。 二)程式中用到了一個使用osgWidget構造的彈出式選單。

3.example_osganimationhardware 一)演示了在osgAnimation::RigGeometry中使用自定義RigTransformImplementation的方法。 二)可以參考程式中獲取骨骼動畫模型包含的動畫列表的方法。

4.example_osganimationmakepath 一)演示了osgAnimation::Sampler取樣器的使用,更新物體顏色(vec4)、物體位置(vec3)。Sampler派生模板類用於在一組已知離散資料樣本的基礎上,進行插值計算,得到連續資料。通過模板引數支援多種插值方法。 二)在更新物體位置這方面,與路徑動畫AnimationPath類似,但它需要自己寫回調來更新節點矩陣,好處是能夠使用更靈活的方式來進行資料取樣,而AnimationPath只能進行線性內插。

5.example_osganimationmorph 一)演示了利用osgAnimation::MorphGeometry實現幾何體變形動畫的方法。

6.example_osganimationnode 一)同osganimationmakepath演示的功能基本相同。

7.example_osganimationskinning 一)演示了使用osgAnimation::Skeleton、osgAnimation::Bone構建骨骼,使用osgAnimation::Animation、osgAnimation::Channel構建動畫,使用osgAnimation::RigGeometry構建蒙皮,以及使用osgAnimation::BasicAnimationManager播放骨骼動畫的流程。可以做為學習osgAnimation骨骼動畫實現結構的參考。

8.example_osganimationsolid 一)演示了利用多個Channel對一個物體進行運動控制(最終落實到更新MT節點的矩陣)。與示例osganimationmakepath的區別在於,這裡使用了osgAnimation::Channel、osgAnimation::Animation、osgAnimation::UpdateMatrixTransform,對同一個物體應用了多個運動控制的疊加。

9.example_osganimationtimeline 一)演示了osgAnimation中的時間線控制。osgAnimation::Timeline、osgAnimation::TimelineAnimationManager。timeline是做什麼用的。

10.example_osganimationviewer 一)演示了osgAnimation骨骼動畫的載入及播放控制,可以在多個動作間切換,但播放多個動作、動作暫停等方面似乎不好使。 二)程式中出現了一個使用osgWidget構建的播放控制GUI,還有一個可以滑入滑出的選單,可以作為GUI構建的參考。

11.example_osgautocapture 一)一個自動截圖的示例程式,用到了自定義osgViewer::Renderer,osg::Camera::DrawCallback等。 二)裡面有一段用經緯高和方向角定位相機的程式碼。

12.example_osgautotransform 一)演示了利用osg::AutoTransform實現自動的縮放、旋轉,從而達到按指定的效果自動面向螢幕。

13.example_osgbillboard 一)演示了osg::Billboard的使用。與AutoTransform的區別在哪裡。

14.example_osgblendequation 一)演示了osg::BlendEquation的不同配置對於渲染結果的影響。

15.example_osgcallback 一)演示了OSG中各種回撥方法的使用。

16.example_osgcamera 一)演示了單視窗多相機(使用SlaveCamera)、多視窗多相機(一個Viewer,多個GraphicsContext,多個Camera作為Slave新增到viewer下)、多螢幕多視窗。

17.example_osgcatch 一)一個類似接蛋遊戲的小遊戲程式

18.example_osgclip 一)演示了osg::ClipNode(osg::ClipPlane)的使用。

19.example_osgcluster 一)多機同步的演示

20.example_osgcompositeviewer 一)演示了osgViewer::CompositeViewer的使用

21.example_osgcopy 一)演示了osg中clone操作的使用,以及osg::CopyOp的自定義用法。

22.example_osgcubemap 一)演示如何使用高光貼圖增強模型顯示效果。高光貼圖使用的立方體貼圖(osg::TextureCubeMap),高光CubeMap使用osgUtil::HighlightMapGenerator自動生成。使用osg::TexGen以反射貼圖的方式自動生成紋理座標。並用osg::TexEnvCombine將高光貼圖與原始顏色混合(ADD)。 osgUtil::HighlightMapGenerator派生自osgUtil::CubeMapGenerator,還有其他一些用途的立方體貼圖生成器。

23.example_osgdatabaserevisions 一)演示了分頁資料庫本地快取及資料版本檢查的使用。

24.example_osgdelaunay 一)演示了DelaunayTriangulator的使用,用於對不規則網格點進行三角化處理。

25.example_osgdepthpartition 一)實現了一個派生自osg::Group的DepthPartitionNode節點型別,它可以自動對子節點樹按照深度值進行劃分,用於解決大場景下深度緩衝的問題。

26.example_osgdepthpeeling DepthPeeling

27.example_osgdistortion 一)演示了類似哈哈鏡的效果

28.example_osgdrawinstanced 一)演示了利用DrawArraysInstanced將一個四邊形面片渲染成若干小面片的方法。

29.example_osgfadetext 一)演示了osgText::FadeText的使用,並使用osg::ClusterCullingCallback實現文字的聚集剪裁(根據指定法線與視線對物體進行剪裁)。FadeText封裝了自動淡入淡出和自動進行互相間的遮擋技術的功能。

30.example_osgfont 一)演示了字型的使用

31.example_osgforest 一)演示了用多種技術方法實現森林的效果。首先對整個森林的所有樹木做分塊處理(cell),然後按照分塊結構,使用多種方式進行建模。對樹的建模使用的方法包括:Billboard、Shader、十字面片等。

32.example_osgfpdepth 一)演示了使用深度緩衝相關的應用。floating point depth buffer? invert the depth buffer?

33.example_osgfxbrowser 一)演示了使用osgFX建立的幾種特殊渲染效果,使用osgFX::Effect管理各種效果。包括的效果有:AnisotropicLighting、BumpMapping、Cartoon、Outline、Scribe、SpecularHighlights。

34.example_osggameoflife 一)演示了一種叫做"Ping-Pong"的渲染技術,它是指利用FBO和兩張紋理物件,在著色程式中以一個紋理為輸入把計算結果寫入另一個紋理,然後反轉輸入輸出紋理再進行相同的操作,如此迭代。 二)其中用到的"GameOfLife"是使用Ping-Pong處理圖片並輸出的一個示例。

35.example_osggeodemo 一)演示了.geo檔案的載入,以及geo模型的動畫更新。 二)GEO PRO是CarbonGraphics出品的一個建模工具,.geo檔案是它的模型檔案格式。

36.example_osggeometry 一)演示了osg::Geometry(幾何體)的各種構造方法。

37.example_osggeometryshades 一)演示瞭如何利用GeometryShader程式動態改變幾何體的繪製,示例中把一個點繪製成不斷變化的十字線。

38.example_osggpx 一)演示了一個跟蹤路徑的資料結構,以及使用osgDB::XmlParser對它的讀寫。

39.example_osggraphicscost 一)演示了osg::GraphicsCostEstimator的使用,osg::GraphicsCostEstimator用來評估編譯/繪製幾何體、紋理、著色程式、節點所需要的時間。

40.example_osghangglide 一)演示了使用程式構建場景的過程。 二)實現了一個滑行漫遊器。

41.example_osgimagesequence 一)演示了使用osg::ImageSequence作為紋理貼圖,並通過osg::ImageStream介面進行貼圖動畫播放控制的方法。ImageSequence貼圖的載入有多種控制方案。

42.example_osgimpostor 一)演示了osgSim::Impostor的使用。Impostor節點的作用似乎是,通過在一些情況下,把物體渲染結果儲存為紋理,而後通過渲染紋理代替渲染物體,以達到提高渲染效率的目的。 二)實現了一個自定義的漫遊器。

43.example_intersection 一)演示並對別了多種求交計算的方法,如osgSim::LineOfSight、osgSim::HeightAboveTerrain、osgSim::ElevationSlice、osgUtil::IntersectorGroup。

44.example_osgkdtree 一)演示了kdtreee的使用。OSG能夠在讀取模型檔案時自動構建kdtree。

45.example_keyboard 一)演示了鍵盤輸入訊息的處理。

46.example_keyboardmouse 一)演示了滑鼠、鍵盤訊息的處理。

47.example_osglauncher 一)一個三位的程式導航選單。為每個例子程式構造一個立方體物件,通過即時的求交計算判定當前選中的物件,從而關聯一個例子程式並啟動執行。

48.example_osglight 一)演示了光照的使用。

49.example_osglightpoint 一)演示了osgSim::LightPoint、osgSim::LightPointNode的使用。

50.example_osglogicop 一)演示了osg::LogicOp(glLogicOp)的使用。

51.example_osglogo 一)演示了logo的製作。

52.example_osgmanipulator 一)演示了osgManipulator中各種拖拽器(Dragger)的使用。

53.example_osgmemorytest 一)一些GL操作的測試。

54.example_osgmotionblur 一)演示瞭如何利用累積緩衝區(accumulation buffer)實現一個簡單的運動模糊(motion blur)效果。

55.example_osgmovie 一)演示了視訊播放的功能。需要使用視訊讀取外掛,如osgdb_quicktime、osgdb_ffmpg

56.example_osgmultiplerendertargets 一)演示瞭如何使用RTT(Render To Texture)、MRT(Multiple Render Targets)。

57.example_osgmultitexture 一)演示了多重紋理的使用。

58.example_osgmultitexturecontrol 一)演示了osgFX::MultiTextureControl的使用。

59.example_osgmultiviewpaging 一)多視口分屏的演示。

60.example_osgoccluder 一)演示了osg::ConvexPlanarOccluder的使用。

61.example_osgocclusionquery 一)演示了osg::OcclusionQueryNode的使用。

62.example_osgoit 一)depth peeling的使用。

63.example_osgoutline 一)演示了使用osgFX::Outline繪製物體外輪廓線的方法。

64.example_osgpackeddepthstencil 一)osg::Camera::PACKED_DEPTH_STENCIL_BUFFER的使用。

65.example_osgpagedlod 一)演示了利用osg::PagedLOD實現層次細節及流式載入。

66.example_osgparametric 一)演示了使用頂點著色程式(Vertex Shader Program)實現簡單的變形動畫。

67.example_osgparticle 一)幾個粒子效果的演示,並使用了自定義osgParticle::Operator的方法控制粒子運動。

68.example_osgparticleeffects 一)演示了osgParticle中幾個預定義Effect的效果,包括爆炸、爆炸碎片、煙、火等。

69.example_osgparticleshader 一)osgParticle實現的一個噴泉效果

70.example_osgpdf 使用osgWidget::PdfReader讀取並顯示pdf文件的例子,需要有相應外掛支援。

71.example_osgphotoalbum 一個3D相簿演示程式。實現了一種把多個圖片檔案合併到一個相簿檔案中的格式。

72.example_osgpick 通過求交計算進行拾取判斷的一個例子。

73.example_osgplanets 天體執行的一個示例程式,其中使用billboard為太陽製作了大氣層效果。

74.example_osgpoints 演示了使用點精靈(osg::PointSprite)繪製點,以及設定點大小。

75.example_osgpointsprite 使用點精靈繪(osg::PointSprite)制點雲的示例。

76.example_osgposter 演示了渲染大解析度圖片(high-resolution image)的方法。

77.example_osgprecipitation 演示了osgParticle::PrecipitationEffect實現的雨、雪效果。

78.example_osgprerender 演示了渲染到紋理(RTT)的使用。在PRE_RENDER時把場景渲染到紋理上,再使用這個紋理渲染主場景。

79.example_osgprerendercubemap 演示了使用立方體貼圖(osg::TextureCubeMap)實現環境反射的方法。

80.example_osgrefelect 演示了一個鏡面反射效果的實現。

81.example_osgrobot 演示了一個由矩陣節點樹構造成的多關節機器人。

82.example_osgscalarbar 演示了使用osgSim::ScalarBar實現的顏色標尺效果。

83.example_osgscreencapture 演示了利用osg::Camera::DrawCallback派生類實現截圖的方法。

84.example_osgscribe 在模型表面附加網格線的效果,利用osg::PolygonMode和osg::PolygonOffset實現,與osgSim::Scribe效果和原理一致。

85.example_osgsequence 演示了序列化播放多個模型的效果,利用osg::Sequence節點實現。

86.example_osgshadercomposition 演示了著色程式組合(ShaderComposition)的使用,用到osg::ShaderAttribute

87.example_shadergen 演示了利用osgUtil::ShaderGenVisitor生成替換固定功能管線的GLSL程式碼。

88.example_osgshaders 演示了Data\shaders目錄下幾個shader程式碼檔案的使用。

89.example_osgshaderterrain 一個在著色程式中通過紋理取樣計算地形高程來生成地形的示例。

90.example_osgshadow 包含多種實時陰影演算法實現的陰影效果演示程式。

91.example_osgshape 利用osg::ShapeDrawable構建常用幾何體的演示。

92.example_sharedarray 演示了以自定義資料結構構造幾何體的方法,派生osg::Array類。

93.example_osgsidebyside osgSim::MultiSwitch、osgSim::DOFTransform節點的控制。單視窗多視口的使用。

94.example_osgsimplifier 演示了使用osgUtil::Simplifier對模型進行簡化的方法。

95.example_osgsimulation 演示了節點跟蹤漫遊器(osgGA::NodeTrackerManipulator)的使用。

96.example_osgslice 應該是很老的一個示例,還在直接使用osgUtil::SceneView,沒有連結osgViewer庫,所以視窗GC呼叫失敗,不能執行。

97.example_osgspacewarp 使用一個小技巧實現點在相機運動情況下觀察變成線的效果(類似虛影的效果)。小技巧是,對於每個點,也繪製一條線,線的一個端點始終在點的當前位置上,另一個端點使用點在上一幀的位置。

98.example_osgspheresegment 使用osgSim::SphereSegment繪製弧面的例子。

99.example_osgspotlight 演示了聚光燈的使用。osg::LightSource

100.example_osgstereoimage 演示了生成立體圖片的方法。

101.example_osgstereomatch 左右眼影象立體匹配的示例,使用Data\images目錄下的狗的圖片執行。

102.example_osgteapot 使用osg::Drawable派生類封裝經典的glut_teapot的繪製。

103.example_osgterrain 動態控制地形引數的示例,使用osgTerrain::Terrain。

104.example_tessellate 演示了鑲嵌(tessellation)的使用,osgUtil::Tessellator。

105.example_osgtext 演示了文字的各種使用方式,osgText::Text。

106.example_osgtext3D 演示了立體文字的使用,osgText::Text3D。

107.example_osgtexture1D 演示了一維紋理的使用osg::Texture1D,紋理座標生成節點osg::TexGenNode。

108.example_osgtexture2D 演示了二維紋理的使用osg::Texture2D,並通過更新回撥演示了紋理在不同紋理過濾方式(filter)、紋理環繞模式(wrap)、各項異型係數(anisotropic)下的不同效果。

109.example_osgtexture3D 演示了三維紋理的使用osg::Texture3D。示例中用多張二維圖片組裝出一個三維紋理物件,在頂點資料中指定s、t兩個紋理座標,而使用osg::TexGen單獨生成紋理座標r(TexGen可以用來獨立的生成某一維的紋理座標),通過在更新回撥中更新TexGen的引數動態更新紋理座標r,由於紋理過濾方式使用的線性過濾,從而得到的效果是在多張紋理間平滑切換。

110.example_osgtexturecompression 演示了多種壓縮格式(InternelFormatMode)的對比效果。同時有多視口osgViewer::CompositeViewer的使用。

111.example_osgtexturerectangle 演示了矩形紋理osg::TextureRectangle的使用,矩形紋理的紋理座標範圍必須為圖片畫素範圍,並且環繞模式不支援重複,不支援邊框和mipmap。

112.example_osgthirdpersonview 使用osgViewer::CompositeViewer構建多視窗檢視,並在第二個視窗中繪製第一個視窗相同的場景的同時繪製出第一個視窗相機的視錐體。

113.example_osgthreadedterrain 一)使用增量編譯osgUtil::IncrementalCompileOperation,避免載入大模型時造成的幀率下降。 二)osgTerrain::Layer、osgTerrain::TerrainTile的使用。

114.example_osguniformbuffer 演示了osg::UniformBufferObject的使用。

115.example_osgunittests 單元測試程式碼。

116.example_osguserstats 演示瞭如何在OSG的統計資訊顯示介面中顯示使用者自定義的統計資訊。

117.example_osgvertexattributes 演示了在著色程式中使用頂點屬性(VertexAttribute)。

118.example_osgvertexprogram 使用立方體貼圖(CubeMap)和頂點著色程式(VertexShader)實現環境反射的例子,同時提供了一個天空盒的實現。

119.example_osgviewerGLUT OSG與GLUT視窗系統的結合。

120.example_osgviewerMFC OSG與MFC的結合。

121.example_osgvirtualprogram 著色程式的使用。

122.example_osgvolume 三維紋理和體渲染的示例。

123.example_osgwidgetaddremove osgWidget動態新增和刪除Widget的示例,有滑鼠事件的自定義處理。

124.example_osgwidgetbox osgWidget::Box的使用,以及拖拽處理。

125.example_osgwidgetcanvas osgWidget::Canvas的使用。

126.example_osgwidgetframe osgWidget::Frame的使用,能夠拖動左右下及角上的邊框改變Widget大小,拖動上側的邊框移動Widget。

127.example_osgwidgetinput 接收文字輸入的osgWidget::Input的使用。

128.example_osgwidgetlabel 文字標籤osgWidget::Label的使用。

129.example_osgwidgetmenu 使用osgWidget構造選單的示例。

130.example_osgwidgetmessagebox 使用osgWidget::Frame、osgWidget::Box、osgWidget::Label等構建的MessageBox的示例。

131.example_osgwidgetnotebook 使用osgWidget構造的帶Tab的記事本。

132.example_osgwidgetperformance osgWidget效率測試。

133.example_osgwidgetscrolled 通過設定滑鼠滾輪訊息回撥處理函式處理滾輪訊息,實現osgWidget視窗的滾屏。

134.example_osgwidgetshader 對Widget使用著色程式渲染。

135.example_osgwidgetstyled osgWidget::Style的使用。

136.example_osgwidgettable 表格osgWidget::Table的使用。

137.example_osgwidgetwindow LUA指令碼的使用。

138.example_osgwindows 多視窗拼接的示例。

139.example_osganalysis 場景分析。