ogre3D学习基础18 -- 材质的使用与脚本的简单书写
这一节以基础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 -- 材质的使用与脚本的简单书写的更多相关文章
- ogre3D学习基础19 --- 材质的继承,纹理的滚动与旋转
以上一节为基础,废话不多说. 首先新增一个节点,用于比较显示 //新增一个节点 ent = mSceneMgr->createEntity("Quad"); ent-> ...
- ogre3D学习基础7---材质详解
物体着色的基础 --- 四种不同光照作用 1.环境反射 近似的模拟了场景中的全局辐射,也就是用来近似模拟所有光在场景中不断散射的结果.材质中有相应的属性来代表这种环境反射颜色. 2.漫反射 这种颜色是 ...
- ogre3D学习基础5 -- 阴影与动画
五.阴影 阴影是渲染一个真实场景的重要组成部分,它可以给场景中的物体提供更加真实的感觉,同时还可以帮助用户更好的了解对象间的空间关系. 启用阴影: 缺省情况下,阴影是关闭的,开启方式如下: 1.建立场 ...
- ogre3D学习基础1 -- 核心对象与脚本技术
一.核心对象介绍1.命名空间 Ogre3d使用了C++的特性--命名空间,可以防止命名混淆.使用方法也简单,using namespace Ogre;或者直接在使用时加上“Ogre::”的前缀,如Og ...
- ogre3D学习基础9 -- 光源程序实例
这一章练习一下光源的使用,光源分为三种:点光源,聚光源,有向光.具体内容前面说过,这里就不解释了. 继续在上一章的程序的基础上实现. 1.创建摄像机(Camera) createCamera()函数是 ...
- ogre3D学习基础16 -- 手动创建实体(ManualObject)
这一节练习一下手动创建实体,用到了对象(ManualObject) 第一,依然是模板 #include "ExampleApplication.h" class Example1 ...
- ogre3D学习基础15 -- 创建BSP Scene Manager
BSP(binary-space partitioning) Scene Manager(二叉空间分割)场景管理器比较适合用于室内场景. 第一,添加框架代码如下 #include "Exam ...
- ogre3D学习基础14 -- 雾化效果与天空面,天空盒,天空穹
前几天设置天空盒时一直出问题,现在问题终于解决了,问题来的莫名其妙,走的也莫名其妙. 第一,还是框架,我们依然使用ExampleApplication文件,框架如下 #include "Ex ...
- ogre3D学习基础13 -- 键盘控制网格动画mesh
以上一节为蓝本,这里增加一点难度,添加了四个节点,增加键盘控制移动速度,使用bool变量控制是否移动. 第一,要增加键盘控制,那就使用OIS::KeyListener,在监听器里添加一个父类KeyLi ...
随机推荐
- CentOS-7系统安装配置
CentOS 7 系统安装配置 服务器相关设置如下: 操作系统:CentOS 7.3.1611 IP地址:192.168.3.30 网关:192.168.3.1 DNS:8.8.8.8 8.8.4.4 ...
- 初学基础python记录
1.对于python来说,最重要的就是缩进.相当于其他语言的{}中括号. 2.转义快捷等 alt+p和alt+n来复制上下一行.变量使用时得先赋值,且大小写敏感,遵循变量命名规则.Python还允许用 ...
- raw_input功能
摘要: raw_input() & input() raw_input的功能是方便的从控制台读入数据. input与raw_input都是Python的内建函数,实现与用户的交互,但是功 ...
- SharePoint Survey – Custom Action
<?xml version="1.0" encoding="utf-8" ?> <Elements xmlns="http://sc ...
- Hybris Enterprise Commerce Platform 服务层的设计与实现
Hybris Enterprise Commerce Platform这个系列之前已经由我的同事,SAP成都研究院Hybris开发团队的同事张健(Zhang Jonathan)发布过两篇文章了.这里J ...
- 富文本编辑器Ueditor的使用
1.下载:http://ueditor.baidu.com/website/download.html. 2.解压,并放到项目webapp下. 3.jsp页面的配置. 4.配置根路径. 5.页面展示: ...
- 2017.12.11 String 类中常用的方法
1.编写程序将 "jdk" 全部变为大写,并输出到屏幕,截取子串"DK" 并输出到屏幕 package demo; import java.util.Scann ...
- Windows环境下在Oracle VM VirtualBOX下克隆虚拟机镜像(克隆和导入)
Windows环境下在Oracle VM VirtualBOX下克隆虚拟机镜像: 注:直接复制一个.vdi 虚拟硬盘再挂上去就可以,但Virtualbox居然提示UUID重复,无法使用. 则,可以通过 ...
- python序列化(数据本地存放持久性存储)和反序列化
http://blog.csdn.net/uestcyao/article/details/7874817 #读取图片并存储为矩阵 from scipy.misc import imread im = ...
- kindeditor 上传图片失败问题总结
1.近段时间一直在处理kindeditor上传图片失败的问题,前期一直以为是前端的问题,利用谷歌控制台,打断点,修改方法,一直都找不到解决方案,直到查看服务器配置,才发现: WEB 1号服务器 /da ...