mirror of
https://gitlab.com/OpenMW/openmw.git
synced 2025-01-27 03:35:27 +00:00
enable water effects for 360 screenshots
This commit is contained in:
parent
319ed2f9b8
commit
1f49612ca3
@ -807,7 +807,7 @@ namespace MWRender
|
|||||||
for (int i = 0; i < 6; i++) // for each cube side
|
for (int i = 0; i < 6; i++) // for each cube side
|
||||||
{
|
{
|
||||||
osg::Image *sideImage = s.getImage(i);
|
osg::Image *sideImage = s.getImage(i);
|
||||||
screenshot(sideImage,cubeWidth,cubeWidth,directions[i],true);
|
screenshot(sideImage,cubeWidth,cubeWidth,directions[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
s.create(image,screenshotWidth,mapping != SphericalScreenshot::MAPPING_SMALL_PLANET ? screenshotHeight : screenshotWidth,mapping);
|
s.create(image,screenshotWidth,mapping != SphericalScreenshot::MAPPING_SMALL_PLANET ? screenshotHeight : screenshotWidth,mapping);
|
||||||
@ -818,7 +818,7 @@ namespace MWRender
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingManager::screenshot(osg::Image *image, int w, int h, osg::Vec3 direction, bool disableWaterEffects)
|
void RenderingManager::screenshot(osg::Image *image, int w, int h, osg::Vec3 direction)
|
||||||
{
|
{
|
||||||
osg::ref_ptr<osg::Camera> rttCamera (new osg::Camera);
|
osg::ref_ptr<osg::Camera> rttCamera (new osg::Camera);
|
||||||
rttCamera->setNodeMask(Mask_RenderToTexture);
|
rttCamera->setNodeMask(Mask_RenderToTexture);
|
||||||
@ -844,6 +844,10 @@ namespace MWRender
|
|||||||
|
|
||||||
rttCamera->setUpdateCallback(new NoTraverseCallback);
|
rttCamera->setUpdateCallback(new NoTraverseCallback);
|
||||||
rttCamera->addChild(mSceneRoot);
|
rttCamera->addChild(mSceneRoot);
|
||||||
|
|
||||||
|
rttCamera->addChild(mWater->getReflectionCamera());
|
||||||
|
rttCamera->addChild(mWater->getRefractionCamera());
|
||||||
|
|
||||||
rttCamera->setCullMask(mViewer->getCamera()->getCullMask() & (~Mask_GUI));
|
rttCamera->setCullMask(mViewer->getCamera()->getCullMask() & (~Mask_GUI));
|
||||||
|
|
||||||
mRootNode->addChild(rttCamera);
|
mRootNode->addChild(rttCamera);
|
||||||
@ -856,16 +860,10 @@ namespace MWRender
|
|||||||
// so out of order calls are necessary to get a correct frameNumber for the next frame.
|
// so out of order calls are necessary to get a correct frameNumber for the next frame.
|
||||||
// refer to the advance() and frame() order in Engine::go()
|
// refer to the advance() and frame() order in Engine::go()
|
||||||
|
|
||||||
if (disableWaterEffects)
|
|
||||||
mWater->setEffectsEnabled(false);
|
|
||||||
|
|
||||||
mViewer->eventTraversal();
|
mViewer->eventTraversal();
|
||||||
mViewer->updateTraversal();
|
mViewer->updateTraversal();
|
||||||
mViewer->renderingTraversals();
|
mViewer->renderingTraversals();
|
||||||
|
|
||||||
if (disableWaterEffects)
|
|
||||||
mWater->setEffectsEnabled(true);
|
|
||||||
|
|
||||||
callback->waitTillDone();
|
callback->waitTillDone();
|
||||||
|
|
||||||
// now that we've "used up" the current frame, get a fresh framenumber for the next frame() following after the screenshot is completed
|
// now that we've "used up" the current frame, get a fresh framenumber for the next frame() following after the screenshot is completed
|
||||||
|
@ -125,7 +125,7 @@ namespace MWRender
|
|||||||
void setWaterHeight(float level);
|
void setWaterHeight(float level);
|
||||||
|
|
||||||
/// Take a screenshot of w*h onto the given image, not including the GUI.
|
/// Take a screenshot of w*h onto the given image, not including the GUI.
|
||||||
void screenshot(osg::Image* image, int w, int h, osg::Vec3 direction=osg::Vec3(0,0,-1), bool disableWaterEffects=false);
|
void screenshot(osg::Image* image, int w, int h, osg::Vec3 direction=osg::Vec3(0,0,-1));
|
||||||
bool screenshot360(osg::Image* image);
|
bool screenshot360(osg::Image* image);
|
||||||
|
|
||||||
struct RayResult
|
struct RayResult
|
||||||
|
@ -476,6 +476,16 @@ void Water::updateWaterMaterial()
|
|||||||
updateVisible();
|
updateVisible();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
osg::Camera *Water::getReflectionCamera()
|
||||||
|
{
|
||||||
|
return mReflection;
|
||||||
|
}
|
||||||
|
|
||||||
|
osg::Camera *Water::getRefractionCamera()
|
||||||
|
{
|
||||||
|
return mRefraction;
|
||||||
|
}
|
||||||
|
|
||||||
void Water::createSimpleWaterStateSet(osg::Node* node, float alpha)
|
void Water::createSimpleWaterStateSet(osg::Node* node, float alpha)
|
||||||
{
|
{
|
||||||
osg::ref_ptr<osg::StateSet> stateset = SceneUtil::createSimpleWaterStateSet(alpha, MWRender::RenderBin_Water);
|
osg::ref_ptr<osg::StateSet> stateset = SceneUtil::createSimpleWaterStateSet(alpha, MWRender::RenderBin_Water);
|
||||||
|
@ -7,6 +7,7 @@
|
|||||||
#include <osg/ref_ptr>
|
#include <osg/ref_ptr>
|
||||||
#include <osg/Vec3f>
|
#include <osg/Vec3f>
|
||||||
#include <osg/Uniform>
|
#include <osg/Uniform>
|
||||||
|
#include <osg/Camera>
|
||||||
|
|
||||||
#include <components/settings/settings.hpp>
|
#include <components/settings/settings.hpp>
|
||||||
|
|
||||||
@ -113,6 +114,9 @@ namespace MWRender
|
|||||||
|
|
||||||
void update(float dt);
|
void update(float dt);
|
||||||
|
|
||||||
|
osg::Camera *getReflectionCamera();
|
||||||
|
osg::Camera *getRefractionCamera();
|
||||||
|
|
||||||
void processChangedSettings(const Settings::CategorySettingVector& settings);
|
void processChangedSettings(const Settings::CategorySettingVector& settings);
|
||||||
|
|
||||||
osg::Uniform *getRainIntensityUniform();
|
osg::Uniform *getRainIntensityUniform();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user