#include "scene/SkyDome.h" //#include SkyDome::SkyDome(void) { } SkyDome::SkyDome(const SkyDome& copy, const osg::CopyOp& copyop) : SphereSegment(copy, copyop) { } SkyDome::SkyDome(float radius, unsigned int longSteps, unsigned int latSteps, osg::TextureCubeMap* cubemap) { Compute(radius, longSteps, latSteps, 90.f, 180.f, 0.f, 360.f); SetupStateSet(cubemap); } SkyDome::~SkyDome(void) {} void SkyDome::Create(float radius, unsigned int latSteps, unsigned int longSteps, osg::TextureCubeMap* cubemap) { Compute(radius, longSteps, latSteps, 90.f, 180.f, 0.f, 360.f); SetupStateSet(cubemap); } void SkyDome::SetupStateSet(osg::TextureCubeMap* cubemap) { osg::StateSet* ss = new osg::StateSet; ss->setMode(GL_LIGHTING, osg::StateAttribute::OFF); ss->setTextureAttributeAndModes(0, cubemap, osg::StateAttribute::ON); ss->setAttributeAndModes(createShader().get(), osg::StateAttribute::ON); ss->addUniform(new osg::Uniform("uEnvironmentMap", 0)); setStateSet(ss); } osg::ref_ptr SkyDome::createShader(void) { osg::ref_ptr program = new osg::Program; // Do not use shaders if they were globally disabled. /* if (osgOcean::ShaderManager::instance().areShadersEnabled()) { char vertexSource[] = "varying vec3 vTexCoord;\n" "\n" "void main(void)\n" "{\n" " gl_Position = ftransform();\n" " vTexCoord = gl_Vertex.xyz;\n" "}\n"; char fragmentSource[] = "uniform samplerCube uEnvironmentMap;\n" "varying vec3 vTexCoord;\n" "\n" "void main(void)\n" "{\n" " vec3 texcoord = vec3(vTexCoord.x, vTexCoord.y, -vTexCoord.z);\n" " gl_FragData[0] = textureCube( uEnvironmentMap, texcoord.xzy );\n" " gl_FragData[0].a = 0.0;\n" " gl_FragData[1] = vec4(0.0);\n" "}\n"; program->setName("sky_dome_shader"); program->addShader(new osg::Shader(osg::Shader::VERTEX, vertexSource)); program->addShader(new osg::Shader(osg::Shader::FRAGMENT, fragmentSource)); }*/ return program; }