OSG中的示例程序簡介

轉載自:http://www.cnblogs.com/indif/archive/2011/05/13/2045136.html

OSG中的示例程序簡介




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
場景分析?
發佈了3 篇原創文章 · 獲贊 8 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章