这一节以基础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 ,边框模式,这种模式看不出其他的明显区别,因为边框填充为黑色的

ogre3D学习基础18 -- 材质的使用与脚本的简单书写的更多相关文章

  1. ogre3D学习基础19 --- 材质的继承,纹理的滚动与旋转

    以上一节为基础,废话不多说. 首先新增一个节点,用于比较显示 //新增一个节点 ent = mSceneMgr->createEntity("Quad"); ent-> ...

  2. ogre3D学习基础7---材质详解

    物体着色的基础 --- 四种不同光照作用 1.环境反射 近似的模拟了场景中的全局辐射,也就是用来近似模拟所有光在场景中不断散射的结果.材质中有相应的属性来代表这种环境反射颜色. 2.漫反射 这种颜色是 ...

  3. ogre3D学习基础5 -- 阴影与动画

    五.阴影 阴影是渲染一个真实场景的重要组成部分,它可以给场景中的物体提供更加真实的感觉,同时还可以帮助用户更好的了解对象间的空间关系. 启用阴影: 缺省情况下,阴影是关闭的,开启方式如下: 1.建立场 ...

  4. ogre3D学习基础1 -- 核心对象与脚本技术

    一.核心对象介绍1.命名空间 Ogre3d使用了C++的特性--命名空间,可以防止命名混淆.使用方法也简单,using namespace Ogre;或者直接在使用时加上“Ogre::”的前缀,如Og ...

  5. ogre3D学习基础9 -- 光源程序实例

    这一章练习一下光源的使用,光源分为三种:点光源,聚光源,有向光.具体内容前面说过,这里就不解释了. 继续在上一章的程序的基础上实现. 1.创建摄像机(Camera) createCamera()函数是 ...

  6. ogre3D学习基础16 -- 手动创建实体(ManualObject)

    这一节练习一下手动创建实体,用到了对象(ManualObject) 第一,依然是模板 #include "ExampleApplication.h" class Example1 ...

  7. ogre3D学习基础15 -- 创建BSP Scene Manager

    BSP(binary-space partitioning) Scene Manager(二叉空间分割)场景管理器比较适合用于室内场景. 第一,添加框架代码如下 #include "Exam ...

  8. ogre3D学习基础14 -- 雾化效果与天空面,天空盒,天空穹

    前几天设置天空盒时一直出问题,现在问题终于解决了,问题来的莫名其妙,走的也莫名其妙. 第一,还是框架,我们依然使用ExampleApplication文件,框架如下 #include "Ex ...

  9. ogre3D学习基础13 -- 键盘控制网格动画mesh

    以上一节为蓝本,这里增加一点难度,添加了四个节点,增加键盘控制移动速度,使用bool变量控制是否移动. 第一,要增加键盘控制,那就使用OIS::KeyListener,在监听器里添加一个父类KeyLi ...

随机推荐

  1. 关于HTML中时间格式以及查询数据库的问题

    1.默认时间格式,加入属性dateFormate="yyyy-MM-dd" 2.设置默认值,value="2017-6-22" 3.在JavaScript中将获 ...

  2. Bugzilla-5.0.3 (OpenLogic CentOS 7.2)

    平台: CentOS 类型: 虚拟机镜像 软件包: apache2.4.6 bugzilla5.0.3 mariadb5.5.47 perl5.16.3 apache bug tracking bug ...

  3. Yii2 components api/controller

    When we wrote API, those controllers need to implement the following feature: 1. return JSON format ...

  4. [转]iOS开发总结之代码规范

    转自:http://www.cocoachina.com/ios/20151014/13678.html 命名规范 总 的来说, iOS命名两大原则是:可读性高和防止命名冲突(通过加前缀来保证). O ...

  5. Coursera 算法二 week 4 Boggle

    这次的作业主要用到了单词查找树和深度优先搜索. 1.在深度优先搜索中,在当前层的递归调用前,将marked数组标记为true.当递归调用返回到当前层时,应将marked数组标记为false.这样既可以 ...

  6. 小记:iOS 中一般对于 view 不依赖 model 的的两种代码书写形式

    一. 前言 对于在 MVC 的定义中,view 层是不引用 model 层,view 和 model 是不相往来的 一般开发中,我们都写过 在自定义 view 中增加一个 model 的属性,外接直接 ...

  7. IOS Prefix.pch程序常见文件 的作用

    #import <Availability.h> #ifndef __IPHONE_5_0 #warning "This project uses features only a ...

  8. 2018.10.03 NOIP+ 模拟赛 解题报告

    得分: \(30+5+0=35\)(考得真不咋滴) \(T1\):奥义商店(点此看题面) 以为很简单,对着这题想了一个多小时,最后果断打了个暴力交了... ... 看完题解发现其实也不是很难. 对于\ ...

  9. 2018.5.28 Oracle数据库补充

    select * from (select rownum rn,e2.* from (select e1.* from emp e1)e2 where rownum<=10)e3 where e ...

  10. Angular6中[ngClass]、[ngStyle]的基本使用

    1.ngStyle 基本用法 <div [ngStyle]="{'background-color':'green'}"></<div> 判断添加 & ...