您的位置:首页 > 其它

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

2013-10-16 15:38 1076 查看
这一节以基础16为基础,练习材质的使用。

  第一,看看框架

//material

#include "ExampleApplication.h"

class TutorialApplication : public ExampleApplication
{
protected:
public:
TutorialApplication()
{
}

~TutorialApplication()
{
}
protected:
void createScene(void)
{

}
};

#include "windows.h"

INT WINAPI WinMain( HINSTANCE hInst, HINSTANCE, LPSTR strCmdLine, INT )
{
// Create application object
TutorialApplication app;
app.go();
return 0;
}


  第二,在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);


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





  好,现在我们添加材质

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

material MyMaterial1
{
technique
{
pass
{
texture_unit
{
texture gras_02.png
}
}
}
}


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





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

material MyMaterial2
{
technique
{
pass
{
texture_unit
{
texture water02.jpg
}
}
}
}


  


  下面来改变一下

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);//


  看一下效果



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





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





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

material MyMaterial2
{
technique
{
pass
{
texture_unit
{
texture water02.jpg
tex_address_mode clamp//这句话设置显示mode
}
}
}
}


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



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

material MyMaterial1
{
technique
{
pass
{
texture_unit
{
texture gras_02.png
tex_address_mode mirror//
}
}
}
}


  效果为:

  


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



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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: