osg中的 Uniforms主要存在两个地方,一个是SceneView中,void SceneView::updateUniforms()

void SceneView::updateUniforms()
{if (!_localStateSet){_localStateSet = new osg::StateSet;}if (!_localStateSet) return;if ((_activeUniforms & FRAME_NUMBER_UNIFORM) && _frameStamp.valid()){osg::Uniform* uniform = _localStateSet->getOrCreateUniform("osg_FrameNumber",osg::Uniform::UNSIGNED_INT);uniform->set(_frameStamp->getFrameNumber());}if ((_activeUniforms & FRAME_TIME_UNIFORM) && _frameStamp.valid()){osg::Uniform* uniform = _localStateSet->getOrCreateUniform("osg_FrameTime",osg::Uniform::FLOAT);uniform->set(static_cast<float>(_frameStamp->getReferenceTime()));}if ((_activeUniforms & DELTA_FRAME_TIME_UNIFORM) && _frameStamp.valid()){float delta_frame_time = (_previousFrameTime != 0.0) ? static_cast<float>(_frameStamp->getReferenceTime()-_previousFrameTime) : 0.0f;_previousFrameTime = _frameStamp->getReferenceTime();osg::Uniform* uniform = _localStateSet->getOrCreateUniform("osg_DeltaFrameTime",osg::Uniform::FLOAT);uniform->set(delta_frame_time);}if ((_activeUniforms & SIMULATION_TIME_UNIFORM) && _frameStamp.valid()){osg::Uniform* uniform = _localStateSet->getOrCreateUniform("osg_SimulationTime",osg::Uniform::FLOAT);uniform->set(static_cast<float>(_frameStamp->getSimulationTime()));}if ((_activeUniforms & DELTA_SIMULATION_TIME_UNIFORM) && _frameStamp.valid()){float delta_simulation_time = (_previousSimulationTime != 0.0) ? static_cast<float>(_frameStamp->getSimulationTime()-_previousSimulationTime) : 0.0f;_previousSimulationTime = _frameStamp->getSimulationTime();osg::Uniform* uniform = _localStateSet->getOrCreateUniform("osg_DeltaSimulationTime",osg::Uniform::FLOAT);uniform->set(delta_simulation_time);}if (_activeUniforms & VIEW_MATRIX_UNIFORM){osg::Uniform* uniform = _localStateSet->getOrCreateUniform("osg_ViewMatrix",osg::Uniform::FLOAT_MAT4);uniform->set(getViewMatrix());}if (_activeUniforms & VIEW_MATRIX_INVERSE_UNIFORM){osg::Uniform* uniform = _localStateSet->getOrCreateUniform("osg_ViewMatrixInverse",osg::Uniform::FLOAT_MAT4);uniform->set(osg::Matrix::inverse(getViewMatrix()));}}

不过默认的是: DEFAULT_UNIFORMS

       enum ActiveUniforms{FRAME_NUMBER_UNIFORM            = 1,FRAME_TIME_UNIFORM              = 2,DELTA_FRAME_TIME_UNIFORM        = 4,SIMULATION_TIME_UNIFORM         = 8,DELTA_SIMULATION_TIME_UNIFORM   = 16,VIEW_MATRIX_UNIFORM             = 32,VIEW_MATRIX_INVERSE_UNIFORM     = 64,DEFAULT_UNIFORMS                = FRAME_NUMBER_UNIFORM |FRAME_TIME_UNIFORM |DELTA_FRAME_TIME_UNIFORM |SIMULATION_TIME_UNIFORM |DELTA_SIMULATION_TIME_UNIFORM |VIEW_MATRIX_UNIFORM |VIEW_MATRIX_INVERSE_UNIFORM,ALL_UNIFORMS                    = 0x7FFFFFFF};

另一个是在osg::State中,

    _modelViewMatrixUniform = new Uniform(Uniform::FLOAT_MAT4,"osg_ModelViewMatrix");_projectionMatrixUniform = new Uniform(Uniform::FLOAT_MAT4,"osg_ProjectionMatrix");_modelViewProjectionMatrixUniform = new Uniform(Uniform::FLOAT_MAT4,"osg_ModelViewProjectionMatrix");_normalMatrixUniform = new Uniform(Uniform::FLOAT_MAT3,"osg_NormalMatrix");

要使用这些Uniforms,需要:

viewer->realize();osg::State* state = viewer->getCamera()->getGraphicsContext()->getState();state->setUseModelViewAndProjectionUniforms(true);

												

OSG中uniform变量相关推荐

  1. osg中运用Shader(osg初级篇2)

    关于shader的概念,可以参见我的另一篇博客<opengl版本发展史及各种概念的厘清>,这里列举一个例子,用来实现一个特效,屏幕的左半部显示为红色.首先我们准备好两个shader程序: ...

  2. OSG 中 常用的 Uniforms

    osg中的 Uniforms主要存在两个地方,一个是SceneView中,void SceneView::updateUniforms() void SceneView::updateUniforms ...

  3. Uniforms(uniform变量)

    周一到周五,每天一篇,北京时间早上7点准时更新~ Although not really a form of storage, uniforms are an important way to get ...

  4. osg中NDC坐标转换为世界坐标

    目录 1.前言 2.原理 3.实现 1.前言 使用射线投掷法(Ray-casting)在三维场景中拾取物体时,我们会从观察点,即眼睛所在位置向场景中发射一条射线,射线的方向通常由"鼠标&qu ...

  5. GLSL中Uniform块

    Uniform块 当着色器程序变复杂时,用到的uniform变量数量也会上升.通常会在多个着色器程序中用到同一个uniform变量.由于uniform变量的位置是着色器链接的时候产生的(也就是glLi ...

  6. WebGL入门(四)-在JavaScript程序通过uniform变量向片元着色器传值

    在JavaScript程序通过uniform变量向片元着色器传值 1.demo效果 2.相关知识点 2.1 片元着色器中的uniform变量 2.2 gl.getUniformLocation()方法 ...

  7. WebGL编程指南03-在javaScript程序通过uniform变量向片元着色器传值

    1.demo效果 如上图,这个demo实现在黑色区域内点用鼠标点击,会在不同的区域画出不同颜色的小方块,第一象限的画红色方块,第三象限画绿色方块,第二.四象限画蓝色方块. 2 片元着色器的unifor ...

  8. OSG中的几何体绘制(一)

    任何复杂的东西都是由一些简单部分组合构成的,对于OSG创建的场景和对象也同样如此,它们是由简单的图元(我们把构成3D对象的构件成为图元)按照一定的方式排列和组合而成的,OSG中的所有图元都是一维或二维 ...

  9. html img调用js,html调用js变量 如何在html中输出js文件中的变量

    html页面代码中怎么调用js变量?html页面代码中怎么调用js变量,例如 在html代码中插入js代码: a=取浏览你把index1.js 中的onReady 去掉,把index1.js改成 fu ...

最新文章

  1. PowerPoint动画制作时的需要注意的N个事项
  2. SPOJ 1812 LCS2 - Longest Common Substring II (后缀自动机、状压DP)
  3. 简单话题:LED呼吸灯和串口LED指示灯
  4. linux7.0安装oracle乱码,Oracle Linux 7设置中文字符集
  5. 【Kafka】kafka NotLeaderForPartitionException thisserver is not the leader for topic-partition
  6. ctrl+下箭头无法到最底端_设计院10年精选,最常用的CAD命令,绘图牛人都在用...
  7. [bzoj1969] [Ahoi2005]LANE 航线规划
  8. 云服务器带外管理-从IPMI到RedFish
  9. scipy安装_4. Python--Scipy库(下/13-17)
  10. 通信电子电路multisim仿真(1)---单调谐放大器
  11. 手机扫码枪app,二维码识别,二维码信息自动推送至电脑的(Excel,软件,记事本)等位置。
  12. VS code安装GitLens提示GitLenswas unable to find Git. Please make sure Git is installed...报错
  13. 牛客网刷题记录(3)组合逻辑
  14. Backtrader(二十三)- 多股票回测
  15. 强烈推荐一个上网以来见过的最好的学习资料网站,全部免费!
  16. 微信小程序上传Excel文件并分析上传值数据库
  17. Spring 通过 @Lazy 注解解决构造方法循环依赖问题
  18. 谈NAND Flash的底层结构和解析
  19. weblogic令人头秃问题解决方案
  20. Java入门的第一课

热门文章

  1. 如何更有效地发现用户痛点?
  2. 2020.3.13 美国数学大联盟杯赛复赛成绩出来了
  3. Nwafu-OJ-1410 Problem I C语言实习题二——4.判断是否能构成一个三角形
  4. StackOverflow上87万访问量的问题:什么是“找不到符号”?
  5. MATLAB-随机森林实现数据回归分析预测
  6. python编写一个函数判断一个数是否为素数是则返回yes_编写函数,判断一个整数是否为素数,并编写主程序调用该函数。_学小易找答案...
  7. 华为手机wifi不显示连接到服务器,华为手机无线网已经连接但不能用怎么办
  8. arttemplate入门
  9. 世界上最好的图片无损压缩软件
  10. 安装部署ubuntu18