From 8b16e5f27d7cebc836eaf0513a39f915a902aa0b Mon Sep 17 00:00:00 2001 From: MirceaKitsune Date: Sat, 18 Feb 2012 18:51:19 +0200 Subject: [PATCH 1/3] Anaglyph stereo support, created by xyz --- src/defaultsettings.cpp | 3 ++ src/game.cpp | 70 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 73 insertions(+) diff --git a/src/defaultsettings.cpp b/src/defaultsettings.cpp index 6eaa28410..4c460c547 100644 --- a/src/defaultsettings.cpp +++ b/src/defaultsettings.cpp @@ -52,7 +52,10 @@ void set_default_settings(Settings *settings) settings->setDefault("keymap_toggle_profiler", "KEY_F6"); settings->setDefault("keymap_increase_viewing_range_min", "+"); settings->setDefault("keymap_decrease_viewing_range_min", "-"); + settings->setDefault("anaglyph", "false"); settings->setDefault("aux1_descends", "false"); + settings->setDefault("anaglyph_strength", "0.01"); + // Some (temporary) keys for debugging settings->setDefault("keymap_print_debug_stacks", "KEY_KEY_P"); settings->setDefault("keymap_quicktune_prev", "KEY_HOME"); diff --git a/src/game.cpp b/src/game.cpp index a1a197219..b6accfe37 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -2734,6 +2734,76 @@ void the_game( { TimeTaker timer("smgr"); smgr->drawAll(); + + if(g_settings->getBool("anaglyph")) + { + irr::core::vector3df oldPosition = camera.getCameraNode()->getPosition(); + irr::core::vector3df oldTarget = camera.getCameraNode()->getTarget(); + + irr::core::matrix4 startMatrix = camera.getCameraNode()->getAbsoluteTransformation(); + + irr::core::vector3df focusPoint = (camera.getCameraNode()->getTarget() - + camera.getCameraNode()->getAbsolutePosition()).setLength(1) + + camera.getCameraNode()->getAbsolutePosition() ; + + //Left eye... + irr::core::vector3df leftEye; + irr::core::matrix4 leftMove; + + leftMove.setTranslation( irr::core::vector3df(-g_settings->getFloat("anaglyph_strength"),0.0f,0.0f) ); + leftEye=(startMatrix*leftMove).getTranslation(); + + //clear the depth buffer, and color + driver->beginScene( true, true, irr::video::SColor(0,200,200,255) ); + + driver->getOverrideMaterial().Material.ColorMask = irr::video::ECP_RED; + driver->getOverrideMaterial().EnableFlags = irr::video::EMF_COLOR_MASK; + driver->getOverrideMaterial().EnablePasses = irr::scene::ESNRP_SKY_BOX + + irr::scene::ESNRP_SOLID + + irr::scene::ESNRP_TRANSPARENT + + irr::scene::ESNRP_TRANSPARENT_EFFECT + + irr::scene::ESNRP_SHADOW; + + camera.getCameraNode()->setPosition( leftEye ); + camera.getCameraNode()->setTarget( focusPoint ); + + smgr->drawAll(); // 'smgr->drawAll();' may go here + + + //Right eye... + irr::core::vector3df rightEye; + irr::core::matrix4 rightMove; + + rightMove.setTranslation( irr::core::vector3df(g_settings->getFloat("anaglyph_strength"),0.0f,0.0f) ); + rightEye=(startMatrix*rightMove).getTranslation(); + + //clear the depth buffer + driver->clearZBuffer(); + + driver->getOverrideMaterial().Material.ColorMask = irr::video::ECP_GREEN + irr::video::ECP_BLUE; + driver->getOverrideMaterial().EnableFlags = irr::video::EMF_COLOR_MASK; + driver->getOverrideMaterial().EnablePasses = irr::scene::ESNRP_SKY_BOX + + irr::scene::ESNRP_SOLID + + irr::scene::ESNRP_TRANSPARENT + + irr::scene::ESNRP_TRANSPARENT_EFFECT + + irr::scene::ESNRP_SHADOW; + + camera.getCameraNode()->setPosition( rightEye ); + camera.getCameraNode()->setTarget( focusPoint ); + + smgr->drawAll(); // 'smgr->drawAll();' may go here + + + //driver->endScene(); + + driver->getOverrideMaterial().Material.ColorMask=irr::video::ECP_ALL; + driver->getOverrideMaterial().EnableFlags=0; + driver->getOverrideMaterial().EnablePasses=0; + + camera.getCameraNode()->setPosition( oldPosition ); + camera.getCameraNode()->setTarget( oldTarget ); + } + scenetime = timer.stop(true); } From 9b9eb23b6d03ec548ba7b39df16d6ac61d237caf Mon Sep 17 00:00:00 2001 From: MirceaKitsune Date: Sat, 18 Feb 2012 18:52:04 +0200 Subject: [PATCH 2/3] Default anaglyph to 0.1 --- src/defaultsettings.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/defaultsettings.cpp b/src/defaultsettings.cpp index 4c460c547..f1858c2e7 100644 --- a/src/defaultsettings.cpp +++ b/src/defaultsettings.cpp @@ -53,8 +53,8 @@ void set_default_settings(Settings *settings) settings->setDefault("keymap_increase_viewing_range_min", "+"); settings->setDefault("keymap_decrease_viewing_range_min", "-"); settings->setDefault("anaglyph", "false"); + settings->setDefault("anaglyph_strength", "0.1"); settings->setDefault("aux1_descends", "false"); - settings->setDefault("anaglyph_strength", "0.01"); // Some (temporary) keys for debugging settings->setDefault("keymap_print_debug_stacks", "KEY_KEY_P"); From 6c43ec2d2b86b77fe2d12953ebecdd63922ecebc Mon Sep 17 00:00:00 2001 From: MirceaKitsune Date: Sat, 18 Feb 2012 18:53:39 +0200 Subject: [PATCH 3/3] Add anaglyph settings to minetest.conf.example --- minetest.conf.example | 3 +++ 1 file changed, 3 insertions(+) diff --git a/minetest.conf.example b/minetest.conf.example index 3f292c01e..45e912eb1 100644 --- a/minetest.conf.example +++ b/minetest.conf.example @@ -117,6 +117,9 @@ #screenshot_path = . # Amount of view bobbing (0 = no view bobbing, 1.0 = normal, 2.0 = double) #view_bobbing_amount = 1.0 +# Anaglyph stereo +#anaglyph = false +#anaglyph_strength = 0.1 # In-game chat console background color (R,G,B) #console_color = (0,0,0) # In-game chat console background alpha (opaqueness, between 0 and 255)