OSG系统的学习
環(huán)境變量
OSG_GL_ERROR_CHECKING=ON/OFF開(kāi)啟或關(guān)閉OpenGL錯(cuò)誤檢查
OSG_FILE_PATH=<dir>OSG數(shù)據(jù)目錄
OSG_NOTIFY_LEVEL=ALWAYS/FATAL/WARN/NOTICE/DEBUG_INFO/DEBUG_FP/DEBUG/INFO日志輸出級(jí)別
OSG_DEFAULT_BIN_SORT_MODE=SORT_BY_STATE/SORT_BY_STATE_THEN_FRONT_TO_BACK/SORT_FRONT_TO_BACK/SORT_BACK_TO_FRONT/TRAVERSAL_ORDERRenderBin默認(rèn)實(shí)現(xiàn)
名詞理解
- Windowing System 窗口系統(tǒng):Linux下的X11等
- Graphics Context 圖形上下文:描述一個(gè)繪圖區(qū)域(或窗口)上下文
- Window 窗口,窗口系統(tǒng)中的一個(gè)窗口
- Scene 場(chǎng)景
類(lèi)型
- osg::Referenced 負(fù)責(zé)內(nèi)存安全策略(同侵入式shared_ptr)
- osg::Object 負(fù)責(zé)對(duì)象安全策略,如IO操作、復(fù)制操作
- osg::State OpenGL狀態(tài)機(jī)
- osg::Camera 相機(jī)
- osg::View 負(fù)責(zé)狀態(tài)與相機(jī)
- osgViewer::ViewerBase 負(fù)責(zé)渲染線程
- osgViewer::View 負(fù)責(zé)場(chǎng)景的數(shù)據(jù)加載和事件處理
- osgGA::GUIActionAdapter 負(fù)責(zé)與操作系統(tǒng)UI的交互
分頁(yè)管理
相機(jī)
注意:相機(jī)擁有繼承邏輯,相機(jī)在嵌套時(shí),有些邏輯需要注意,比如ClearMask
- osg::CullSettings::getInheritanceMask
- osg::CullSettings::getInheritanceMaskActionOnAttributeSetting
- osg::Camera::setClearMask …
- osg::Camera::applyMaskAction
注意:相機(jī)不能擁有多個(gè)父親
- osgUtil::CullVisitor::apply
- osgUtil::RenderStageCache::getRenderStage
HUD(head up display)相機(jī)
RTT(render to texture)相機(jī)
創(chuàng)建RTT相機(jī)
著色器
啟用osg矩陣、啟用osg頂點(diǎn)屬性綁定
- osg::GraphicsContext::getState
- osg::State::setUseModelViewAndProjectionUniforms
- osg::State::getUseVertexAttributeAliasing
默認(rèn)屬性綁定
location(默認(rèn))?? ?var(osg user use)?? ?replace(auto)
osg_FrameNumber?? ?
osg_FrameTime?? ?
osg_DeltaFrameTime?? ?
osg_SimulationTime?? ?
osg_DeltaSimulationTime?? ?
osg_ViewMatrix?? ?
osg_ViewMatrixInverse?? ?
ftransform()?? ?gl_ModelViewProjectionMatrix * gl_Vertex
gl_ModelViewMatrix?? ?osg_ModelViewMatrix
gl_ModelViewProjectionMatrix?? ?osg_ModelViewProjectionMatrix
gl_ProjectionMatrix?? ?osg_ProjectionMatrix
gl_NormalMatrix?? ?osg_NormalMatrix
0?? ?gl_Vertex?? ?osg_Vertex
1?? ?gl_Normal?? ?osg_Normal
2?? ?gl_Color?? ?osg_Color
3?? ?gl_MultiTexCoord0?? ?osg_MultiTexCoord0
4?? ?gl_MultiTexCoord1?? ?osg_MultiTexCoord1
5?? ?gl_MultiTexCoord2?? ?osg_MultiTexCoord2
6?? ?gl_MultiTexCoord3?? ?osg_MultiTexCoord3
7?? ?gl_MultiTexCoord4?? ?osg_MultiTexCoord4
8?? ?gl_MultiTexCoord5?? ?osg_MultiTexCoord5
9?? ?gl_MultiTexCoord6?? ?osg_MultiTexCoord6
10?? ?gl_MultiTexCoord7?? ?osg_MultiTexCoord7
11?? ?gl_SecondaryColor?? ?osg_SecondaryColor
12?? ?gl_FogCoord?? ?osg_FogCoord
StateSet
RenderBinDetail
RenderBin::addRenderBinPrototype 可以添加自定義的
RenderBin::setDefaultRenderBinSortMode 設(shè)置默認(rèn)
RenderBin
DepthSortedBin
RenderingHint
DEFAULT_BIN INHERIT_RENDERBIN_DETAILS 0 “”
OPAQUE_BIN USE_RENDERBIN_DETAILS 0 “RenderBIn”
TRANSPARENT_BIN USE_RENDERBIN_DETAILS 10 “DepthSortedBin”
RenderBinMode
OVERRIDE_RENDERBIN_DETAILS
紋理格式
注意
osg默認(rèn)會(huì)對(duì)讀取的Image進(jìn)行縮放(長(zhǎng)寬為2的次冪),底層(3.4)使用了gluScaleImage,它同時(shí)會(huì)對(duì)數(shù)據(jù)進(jìn)行歸一化這里提到。禁止這種行為:osg::Texture::setResizeNonPowerOfTwoHint
osg的裁剪設(shè)置默認(rèn)不包括遠(yuǎn)近裁剪面osg::CullSettings::DEFAULT_CULLING
- StateGraph狀態(tài)圖
- 根據(jù)StateSet Instance 產(chǎn)生
- RenderStage渲染臺(tái)
- 隨相機(jī)生成
- RenderBin渲染柜
- 根據(jù)StateSet Instance 和其 BinNumber 生成
- 其他
- osg的矩陣是列優(yōu)先存儲(chǔ)的,但乘法是按行優(yōu)先的邏輯 - -!
- GL_TEXTURE_CUBE_MAP_SEAMLESS 立方紋理邊界優(yōu)化
問(wèn)題
為什么camera near far 不起作用?
存在自動(dòng)計(jì)算機(jī)制。禁止這種行為:osg::Camera::setComputeNearFarMode
為什么子相機(jī)接受了Viewport resize事件
附屬相機(jī)(slave)會(huì)接受resize事件。
TextureBuffer使用時(shí)的invalid enumerant
使用osg::StateSet::setTextureAttribute而不是osg::StateSet::setTextureAttributeAndModes
粒子
動(dòng)畫(huà)
————————————————
版權(quán)聲明:本文為CSDN博主「chudonghao」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請(qǐng)附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/qq_24654009/article/details/105129701
總結(jié)
- 上一篇: 猜水果系统
- 下一篇: 【Code Pratice】—— 第几天