Ogre的材质创建和应用

参考:http://blog.csdn.net/butwang/article/details/5807707

参考:http://blog.csdn.net/pizi0475/article/details/6341726

参考:Ogre 3d 1.7 beginner Guide 中文版.doc

Ogre材质的创建可以通过脚本或代码创建:层级 Material -〉technique -> pass -> texture_unit

Ogre的材质具有动态的效果,提供有animation,rotate,scroll,mirror等效果

Ogre中的材质可以在mesh创建时指定材质,也可以在entiry创建时重新制定材质。

通过脚本创建材质:(*.material)

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

通过代码创建一个简单材质:

// 添加一种新材质
Ogre::MaterialPtr m_pManualMat = Ogre::MaterialManager::getSingletonPtr()->create("manualMaterial1", Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME);
// 设置图片纹理
Ogre::TextureUnitState* m_pTexUnitState = m_pManualMat->getTechnique(0)->getPass(0)->createTextureUnitState("ogrelogo-small.jpg");
// 设置图片纹理旋转或其他变换
m_pTexUnitState->setTextureRotate(Ogre::Radian(Ogre::Degree(45)));

通过脚本创建动态材质:

分别为:

"MyMaterial4"  - rock + clamp

"MyMaterial5"  - leaf + mirror

"MyMaterial6"- leaf + border

"MyMaterial7"- leaf + border + bordercolor

"MyMaterial8"- rock + scroll + scroll animation

"MyMaterial11"- rock + rotate animation

"MyMaterial12"-  "MyMaterial11" -> water = water + rotate animation

material MyMaterial4
{
	technique
	{
		pass
		{
			texture_unit
			{
				texture terr_rock6.jpg
				tex_address_mode clamp
			}
		}
	}
}
material MyMaterial5
{
	technique
	{
		pass
		{
			texture_unit
			{
				texture leaf.png
				tex_address_mode mirror
			}
		}
	}
}
material MyMaterial6
{
	technique
	{
		pass
		{
			texture_unit
			{
				texture leaf.png
				tex_address_mode border
			}
		}
	}
}
material MyMaterial7
{
	technique
	{
		pass
		{
			texture_unit
			{
				texture leaf.png
				tex_address_mode border
				tex_border_colour 0 0 1
			}
		}
	}
}
material MyMaterial8
{
	technique
	{
		pass
		{
			texture_unit
			{
				texture terr_rock6.jpg
				scroll 0.8 0.8
				scroll_anim 0.01 0.01
			}
		}
	}
}
material MyMaterial11
{
	technique
	{
		pass
		{
			texture_unit texture1
			{
				texture terr_rock6.jpg
				rotate_anim 0.1
			}
		}
	}
}
material MyMaterial12 : MyMaterial11
{
	set_texture_alias texture1 Water02.jpg
}

材质应用:

1. 创建ManualObject时初始指定材质: (注意:a. 三角型逆时针  b.材质左上点为0,0, 右下点为1,1)

	 // add a quad for material
 	Ogre::ManualObject* pQuad = mSceneMgr->createManualObject("Quad");
	pQuad->begin("<strong><span style="color:#000099;BACKGROUND-COLOR: #cccccc">manualMaterial1</span></strong>", RenderOperation::OT_TRIANGLE_LIST);

	pQuad->position(0, 0, 0);
	pQuad->textureCoord(0, 1);

	pQuad->position(20, 0, 0);
	pQuad->textureCoord(1, 1);

	pQuad->position(20, 20, 0);
	pQuad->textureCoord(1, 0);

	pQuad->position(0, 20, 0);
	pQuad->textureCoord(0, 0);

	pQuad->triangle(0, 1, 2);
	pQuad->triangle(2, 3, 0);
	pQuad->end();
	pQuad->convertToMesh("Quad");

2. 创建entity后重新指定材质

	Ogre::Entity* pQuadEnt2 = mSceneMgr->createEntity("Quad");
	pQuadEnt2->setMaterialName("<strong><span style="color:#000099;BACKGROUND-COLOR: #cccccc">MyMaterial12</span></strong>");	// water + roate
	Ogre::SceneNode* pQuadNode2 = mSceneMgr->createSceneNode();
	pQuadNode2->attachObject(pQuadEnt2);

3. 创建plane entity时指定材质

 	// create plane
 	Ogre::Plane plane(Ogre::Vector3(0, 1, 0), -50);
 	Ogre::MeshManager::getSingleton().createPlane("planeMesh", Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME
  	, plane, 1500.0, 1500.0, 200, 200, true, 1, 5, 5, Ogre::Vector3::UNIT_Z);
 	Ogre::Entity* pPlaneEnt = mSceneMgr->createEntity("planeMesh");
 	pPlaneEnt->setMaterialName("Examples/GrassFloor");
 	Ogre::SceneNode* pPlaneNode = mSceneMgr->createSceneNode();
 	pPlaneNode->attachObject(pPlaneEnt);
时间: 2024-10-11 13:54:31

Ogre的材质创建和应用的相关文章

虚幻4游戏开发_3_创建与继承材质

感谢那位大神的视频教程,虽然找不到地址了,网上想找点ue4的视频教程真的很不容易,找到的,也大都是那种av画质模糊不清的,要高清的还要花钱卖,没讲什么东西还要花钱,真无力吐槽. 此博客根据那位大虾的视频教程整理后的图文教程,记下,以供以后查询和装B 创建材质: 1.新建文件夹为HERO(因为要给HERO这个动画模型新建材质) 2.右击->材质;重命名base,如下图:(新建好的是空的,灰色的,下面的我是做好了截图的,所以颜色不同) 3.双击base材质,进入蓝图界面: 注意:首先需要明确一点的就

Unity 游戏开发技巧集锦之创建部分光滑部分粗糙的材质

Unity 游戏开发技巧集锦之创建部分光滑部分粗糙的材质 创建部分光滑部分粗糙的材质 生活中,有类物体的表面既有光滑的部分,又有粗糙的部分,例如丽江的石板路,如图3-17所示,石板的表面本来是粗糙的,但是在石板上面走的人多了,石板的一部分就变得光滑了.有时,游戏为了显得更加逼真,就需要模拟这样一种材质. 图3-17  兼具光滑和粗糙表面的丽江石板路 要制作部分光滑部分粗糙的材质,需要用到两种资源:拥有镜面着色器的材质和模拟了现实状况的纹理. Unity中创建并配置材质 在Project视图里,创

材质与材质脚本

材质与材质脚本 一.基本概念 (一)Ogre的材质(Material) 为了优化渲染,必须把渲染状态的变化减少到最小.而最频繁的渲染状态改变是材料的变化(大多是纹理的变化). Ogre的Material类封装了物体的所有材料属性,类似于3D Studio中material的概念.平时不被认为是属于材料的属性,像culling模式和深度缓存设置等,也被Material包含近来了.因为这些属性同样影响了物体的外观,把它们放到Material类里可以集中设置所有影响物体的属性.这和D3D中只保存颜色组

转:Ogre的MaterialSystem分析

1. Mesh .SubMesh.SubEntity和Entity 所有的Mesh对象是由SubMesh构成的,每个SubMesh代表了Mesh对象的一部分,该部分只能使用一种Meterial.如果一个Mesh只采用一种Material,那么它可能只包含一个SubMesh. 当基于Mesh创建出一个Entity时,该Entity由多个SubEntity构建而成, SubEntity与Mesh中的SubMesh一一对应.可以通过调用Entity::getSubEntity方法获得SubEntity

Ogre参考手册(十二) 8 动画

8 动画 Ogre提供灵活的动画系统支持以下几种动画: 8.1 骨骼动画 骨骼动画通过移动网格中的树结构骨头实现,顶点通过绑定的骨头进行相应的移动.骨骼动画也叫皮肤动画.通常通过建模工具如SoftimageXSI,milkshape3D,Blender,3d Studio,Maya等创建.Ogre提供导出工具可以将这些模型转换为Ogre引擎自己的格式 可以为骨骼动画提供不同级别的支持,并不是所有引擎(包括建模工具)都支持全部的功能.Ogre支持以下内容: l  每个网格可以关联到一个骨骼 l 

转:Ogre源代码浅析——脚本及其解析(一)

Ogre的许多外部资源数据都有着相应的脚本格式,现例举如下: Material(材质):Ogre使用的是“大材质”的概念.狭义的“材质”概念往往是与“贴图”等概念区分开的,比如在Lambert光照模型中,它一般用来指物体表面对模拟光的环境分量.漫反射分量和镜面反射分量的作用的响应属性.而在Ogre中,“材质”既包括了上述狭义的材质含义,又包括对要使用的贴图的描述,还可以包括要使用的shader的相关信息.这些都是用Ogre的材质脚本来描述的.其实仔细思考一下就会发现,Ogre对材质概念的定义是恰

使用Three.js的材质

1.three.js提供哪些材质? MeshBasicMaterial(网格基础材质)/基础材质,,可以用它富裕几何体一种简单的亚瑟,或者显示几何体的线框 MeshDepthMaterial(网格深度材质)/根据网格到相机的举例,这种材质决定如何给网格染色 MeshNormalMaterial(网格法向材质)/这是一种简单的材质,根据物体表面的方向向量计算颜色 MeshFaceMaterial(网格面材质)/这是一个容器,可以在这个容器里为物体的各个表面指定不同的颜色 MeshLambertMa

Direct3D 光照和材质

  今天我们来学习下Direct3D里面的光源和材质. 四大光照类型: 环境光 Ambient Light 一个物体没有被光照直接照射,通过每一些物体反射的光线到达这个物体,它也有可能被看到.这种称为环境光 漫反射光 Diffuse Light 这种类型光沿着特定的方向传播,当达到某一个表面,它会向四周方向均匀反射(重点考虑反射光的空间位置和方向) 镜面反射光 Specular Light 当此类光到达一个表面时,严格地沿着一个方向反射. 自发光 Emissive Light 自发光就是对象自己

OGRE启动过程详解(OGRE HelloWorld程序原理解析)

本文介绍 OGRE 3D 1.9 程序的启动过程,即从程序启动到3D图形呈现,背后有哪些OGRE相关的代码被执行.会涉及的OGRE类包括: Root RenderSystem RenderWindow ResourceGroupManager LogManager Viewport SceneManager Camera SceneNode Entity Light 建议在阅读本文时参考OGRE API Reference,OGRE官方给的API Reference没有类的协作图,可以自己用Do