ogre3D学习基础18 -- 材质的使用与脚本的简单书写
2024-08-30 00:44:13
这一节以基础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 ;
}
第二,在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(,);
manual->position(-5.0,10.0,0.0);
manual->textureCoord(,);
manual->position(-5.0,0.0,0.0);
manual->textureCoord(,);
manual->position(5.0,10.0,0.0);
manual->textureCoord(,); manual->index();//三角形一
manual->index();
manual->index(); manual->index();//三角形二
manual->index();
manual->index(); 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(,);//变为2
manual->position(-5.0, 10.0, 0.0);
manual->textureCoord(,);//变为2
manual->position(-5.0, 0.0, 0.0);
manual->textureCoord(,);//
manual->position(5.0, 10.0, 0.0);
manual->textureCoord(,);//
看一下效果
这样显示是系统默认的显示的方式,为 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 ,边框模式,这种模式看不出其他的明显区别,因为边框填充为黑色的
最新文章
- iOS AppStore 申请加急审核
- .NET跨平台实践:用C#开发Linux守护进程
- (转)JAVA之桥接模式
- linux 查看占用内存/CPU最多的进程
- ZOJ 2677 Oil Deal(最大生成树)
- 如何让MFC程序关闭按钮失效,也无法右击任务栏关闭窗口来关闭?
- gulp 前端自动化工具
- line-height行高使用技巧
- 从决策树学习谈到贝叶斯分类算法、EM、HMM
- 通过maven test 报org.apache.ibatis.binding.BindingException: Invalid bound statement
- Java学习笔记3(数组)
- 使用JS取得焦点(focus)元素
- 安卓开发学习笔记(七):仿写腾讯QQ登录注册界面
- go ethereum源码分析 PartIV Transaction相关
- Git+Gitlab+Ansible的roles实现一键部署Nginx静态网站(一)--技术流ken
- Java中的并发工具类(CountDownLatch、CyclicBarrier、Semaphore、Exchanger)
- 【Mac brew】代理安装brew insall
- 图像矫正-基于opencv实现
- What is Druid?
- linux 手动释放buff/cache