当前位置: 首页 > news >正文

易经网站开发公司安徽休宁建设厅网站

易经网站开发公司,安徽休宁建设厅网站,制作wordpress主题,友情链接前面打印了各个级别的hdr环境贴图#xff0c;也能看到预过滤环境贴图#xff0c;现在进行打印各个级别的预过滤环境贴图。 运行结果如下 代码如下#xff1a; #include osg/TextureCubeMap #include osg/TexGen #include osg/TexEnvCombine #…前面打印了各个级别的hdr环境贴图也能看到预过滤环境贴图现在进行打印各个级别的预过滤环境贴图。 运行结果如下 代码如下 #include osg/TextureCubeMap #include osg/TexGen #include osg/TexEnvCombine #include osgUtil/ReflectionMapGenerator #include osgDB/ReadFile #include osgViewer/Viewer #include osg/NodeVisitor #include osg/ShapeDrawable #include osgGA/TrackballManipulator #include osgDB/WriteFile static const char * vertexShader { //“#version 120 core\n” “in vec3 aPos;\n” “varying vec3 localPos;\n” “void main(void)\n” “{\n” “localPos aPos;\n” gl_Position ftransform();\n //“gl_Position view * view * vec4(aPos,1.0);” “}\n” }; static const char psShader { “varying vec3 localPos;\n” “uniform samplerCube environmentMap;” “uniform float roughness;” “const float PI 3.1415926;” “float VanDerCorpus(uint n, uint base) “{ float invBase 1.0 / float(base); float denom 1.0; float result 0.0; for (uint i 0u; i 32u; i) { if (n 0u) { denom mod(float(n), 2.0); result denom * invBase; invBase invBase / 2.0; n uint(float(n) / 2.0); } } “return result; “} “vec2 HammersleyNoBitOps(uint i, uint N) “{ return vec2(float(i) / float(N), VanDerCorpus(i, 2u)); “} //“float RadicalInverse_Vdc(uint bits)\n” //”{” //“bits (bits 16u) | (bits 16u);” //“bits ((bits 0x55555555u) 1u ) | (bits 0xAAAAAAAAu) 1u);” //“bits ((bits 0x33333333u) 2u ) | (bits 0xCCCCCCCCu) 2u);” //“bits ((bits 0x0F0F0F0Fu) 4u ) | (bits 0xF0F0F0F0u) 4u);” //“bits ((bits 0x00FF00FFu) 8u ) | (bits 0xFF00FF00u) 8u);” //“return float(bits) * 2.3283064365386963e-10;” //”}” //“vec2 Hammersley(uint i, uint N)” //”{” //“return vec2(float(i) / float(N), RadicalInverse_Vdc(i));” //”} “vec3 ImportanceSampleGGX(vec2 Xi, vec3 N, float roughness)” “{” “float a roughness * roughness;” “float phi 2.0 * PI * Xi.x;” float cosTheta sqrt((1.0 - Xi.y)/(1.0(aa-1.0) * Xi.y)); “float sinTheta sqrt(1.0 - cosTheta * cosTheta);” “vec3 H;” “H.x cos(phi) * sinTheta;” “H.y sin(phi) * sinTheta;” “H.z cosTheta;” “vec3 up abs(N.z) 0.999 ? vec3(0.0,0.0,1.0) : vec3(1.0,0.0,0.0);” “vec3 tangent normalize(cross(up,N));” “vec3 bitangent cross(N,tangent);” “vec3 sampleVec tangent * H.x bitangent * H.y N * H.z;” “return normalize(sampleVec);” “}” void main() { vec3 N normalize(localPos); vec3 R N; vec3 V R; const uint SAMPLE_COUNT 1024u; float totalWeight 0.0; vec3 prefilteredColor vec3(0.0); for (uint i 0u; i SAMPLE_COUNT; i) { vec2 Xi HammersleyNoBitOps(i, SAMPLE_COUNT); vec3 H ImportanceSampleGGX(Xi, N, roughness); vec3 L normalize(2.0 * dot(V, H) * H - V); float NdotL max(dot(N, L), 0.0); if (NdotL 0.0) { prefilteredColor texture(environmentMap, L).rgb * NdotL; totalWeight NdotL; } } prefilteredColor prefilteredColor / totalWeight; gl_FragColor vec4(prefilteredColor, 1.0); } }; class MyNodeVisitor : public osg::NodeVisitor { public: MyNodeVisitor() : osg::NodeVisitor(osg::NodeVisitor::TRAVERSE_ALL_CHILDREN) { } void apply(osg::Geode geode) {int count geode.getNumDrawables();for (int i 0; i count; i){osg::ref_ptrosg::Geometry geometry geode.getDrawable(i)-asGeometry();if (!geometry.valid()){continue;}osg::Array* vertexArray geometry-getVertexArray();geometry-setVertexAttribArray(1, vertexArray);}traverse(geode); }}; osg::ref_ptrosg::TextureCubeMap getTextureCubeMap(osgViewer::Viewer viewer, int textureWidth, int textureHeight) { unsigned int screenWidth, screenHeight; osg::GraphicsContext::WindowingSystemInterface * wsInterface osg::GraphicsContext::getWindowingSystemInterface(); wsInterface-getScreenResolution(osg::GraphicsContext::ScreenIdentifier(0), screenWidth, screenHeight); osg::ref_ptrosg::GraphicsContext::Traits traits new osg::GraphicsContext::Traits; traits-x 0; traits-y 0; traits-width screenWidth; traits-height screenHeight; traits-windowDecoration false; traits-doubleBuffer true; traits-sharedContext 0; traits-readDISPLAY(); traits-setUndefinedScreenDetailsToDefaultScreen();osg::ref_ptrosg::GraphicsContext gc osg::GraphicsContext::createGraphicsContext(traits.get()); if (!gc) {osg::notify(osg::NOTICE) GraphicsWindow has not been created successfully. std::endl;return NULL; }osg::ref_ptrosg::TextureCubeMap texture new osg::TextureCubeMap;texture-setTextureSize(textureWidth, textureHeight); texture-setInternalFormat(GL_RGB); texture-setFilter(osg::Texture::MIN_FILTER, osg::Texture::LINEAR); texture-setFilter(osg::Texture::MAG_FILTER, osg::Texture::LINEAR); texture-setWrap(osg::Texture::WRAP_S, osg::Texture::CLAMP_TO_EDGE); texture-setWrap(osg::Texture::WRAP_T, osg::Texture::CLAMP_TO_EDGE); texture-setWrap(osg::Texture::WRAP_R, osg::Texture::CLAMP_TO_EDGE);osg::Camera::RenderTargetImplementation renderTargetImplementation osg::Camera::FRAME_BUFFER_OBJECT; // front face {osg::ref_ptrosg::Camera camera new osg::Camera;camera-setName(Front face camera);camera-setGraphicsContext(gc.get());camera-setViewport(new osg::Viewport(0, 0, textureWidth, textureHeight));camera-setAllowEventFocus(false);camera-setRenderTargetImplementation(renderTargetImplementation);camera-setRenderOrder(osg::Camera::PRE_RENDER);//关联采样贴图camera-attach(osg::Camera::COLOR_BUFFER, texture, 0, osg::TextureCubeMap::POSITIVE_Y);osg::ref_ptrosg::Image printImage new osg::Image;printImage-setFileName(camera-getName());printImage-allocateImage(textureWidth, textureHeight, 1, GL_RGBA, GL_UNSIGNED_BYTE);texture-setImage(0, printImage);camera-attach(osg::Camera::COLOR_BUFFER, printImage);viewer.addSlave(camera.get(), osg::Matrixd(), osg::Matrixd()); }// top face {osg::ref_ptrosg::Camera camera new osg::Camera;camera-setName(Top face camera);camera-setGraphicsContext(gc.get());camera-setViewport(new osg::Viewport(0, 0, textureWidth, textureHeight));camera-setAllowEventFocus(false);camera-setRenderTargetImplementation(renderTargetImplementation);camera-setRenderOrder(osg::Camera::PRE_RENDER);//关联采样贴图camera-attach(osg::Camera::COLOR_BUFFER, texture, 0, osg::TextureCubeMap::POSITIVE_Z);osg::ref_ptrosg::Image printImage new osg::Image;printImage-setFileName(camera-getName());printImage-allocateImage(textureWidth, textureHeight, 1, GL_RGBA, GL_UNSIGNED_BYTE);texture-setImage(1, printImage);camera-attach(osg::Camera::COLOR_BUFFER, printImage);viewer.addSlave(camera.get(), osg::Matrixd(), osg::Matrixd::rotate(osg::inDegrees(-90.0f), 1.0, 0.0, 0.0)); }// left face {osg::ref_ptrosg::Camera camera new osg::Camera;camera-setName(Left face camera);camera-setGraphicsContext(gc.get());camera-setViewport(new osg::Viewport(0, 0, textureWidth, textureHeight));camera-setAllowEventFocus(false);camera-setRenderTargetImplementation(renderTargetImplementation);camera-setRenderOrder(osg::Camera::PRE_RENDER);//关联采样贴图camera-attach(osg::Camera::COLOR_BUFFER, texture, 0, osg::TextureCubeMap::NEGATIVE_X);osg::ref_ptrosg::Image printImage new osg::Image;printImage-setFileName(camera-getName());printImage-allocateImage(textureWidth, textureHeight, 1, GL_RGBA, GL_UNSIGNED_BYTE);texture-setImage(2, printImage);camera-attach(osg::Camera::COLOR_BUFFER, printImage);viewer.addSlave(camera.get(), osg::Matrixd(), osg::Matrixd::rotate(osg::inDegrees(-90.0f), 0.0, 1.0, 0.0) * osg::Matrixd::rotate(osg::inDegrees(-90.0f), 0.0, 0.0, 1.0)); }// right face {osg::ref_ptrosg::Camera camera new osg::Camera;camera-setName(Right face camera);camera-setGraphicsContext(gc.get());camera-setViewport(new osg::Viewport(0, 0, textureWidth, textureHeight));camera-setAllowEventFocus(false);camera-setRenderTargetImplementation(renderTargetImplementation);camera-setRenderOrder(osg::Camera::PRE_RENDER);//关联采样贴图camera-attach(osg::Camera::COLOR_BUFFER, texture, 0, osg::TextureCubeMap::POSITIVE_X);osg::ref_ptrosg::Image printImage new osg::Image;printImage-setFileName(camera-getName());printImage-allocateImage(textureWidth, textureHeight, 1, GL_RGBA, GL_UNSIGNED_BYTE);texture-setImage(3, printImage);camera-attach(osg::Camera::COLOR_BUFFER, printImage);viewer.addSlave(camera.get(), osg::Matrixd(), osg::Matrixd::rotate(osg::inDegrees(90.0f), 0.0, 1.0, 0.0) * osg::Matrixd::rotate(osg::inDegrees(90.0f), 0.0, 0.0, 1.0));}// bottom face {osg::ref_ptrosg::Camera camera new osg::Camera;camera-setGraphicsContext(gc.get());camera-setName(Bottom face camera);camera-setViewport(new osg::Viewport(0, 0, textureWidth, textureHeight));camera-setAllowEventFocus(false);camera-setRenderTargetImplementation(renderTargetImplementation);camera-setRenderOrder(osg::Camera::PRE_RENDER);//关联采样贴图camera-attach(osg::Camera::COLOR_BUFFER, texture, 0, osg::TextureCubeMap::NEGATIVE_Z);osg::ref_ptrosg::Image printImage new osg::Image;printImage-setFileName(camera-getName());printImage-allocateImage(textureWidth, textureHeight, 1, GL_RGBA, GL_UNSIGNED_BYTE);texture-setImage(4, printImage);camera-attach(osg::Camera::COLOR_BUFFER, printImage);viewer.addSlave(camera.get(), osg::Matrixd(), osg::Matrixd::rotate(osg::inDegrees(90.0f), 1.0, 0.0, 0.0) * osg::Matrixd::rotate(osg::inDegrees(180.0f), 0.0, 0.0, 1.0));}// back face {osg::ref_ptrosg::Camera camera new osg::Camera;camera-setName(Back face camera);camera-setGraphicsContext(gc.get());camera-setViewport(new osg::Viewport(0, 0, textureWidth, textureHeight));camera-setAllowEventFocus(false);camera-setRenderTargetImplementation(renderTargetImplementation);camera-setRenderOrder(osg::Camera::PRE_RENDER);//关联采样贴图camera-attach(osg::Camera::COLOR_BUFFER, texture, 0, osg::TextureCubeMap::NEGATIVE_Y);osg::ref_ptrosg::Image printImage new osg::Image;printImage-setFileName(camera-getName());printImage-allocateImage(textureWidth, textureHeight, 1, GL_RGBA, GL_UNSIGNED_BYTE);texture-setImage(5, printImage);camera-attach(osg::Camera::COLOR_BUFFER, printImage);viewer.addSlave(camera.get(), osg::Matrixd(), osg::Matrixd::rotate(osg::inDegrees(180.0f), 1.0, 0.0, 0.0));}viewer.getCamera()-setProjectionMatrixAsPerspective(90.0f, 1.0, 0.1, 10);//viewer.getCamera()-setNearFarRatio(0.0001f); return texture;} int main() { int level 0; //0,1,2,3,4 int maxLevel 4; float roughness level * 1.0 / maxLevel; int textureWidth 128; int textureHeight 128; float ratio std::pow(0.5, level); int mipWidth textureWidth * ratio; int mipHeight textureHeight * ratio; std::string strDir e:/hdr/lod/ std::to_string(level) /;osg::ref_ptrosg::TextureCubeMap tcm new osg::TextureCubeMap; tcm-setFilter(osg::Texture::MIN_FILTER, osg::Texture::LINEAR); tcm-setFilter(osg::Texture::MAG_FILTER, osg::Texture::LINEAR); tcm-setWrap(osg::Texture::WRAP_S, osg::Texture::CLAMP_TO_EDGE); tcm-setWrap(osg::Texture::WRAP_T, osg::Texture::CLAMP_TO_EDGE); tcm-setWrap(osg::Texture::WRAP_R, osg::Texture::CLAMP_TO_EDGE);std::string strImagePosX strDir Right face camera.bmp; osg::ref_ptrosg::Image imagePosX osgDB::readImageFile(strImagePosX); tcm-setImage(osg::TextureCubeMap::POSITIVE_X, imagePosX); std::string strImageNegX strDir Left face camera.bmp; osg::ref_ptrosg::Image imageNegX osgDB::readImageFile(strImageNegX); tcm-setImage(osg::TextureCubeMap::NEGATIVE_X, imageNegX);std::string strImagePosY strDir Front face camera.bmp;; osg::ref_ptrosg::Image imagePosY osgDB::readImageFile(strImagePosY); tcm-setImage(osg::TextureCubeMap::POSITIVE_Y, imagePosY); std::string strImageNegY strDir Back face camera.bmp;; osg::ref_ptrosg::Image imageNegY osgDB::readImageFile(strImageNegY); tcm-setImage(osg::TextureCubeMap::NEGATIVE_Y, imageNegY);std::string strImagePosZ strDir Top face camera.bmp; osg::ref_ptrosg::Image imagePosZ osgDB::readImageFile(strImagePosZ); tcm-setImage(osg::TextureCubeMap::POSITIVE_Z, imagePosZ); std::string strImageNegZ strDir Bottom face camera.bmp; osg::ref_ptrosg::Image imageNegZ osgDB::readImageFile(strImageNegZ); tcm-setImage(osg::TextureCubeMap::NEGATIVE_Z, imageNegZ);osg::ref_ptrosg::Box box new osg::Box(osg::Vec3(0, 0, 0), 1); osg::ref_ptrosg::ShapeDrawable drawable new osg::ShapeDrawable(box); osg::ref_ptrosg::Geode geode new osg::Geode; geode-addDrawable(drawable); MyNodeVisitor nv; geode-accept(nv); osg::ref_ptrosg::StateSet stateset geode-getOrCreateStateSet(); stateset-setTextureAttributeAndModes(0, tcm, osg::StateAttribute::OVERRIDE | osg::StateAttribute::ON);//shaderosg::ref_ptrosg::Shader vs1 new osg::Shader(osg::Shader::VERTEX, vertexShader); osg::ref_ptrosg::Shader ps1 new osg::Shader(osg::Shader::FRAGMENT, psShader); osg::ref_ptrosg::Program program1 new osg::Program; program1-addShader(vs1); program1-addShader(ps1); program1-addBindAttribLocation(aPos, 1);osg::ref_ptrosg::Uniform tex0Uniform new osg::Uniform(environmentMap, 0); stateset-addUniform(tex0Uniform); osg::ref_ptrosg::Uniform roughnessUniform new osg::Uniform(roughness, roughness); stateset-addUniform(roughnessUniform); stateset-setAttribute(program1, osg::StateAttribute::ON);osgViewer::Viewer viewer; osg::ref_ptrosgGA::TrackballManipulator manipulator new osgGA::TrackballManipulator(); viewer.setCameraManipulator(manipulator); osg::Vec3d newEye(0, 0, 0); osg::Vec3 newCenter(0, 0, 0); osg::Vec3 newUp(0, 1, 0); manipulator-setHomePosition(newEye, newCenter, newUp); osg::ref_ptrosg::TextureCubeMap textureCubeMap getTextureCubeMap(viewer, mipWidth, mipHeight); viewer.setSceneData(geode.get());bool bPrinted false; while (!viewer.done()) {viewer.frame();if (!bPrinted){bPrinted true;int imageNumber textureCubeMap-getNumImages();for (int i 0; i imageNumber; i){osg::ref_ptrosg::Image theImage textureCubeMap-getImage(i);std::string strPrintName e:/hdr/Prefilter/ std::to_string(level) / theImage-getFileName() .bmp;osgDB::writeImageFile(*theImage, strPrintName);}} } return 0;}
http://www.sadfv.cn/news/285292/

相关文章:

  • 东莞活动网站设计模板网站首页设计布局
  • 网站开发技术视频广告设计公司成本核算具体到每个项目
  • 网站抓取诊断ip出错系统优化工具是什么软件
  • 请描述网站开发的一般流程怎么在中国移动做网站备案
  • 潍坊知名网站建设服务商网站可以多个域名吗
  • wordpress 5.0网易云音乐网站seo推广平台
  • WordPress文章发布模块seo优化关键词挖掘
  • 网站开发一般包括广告视频
  • 上海建站优化做网站如何收费
  • 广东seo网站优化公司凡科快图官网登录入口
  • 小程序与手机网站区别多少钱算有钱
  • 摄影网站设计理念网络服务器无响应
  • 沁水做网站wordpress换了ip
  • 学校官方网站网页设计网站建设费用预算
  • wordpress上次附件郴州网站优化
  • 一级a做爰全过程网站口碑营销的案例及分析
  • 海淀周边网站建设直播间人气互动平台
  • 公司如何申请一个网站做教程网站犯法吗
  • 西安企业网站建设多少钱wordpress站点路径
  • 唐山高端网站建设公司教育网站开发报告
  • wordpress跳转到微信快速seo关键词优化方案
  • 商业网站策划书范文wordpress 改成动态
  • 嘉兴有能做网站优化苏州建设项目备案网站
  • 长沙网站优化步骤怎么显示wordpress里元素的源代码
  • 工程门户网站建设上海市网站制作
  • 网站管理系统设置wordpress默认图片居中
  • 潍坊网站建设报价费用wordpress标题背景设置
  • 开发网站五个阶段迅睿cms建站
  • 机械设备企业网站源码山西省建设监理协会网-官方网站
  • 无锡建设机械网站成都网站设计开发公司