主要有两种方式,一种是使用高度纹理来模拟表面位移,然后得到要给修改后的法线值;一种是使用一张法线纹理来直接存储表面法线。 1.3 shader中使用纹理 要在shader中使用纹理,首先需要设置顶点的纹理坐标。osg::Geometry类中通过方法setTexCoordArray设置顶点纹理坐标数组。而osg预定义了一些几何体,如球、圆柱、胶囊体、圆锥体等,os
osg::ref_ptr<osg::Shader> fragShader=new osg::Shader(osg::Shader::FRAGMENT,fragCode); osg::ref_ptr<osg::Program> program=new osg::Program; program->addShader(vertShader); program->addShader(fragShader); camera->getOrCreateStateSet()->setAttributeAndModes(program,OVERRIDE_ON); returncamera...
osg_NormalMatrix:法线变换矩阵。 2. 内置shader变量的含义 osg_FrameNumber:表示当前渲染的帧数,可以用于实现基于时间的动画效果。 osg_FrameTime:表示从程序开始运行到当前帧所经过的总时间,以秒为单位。 osg_DeltaFrameTime:表示当前帧与前一帧之间的时间间隔,可以用于平滑过渡或动画控制。 osg_ViewMatrix、osg_Vie...
64 void createShaders( osg::StateSet& ss ) 65 { 66 osg::ref_ptr<osg::Shader> vertShader = new osg::Shader( osg::Shader::VERTEX, vertSource ); 67 osg::ref_ptr<osg::Shader> fragShader = new osg::Shader( osg::Shader::FRAGMENT, fragSource ); 68 69 osg::ref_ptr<osg::Program>...
此文实现一个简单的的水面效果,主要是法线贴图, 效果图如下: 此文分为三部分:vertexShader, fragmentShader, main; vertexShader: varying vec3 lightdir; //切线空间灯光向量; varying vec3 eyedir; //切线空间眼点向量; varying vec4 ambient, diffuse, specular; ...
new osg::Shader(osg::Shader::FRAGMENT)); // (1) shader->setShaderSource(TheShaderSource); // (1) osg::ref_ptr<osg::Program> program(new osg::Program()); // (2) program->addShader(shader); // (2) osg::ref_ptr<osg::StateSet> ss = loadedModel->getOrCreateStateSet(); ...
使用CTH数据是不能直接弄出三维效果的,有两个办法:一是在Fragment Shader(FS)中把CTH数据作为高程值,采用Sobel算子动态计算该像素的法线向量,这个技术我还没有深入研究过如何在一个FS计算中多次对纹理采样;二是在预处理阶段就将CTH数据生成Normal Map文件直接给osgEarth加载使用,这个相对简单,我采用这个方法。 2 ...
想要对模型进行日照模拟,就需要用到光照和阴影技术。注意此时模型上的部分阴影是纹理上自带的。 2. 光照 osgViewer的默认场景中是有灯光的,调整上述的场景的视角,某些地方是全黑的,而且场景效果偏暗。这里需要设置自己需要的环境反射和漫反射。 1) 环境反射 ...
OSG中的示例程序简介 OSG中的⽰例程序简介 1.example_osganimate ⼀)演⽰了路径动画的使⽤(AnimationPath、AnimationPathCallback),路径动画回调可以作⽤在Camera、CameraView、MatrixTransform、PositionAttitudeTransform等四种类型的节点上。⼆)演⽰了osgSim::OverlayNode的使⽤ 2.example_osganimationease...
osg通过glsl实现一个平面的水效果(法线贴图) 此文实现一个简单的的水面效果,主要是法线贴图, 效果图如下: 此文分为三部分:vertexShader, fragmentShader, main; vertexShader: varying vec3 lightdir; //切线空间灯光向量; varying vec3 eyedir; //切线空间眼点向量;...