ogre3D学习基础18 -- 材质的使用与脚本的简单书写

这一节以基础16为基础,练习材质的使用。

  第一,看看框架

 1 //material

 2 

 3 #include "ExampleApplication.h"

 4 

 5 class TutorialApplication : public ExampleApplication

 6 {

 7 protected:

 8 public:

 9     TutorialApplication()

10     {

11     }

12 

13     ~TutorialApplication() 

14     {

15     }

16 protected:

17     void createScene(void)

18     {

19 

20     }  

21 };

22 

23 

24 #include "windows.h"

25 

26 INT WINAPI WinMain( HINSTANCE hInst, HINSTANCE, LPSTR strCmdLine, INT )

27 {

28     // Create application object

29     TutorialApplication app;

30     app.go();

31     return 0;

32 }

  第二,在createScene()里添加手动创建的对象manual

Ogre::ManualObject *manual = mSceneMgr->createManualObject("Quad");//创建手绘对象

manual->begin("MyMaterial",RenderOperation::OT_TRIANGLE_LIST);//这里使用的材质是material

  第三,绘制图形,正方形,并结束绘制。

   manual->position(5.0,0.0,0.0);

    manual->textureCoord(0,2);

    manual->position(-5.0,10.0,0.0);

    manual->textureCoord(2,0);

    manual->position(-5.0,0.0,0.0);

    manual->textureCoord(2,2);

    manual->position(5.0,10.0,0.0);

    manual->textureCoord(0,0);



    manual->index(0);//三角形一

    manual->index(1);

    manual->index(2);



    manual->index(0);//三角形二

    manual->index(3);

    manual->index(1);



    manual->end();

    manual->convertToMesh("Quad");



    Ogre::Entity *ent = mSceneMgr->createEntity("Quad");

    Ogre::SceneNode *node = mSceneMgr->getRootSceneNode()->createChildSceneNode("Node1");

    node->attachObject(ent);

  最后运行效果是一个方形白色方块。

ogre3D学习基础18 -- 材质的使用与脚本的简单书写

  好,现在我们添加材质

  在路径..\media\materials\scripts下新建一个material格式的文件,添加代码如下:

material MyMaterial1

{

    technique

    {

        pass

        {

            texture_unit

            {

                texture gras_02.png

            }

        }

    }

}

  将程序中manual->begin("MyMaterial",RenderOperation::OT_TRIANGLE_LIST);中的MyMaterial替换为MyMaterial1,效果如下:

ogre3D学习基础18 -- 材质的使用与脚本的简单书写

 

  现在将material改为matreial2,代码如下:

material MyMaterial2

{

    technique

    {

        pass

        {

            texture_unit

            {

                texture water02.jpg

            }

        }

    }

}

  ogre3D学习基础18 -- 材质的使用与脚本的简单书写

  下面来改变一下

manual->position(5.0, 0.0, 0.0);

manual->textureCoord(0,2);//变为2

manual->position(-5.0, 10.0, 0.0);

manual->textureCoord(2,0);//变为2

manual->position(-5.0, 0.0, 0.0);

manual->textureCoord(2,2);//

manual->position(5.0, 10.0, 0.0);

manual->textureCoord(0,0);//

  看一下效果

ogre3D学习基础18 -- 材质的使用与脚本的简单书写

这样显示是系统默认的显示的方式,为 wrapping mode,内部解释为将大于2的部分复制显示,like this:

ogre3D学习基础18 -- 材质的使用与脚本的简单书写

  主要是纹理问题,我们换个图片就会发现,这样的好处,你能发现区别吗,这个纹理根部看不出来是四个图片拼接而成。

ogre3D学习基础18 -- 材质的使用与脚本的简单书写

 

  第二种纹理显示模式,称之为clamping mode,需要在脚本里添加一句话,如下:

material MyMaterial2

{

    technique

    {

        pass

        {

            texture_unit

            {

                texture water02.jpg

                tex_address_mode clamp//这句话设置显示mode

            }

        }

    }

}

效果很明显,四个方块,以第一个为基础,向外辐射:

ogre3D学习基础18 -- 材质的使用与脚本的简单书写

  第三种类似镜子的纹理显示模式,改变脚本为

material MyMaterial1

{

    technique

    {

        pass

        {

            texture_unit

            {

                texture gras_02.png

                tex_address_mode mirror//

            }

        }

    }

}

  效果为:

  ogre3D学习基础18 -- 材质的使用与脚本的简单书写

镜子模式的图形分析如下:

ogre3D学习基础18 -- 材质的使用与脚本的简单书写

  第四中纹理显示模式称之为border mode ,边框模式,这种模式看不出其他的明显区别,因为边框填充为黑色的

ogre3D学习基础18 -- 材质的使用与脚本的简单书写

 

你可能感兴趣的:(脚本)