OSG系统的学习

环境变量
OSG_GL_ERROR_CHECKING=ON/OFF开启或关闭OpenGL错误检查
OSG_FILE_PATH=<dir>OSG数据目录
OSG_NOTIFY_LEVEL=ALWAYS/FATAL/WARN/NOTICE/DEBUG_INFO/DEBUG_FP/DEBUG/INFO日志输出级别
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默认实现

名词理解

  • Windowing System 窗口系统:Linux下的X11等
  • Graphics Context 图形上下文:描述一个绘图区域(或窗口)上下文
  • Window 窗口,窗口系统中的一个窗口
  • Scene 场景

类型

  • osg::Referenced 负责内存安全策略(同侵入式shared_ptr)
  • osg::Object 负责对象安全策略,如IO操作、复制操作
  • osg::State OpenGL状态机
  • osg::Camera 相机
  • osg::View 负责状态与相机
  • osgViewer::ViewerBase 负责渲染线程
  • osgViewer::View 负责场景的数据加载和事件处理
  • osgGA::GUIActionAdapter 负责与操作系统UI的交互

分页管理
相机
注意:相机拥有继承逻辑,相机在嵌套时,有些逻辑需要注意,比如ClearMask

  • osg::CullSettings::getInheritanceMask
  • osg::CullSettings::getInheritanceMaskActionOnAttributeSetting
  • osg::Camera::setClearMask …
  • osg::Camera::applyMaskAction

注意:相机不能拥有多个父亲

  • osgUtil::CullVisitor::apply
  • osgUtil::RenderStageCache::getRenderStage

HUD(head up display)相机
RTT(render to texture)相机
创建RTT相机

着色器
启用osg矩阵、启用osg顶点属性绑定

  • osg::GraphicsContext::getState
  • osg::State::setUseModelViewAndProjectionUniforms
  • osg::State::getUseVertexAttributeAliasing

默认属性绑定
location(默认)    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 设置默认
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默认会对读取的Image进行缩放(长宽为2的次幂),底层(3.4)使用了gluScaleImage,它同时会对数据进行归一化这里提到。禁止这种行为:osg::Texture::setResizeNonPowerOfTwoHint

osg的裁剪设置默认不包括远近裁剪面osg::CullSettings::DEFAULT_CULLING

  • StateGraph状态图
  • 根据StateSet Instance 产生
  • RenderStage渲染台
  • 随相机生成
  • RenderBin渲染柜
  • 根据StateSet Instance 和其 BinNumber 生成
  • 其他
  • osg的矩阵是列优先存储的,但乘法是按行优先的逻辑 - -!
  • GL_TEXTURE_CUBE_MAP_SEAMLESS 立方纹理边界优化

问题
为什么camera near far 不起作用?
存在自动计算机制。禁止这种行为:osg::Camera::setComputeNearFarMode
为什么子相机接受了Viewport resize事件
附属相机(slave)会接受resize事件。
TextureBuffer使用时的invalid enumerant
使用osg::StateSet::setTextureAttribute而不是osg::StateSet::setTextureAttributeAndModes
粒子
动画
————————————————
版权声明:本文为CSDN博主「chudonghao」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_24654009/article/details/105129701

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值