OGRE帮我们实现了一些环境映射其中包括了球形环境映射,我们只需要在material脚本里面修改相映参数就可以了,所以这篇并不是讲球形环境映射的原理,而讲如何利用OGRE的球形映射,为了了解球形环境映射,我会用DX写一个例子,敬请期待!
/*------------------------------------------------------------ main.cpp -- Achieve sphere environmental mapping in OGRE (c) Seamanj.2013/7/21 ------------------------------------------------------------*/ //Phase1 : Add Framework //Phase2 : Add ogrehead with spheremap material #define Phase1 1 #define Phase2 1 #if Phase1 #include "ExampleApplication.h" #include <windows.h> class MyApplication : public ExampleApplication { public: MyApplication() {} ~MyApplication() {} protected: void createScene() { #if Phase2 Entity* ent = mSceneMgr->createEntity("Head","ogrehead.mesh"); ent->setMaterialName("Examples/SphereMappedRustySteel");//知识点1 /*知识点1:球形环境映射材质 --------------------------------------------- 来自ogre_src_v1-7-4\Samples\Media\materials\scripts\Examples.material文件 --------------------------------------------- material Examples/SphereMappedRustySteel { technique { pass { texture_unit { texture RustySteel.jpg } texture_unit { texture spheremap.png // colour_op_ex <operation> <source1> (Advanced) Type of texturelayer // <source2> [<manual_factor>] blending; operation is one of // [<manual_colour1>] source1, source2, modulate, // [<manual_colour2>] modulate_x2, modulate_x4, add, // add_signed, add_smooth, subtract, // blend_diffuse_alpha, // blend_texture_alpha, // blend_current_alpha, // blend_manual, dotproduct, // blend_diffuse_color; source1 and // source2 are one of src_current, // src_texture, src_diffuse, // src_specular, src_manual; values // for manual_factor, manual_colour1, // and manual_colour2 are dependent // on operation, source1, and source2 // values. colour_op_ex add src_texture src_current // colour_op_ <src_factor> <dest_factor> Fallback texture blending to use // multipass_fallback when multitexturing not available; // src_factor and dest_factor // values same as for scene_blend. colour_op_multipass_fallback one one // env_map <off> | <spherical> | Enable this texture layer as an // <planar> | cubic_reflection | environment map (default off). // cubic_normal env_map spherical } } } } ]*/ mSceneMgr->getRootSceneNode()->attachObject(ent); #endif } }; INT WINAPI WinMain( __in HINSTANCE hInstance, __in_opt HINSTANCE hPrevInstance, __in_opt LPSTR lpCmdLine, __in int nShowCmd ) { MyApplication app; try { app.go(); } catch( Exception& e) { MessageBoxA( NULL, e.getFullDescription().c_str(), "An exception has occured!", MB_OK | MB_ICONERROR | MB_TASKMODAL); } return 0; } #endif
/*RustySteel.jpg
---------------------------------------------
来自ogre_src_v1-7-4\Samples\Media\materials\textures
---------------------------------------------
*/
/*spheremap.png
---------------------------------------------
来自ogre_src_v1-7-4\Samples\Media\materials\textures
---------------------------------------------
*/
最后运行结果如下: