Osg-OsgShader着色器(Qt5.14.2+osgE3.6.5+win10)-No17-OsgShader
win10 着色器 OSG
2023-09-14 08:57:11 时间
无着色器
有着色器
相关资料:
http://t.zoukankan.com/airduce-p-10032442.html 原文
实例代码:
myFrag.frag
1 uniform sampler2D texUnit0; 2 3 void main(){ 4 //texUnit0由外面调用程序传进来,gl_TexCoord[]输入纹理坐标数组;这句话的意思 从纹理采样器texUnit0中取得纹理坐标对应的纹理像素值。 5 vec4 color = texture2D(texUnit0,gl_TexCoord[0].xy); 6 7 //简单的将这三个颜色值相加。 8 float gcolor = color.r+color.g+color.b; 9 //灰度值输出(gl_FragColor是每个片元着色器必须设置的输出) 10 gl_FragColor = vec4(gcolor,gcolor,gcolor,color.a); 11 }
.pro
1 QT += core gui widgets 2 TARGET = TestOsgQt 3 TEMPLATE = app 4 DEFINES += QT_DEPRECATED_WARNINGS 5 CONFIG += c++11 6 7 QMAKE_CXXFLAGS_RELEASE = $$QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO 8 QMAKE_LFLAGS_RELEASE = $$QMAKE_LFLAGS_RELEASE_WITH_DEBUGINFO 9 10 SOURCES += \ 11 main.cpp 12 13 HEADERS += 14 15 OsgDir = D:\\Gitee\\osg365R 16 CONFIG(release, debug|release) { 17 LIBS += -L$${OsgDir}/lib/ -losgDB -losgViewer -lOpenThreads -losgAnimation -losg \ 18 -losgEarth -losgEarthAnnotation -losgEarthFeatures -losgEarthSymbology -losgEarthUtil \ 19 -losgQOpenGL -losgUtil -losgText -losgTerrain -losgSim \ 20 -losgShadow -losgParticle -losgManipulator -losgGA -losgFX \ 21 -losgWidget 22 } else { 23 LIBS += -L$${OsgDir}/debug/lib/ -losgDBd -losgViewerd -lOpenThreadsd -losgAnimationd -losgd \ 24 -losgEarthd -losgEarthAnnotationd -losgEarthFeaturesd -losgEarthSymbologyd -losgEarthUtild \ 25 -losgQOpenGLd -losgUtild -losgTextd -losgTerraind -losgSimd \ 26 -losgShadowd -losgParticled -losgManipulatord -losgGAd -losgFXd \ 27 } 28 29 30 INCLUDEPATH += $${OsgDir}/include 31 DEPENDPATH += $${OsgDir}/include
main.cpp
1 #include <osgViewer/Viewer> 2 3 #include <osg/Node> 4 #include <osg/Geode> 5 #include <osg/Group> 6 #include <osg/ShapeDrawable> 7 8 #include <osgDB/ReadFile> 9 #include <osgDB/WriteFile> 10 11 #include <osgUtil/Optimizer> 12 13 //绘制多个预定义的几何体 14 osg::ref_ptr<osg::Geode> createShape() 15 { 16 //创建一个叶节点 17 osg::ref_ptr<osg::Geode> geode = new osg::Geode(); 18 19 //设置半径和高度 20 float radius = 0.8f; 21 float height = 1.0f; 22 23 //创建精细度对象,精细度越高,细分就越多 24 osg::ref_ptr<osg::TessellationHints> hints = new osg::TessellationHints; 25 //设置精细度为0.5f 26 hints->setDetailRatio(0.5f); 27 28 //添加一个球体,第一个参数是预定义几何体对象,第二个是精细度,默认为0 29 geode->addDrawable(new osg::ShapeDrawable(new osg::Sphere(osg::Vec3(0.0f,0.0f,0.0f),radius),hints.get())); 30 //添加一个正方体 31 geode->addDrawable(new osg::ShapeDrawable(new osg::Box(osg::Vec3(2.0f,0.0f,0.0f),2*radius),hints.get())); 32 33 return geode.get() ; 34 } 35 36 int main() 37 { 38 //创建Viewer对象,场景浏览器 39 osg::ref_ptr<osgViewer::Viewer> viewer = new osgViewer::Viewer(); 40 41 osg::ref_ptr<osg::Group> root = new osg::Group(); 42 43 //添加到场景 44 osg::ref_ptr<osg::Group> myGroup = new osg::Group; 45 myGroup->addChild(createShape()); 46 myGroup->getOrCreateStateSet()->setTextureAttribute( 0,new osg::Texture2D(osgDB::readImageFile("D:/Gitee/OsgEarthTestQt/bin/osgWidget/J20.jpg"))); 47 myGroup->getOrCreateStateSet()->setTextureMode(0,GL_TEXTURE_2D,osg::StateAttribute::ON); 48 49 /************************使用片元着色器************************************/ 50 osg::ref_ptr<osg::StateSet> ss = myGroup->getOrCreateStateSet(); 51 52 //new一个属性类,用于添加属性, 53 osg::ref_ptr<osg::Program> texProgram = new osg::Program; 54 55 //new一个片元着色器 56 osg::ref_ptr<osg::Shader> texFragObj = new osg::Shader(osg::Shader::FRAGMENT); 57 58 texFragObj->loadShaderSourceFromFile("D:/Gitee/OsgEarthTestQt/bin/osgWidget/myFrag.frag"); 59 texProgram->addShader(texFragObj); 60 61 //传参 形参是texUnit0 0作为实参 62 osg::ref_ptr<osg::Uniform> texUniform = new osg::Uniform("texUnit0",0); 63 64 ss->setAttributeAndModes(texProgram); 65 ss->addUniform(texUniform); 66 67 root->addChild(myGroup.get()); 68 /************************使用片元着色器************************************/ 69 //优化场景数据 70 osgUtil::Optimizer optimizer ; 71 optimizer.optimize(root.get()) ; 72 73 viewer->setSceneData(root.get()); 74 viewer->setUpViewInWindow(20,20,600,600); 75 76 viewer->realize(); 77 78 viewer->run(); 79 80 return 0 ; 81 }
相关文章
- win10键盘全部没反应_Win10的键盘失灵解决办法
- Mac使用Boot Camp安装win10(不用U盘)
- 最新彻底禁止win10自动更新[通俗易懂]
- win10怎么更新显卡驱动_win10系统AMD显卡驱动安装失败的解决方法
- Win10安装程序修复计算机,directx修复工具win10最新版
- 笔记本windows10连接wifi显示无internet_win10连接wifi显示无internet
- Win10 专业版命令行激活
- HP电脑win10系统蓝牙不可用解决办法实例[通俗易懂]
- win10桌面的图标变成了白色_win7桌面图标白色方块
- 如何打开.ziw格式文件?(附赠)win10将程序右键加到“发送到”
- Win10家庭版使用远程桌面连接失败
- RK1126从入门到放弃:番外篇(二)Win10 WSL系统下编译buildroot报错不支持SYSV IPC,导致fakeroot无法正常工作
- win10 wlan开关打不开
- 安装MySQL在Win10上快速又安全(win10安装mysql)
- 微软发布Win10 Build 21354 ISO镜像
- 微软在最新Win10 Insider构建中为创意应用加入HDR支持
- Win11新版本发布 已禁用注册表方式恢复Win10开始菜单
- Linux安装Win10:一步一步走!(linux安装win10)
- 子系统成功开启:Win10的Linux子系统之旅(win10使用linux)
- 比较Linux和Win10:信息时代的两个主流系统(linux和win10)
- 在Win10中安装Oracle数据库(win10安装oracle)
- 如何在Win10中启动MySQL?(win10启动mysql)
- Win10上安装Linux,一步步实现跨平台互通(win10安装linux)
- Win10中配置MSSQL步骤指南(win10配置mssql)
- 安装在Win10系统中安装Linux,一路畅通无阻(win10下linux)
- Win10环境下轻松链接Redis(win10链接redis)
- Win10下编译配置Redis(win10编译redis)
- Win10环境下测试Redis功能(win10测试redis)
- Win10快速安装Redis,拥有更强大体验(win10下载redis)
- 快速实现Redis连接Win10系统(redis连接win10)