DYTSrouce/src/scene/SkyDome.cpp

70 lines
2.2 KiB
C++
Raw Normal View History

2025-01-04 04:12:51 +00:00
#include "scene/SkyDome.h"
//#include <osgOcean/ShaderManager>
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<osg::Program> SkyDome::createShader(void) {
osg::ref_ptr<osg::Program> 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;
}