Add anaglyph 3D
This commit is contained in:
parent
5c181026bb
commit
de7ff3f9db
@ -90,6 +90,20 @@ void RenderingCorePlain::draw()
|
||||
|
||||
RenderingCoreStereo::RenderingCoreStereo(irr::IrrlichtDevice *_device) :
|
||||
RenderingCore(_device)
|
||||
{
|
||||
parallax_strength = g_settings->getFloat("3d_paralax_strength");
|
||||
}
|
||||
|
||||
void RenderingCoreStereo::use_eye(Eye eye)
|
||||
{
|
||||
irr::scene::ICameraSceneNode *cam = camera->getCameraNode();
|
||||
irr::core::matrix4 transform = cam->getRelativeTransformation();
|
||||
irr::core::matrix4 move;
|
||||
move.setTranslation(irr::core::vector3df(static_cast<int>(eye) * parallax_strength, 0.0f, 0.0f));
|
||||
cam->setPosition((transform * move).getTranslation());
|
||||
}
|
||||
|
||||
void RenderingCoreStereo::use_default()
|
||||
{
|
||||
}
|
||||
|
||||
@ -100,6 +114,45 @@ RenderingCoreAnaglyph::RenderingCoreAnaglyph(irr::IrrlichtDevice *_device) :
|
||||
|
||||
void RenderingCoreAnaglyph::draw()
|
||||
{
|
||||
use_eye(Eye::Left);
|
||||
draw_3d();
|
||||
use_eye(Eye::Right);
|
||||
draw_3d();
|
||||
use_default();
|
||||
draw_last_fx();
|
||||
draw_hud();
|
||||
}
|
||||
|
||||
void RenderingCoreAnaglyph::use_eye(Eye eye)
|
||||
{
|
||||
RenderingCoreStereo::use_eye(eye);
|
||||
driver->clearZBuffer();
|
||||
irr::video::SOverrideMaterial &mat = driver->getOverrideMaterial();
|
||||
switch (eye) {
|
||||
case Eye::Left:
|
||||
mat.Material.ColorMask = irr::video::ECP_RED;
|
||||
break;
|
||||
case Eye::Right:
|
||||
mat.Material.ColorMask = irr::video::ECP_GREEN | irr::video::ECP_BLUE;
|
||||
break;
|
||||
}
|
||||
mat.EnableFlags = irr::video::EMF_COLOR_MASK;
|
||||
mat.EnablePasses =
|
||||
irr::scene::ESNRP_SKY_BOX | irr::scene::ESNRP_SOLID |
|
||||
irr::scene::ESNRP_TRANSPARENT |
|
||||
irr::scene::ESNRP_TRANSPARENT_EFFECT | irr::scene::ESNRP_SHADOW;
|
||||
}
|
||||
|
||||
void RenderingCoreAnaglyph::use_default()
|
||||
{
|
||||
RenderingCoreStereo::use_default();
|
||||
irr::video::SOverrideMaterial &mat = driver->getOverrideMaterial();
|
||||
mat.Material.ColorMask = irr::video::ECP_ALL;
|
||||
mat.EnableFlags = irr::video::EMF_COLOR_MASK;
|
||||
mat.EnablePasses =
|
||||
irr::scene::ESNRP_SKY_BOX + irr::scene::ESNRP_SOLID +
|
||||
irr::scene::ESNRP_TRANSPARENT +
|
||||
irr::scene::ESNRP_TRANSPARENT_EFFECT + irr::scene::ESNRP_SHADOW;
|
||||
}
|
||||
|
||||
RenderingCoreDouble::RenderingCoreDouble(irr::IrrlichtDevice *_device, RenderingCoreDouble::Mode _mode) :
|
||||
|
@ -77,8 +77,18 @@ public:
|
||||
|
||||
class RenderingCoreStereo: public RenderingCore
|
||||
{
|
||||
protected:
|
||||
float parallax_strength;
|
||||
|
||||
public:
|
||||
enum class Eye
|
||||
{
|
||||
Left = -1,
|
||||
Right = 1,
|
||||
};
|
||||
RenderingCoreStereo(irr::IrrlichtDevice *_device);
|
||||
virtual void use_eye(Eye eye);
|
||||
virtual void use_default();
|
||||
};
|
||||
|
||||
class RenderingCoreAnaglyph: public RenderingCoreStereo
|
||||
@ -86,6 +96,8 @@ class RenderingCoreAnaglyph: public RenderingCoreStereo
|
||||
public:
|
||||
RenderingCoreAnaglyph(irr::IrrlichtDevice *_device);
|
||||
void draw() override;
|
||||
void use_eye(Eye eye) override;
|
||||
void use_default() override;
|
||||
};
|
||||
|
||||
class RenderingCoreDouble: public RenderingCoreStereo
|
||||
|
Loading…
x
Reference in New Issue
Block a user