mirror of
https://gitlab.com/OpenMW/openmw.git
synced 2025-02-04 12:39:55 +00:00
Render the sun flash (not adjusted based on occlusion yet)
This commit is contained in:
parent
89d9323c2b
commit
ac5d0bf405
@ -364,6 +364,7 @@ public:
|
|||||||
Sun(osg::Group* parentNode, Resource::TextureManager& textureManager)
|
Sun(osg::Group* parentNode, Resource::TextureManager& textureManager)
|
||||||
: CelestialBody(parentNode, 1.0f, 1)
|
: CelestialBody(parentNode, 1.0f, 1)
|
||||||
, mUpdater(new Updater)
|
, mUpdater(new Updater)
|
||||||
|
, mInitialFlashScale(2.6f)
|
||||||
{
|
{
|
||||||
mTransform->addUpdateCallback(mUpdater);
|
mTransform->addUpdateCallback(mUpdater);
|
||||||
|
|
||||||
@ -384,6 +385,8 @@ public:
|
|||||||
|
|
||||||
mOcclusionQueryVisiblePixels = createOcclusionQueryNode(queryTransform, true);
|
mOcclusionQueryVisiblePixels = createOcclusionQueryNode(queryTransform, true);
|
||||||
mOcclusionQueryTotalPixels = createOcclusionQueryNode(queryTransform, false);
|
mOcclusionQueryTotalPixels = createOcclusionQueryNode(queryTransform, false);
|
||||||
|
|
||||||
|
createSunFlash(textureManager);
|
||||||
}
|
}
|
||||||
|
|
||||||
~Sun()
|
~Sun()
|
||||||
@ -447,6 +450,34 @@ private:
|
|||||||
return oqn;
|
return oqn;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void createSunFlash(Resource::TextureManager& textureManager)
|
||||||
|
{
|
||||||
|
osg::ref_ptr<osg::Texture2D> tex = textureManager.getTexture2D("textures/tx_sun_flash_grey_05.dds",
|
||||||
|
osg::Texture::CLAMP,
|
||||||
|
osg::Texture::CLAMP);
|
||||||
|
|
||||||
|
osg::ref_ptr<osg::PositionAttitudeTransform> transform (new osg::PositionAttitudeTransform);
|
||||||
|
transform->setScale(osg::Vec3f(mInitialFlashScale, mInitialFlashScale, mInitialFlashScale));
|
||||||
|
|
||||||
|
mTransform->addChild(transform);
|
||||||
|
|
||||||
|
osg::ref_ptr<osg::Geode> geode (new osg::Geode);
|
||||||
|
transform->addChild(geode);
|
||||||
|
|
||||||
|
geode->addDrawable(createTexturedQuad());
|
||||||
|
|
||||||
|
osg::StateSet* stateset = geode->getOrCreateStateSet();
|
||||||
|
|
||||||
|
stateset->setTextureAttributeAndModes(0, tex, osg::StateAttribute::ON);
|
||||||
|
stateset->setAttributeAndModes(createUnlitMaterial(),
|
||||||
|
osg::StateAttribute::ON | osg::StateAttribute::OVERRIDE);
|
||||||
|
stateset->setMode(GL_DEPTH_TEST, osg::StateAttribute::OFF);
|
||||||
|
stateset->setRenderBinDetails(RenderBin_SunGlare, "RenderBin");
|
||||||
|
stateset->setNestRenderBins(false);
|
||||||
|
|
||||||
|
// TODO: change size depending on occlusion
|
||||||
|
}
|
||||||
|
|
||||||
struct Updater : public SceneUtil::StateSetUpdater
|
struct Updater : public SceneUtil::StateSetUpdater
|
||||||
{
|
{
|
||||||
osg::Vec4f mColor;
|
osg::Vec4f mColor;
|
||||||
@ -472,6 +503,7 @@ private:
|
|||||||
osg::ref_ptr<Updater> mUpdater;
|
osg::ref_ptr<Updater> mUpdater;
|
||||||
osg::ref_ptr<osg::OcclusionQueryNode> mOcclusionQueryVisiblePixels;
|
osg::ref_ptr<osg::OcclusionQueryNode> mOcclusionQueryVisiblePixels;
|
||||||
osg::ref_ptr<osg::OcclusionQueryNode> mOcclusionQueryTotalPixels;
|
osg::ref_ptr<osg::OcclusionQueryNode> mOcclusionQueryTotalPixels;
|
||||||
|
float mInitialFlashScale;
|
||||||
};
|
};
|
||||||
|
|
||||||
class Moon : public CelestialBody
|
class Moon : public CelestialBody
|
||||||
|
Loading…
x
Reference in New Issue
Block a user