- 3
- 0
- 约 9页
- 2016-08-23 发布于河南
- 举报
Demo_Ocean 源码解析
因为最近在做水,所以这篇海洋的例子是必须要读懂的。
耐着性子看了一下,还是能看懂的。现在将代码解析放上来。
程序共有四个文件:
MaterialControls.h :
MaterialControls.cpp
包含一个Shader属性结构和材质结构。其中Shader属性结构对应于海洋中模型对应VS,PS的一些属性。
材质结构中包含了若干这个属性。使用一个容器来存放。
另外有两个函数讲述了如何从资源名称中得到scripts目录下的Ocean.controls文件,并从中将一大堆的的材质和Shader属性信息载入到对应的结构中。
OceanDemo.h
OceanDemo.cpp
程序和界面框架。
//============================================================
OceanDemo.h
/*-----------------------------------------------------------------------------This source file is part of OGRE (Object-oriented Graphics Rendering Engine)For the latest info, see /
Copyright (c) 2000-2006 Torus Knot Software LtdAlso see acknowledgements in Readme.html
You may use this sample code for anything you like, it is not covered by theLGPL like the rest of the engine.
材质控制器,对材质的各种参数进行设置-----------------------------------------------------------------------------*/
#ifndef __MaterialControls_H__#define __MaterialControls_H__
#include CEGUI/CEGUIForwardRefs.h#include OgreString.h
//Shader参数类型enum ShaderValType{ GPU_VERTEX, GPU_FRAGMENT, MAT_SPECULAR, MAT_DIFFUSE, MAT_AMBIENT, MAT_SHININESS, MAT_EMISSIVE};//顶点//碎片//反射//漫反射//环境光//镜面反射//发射光//---------------------------------------------------------------------------
//Shader控制器(一个Shader属性的结构)struct ShaderControl{ Ogre::String Name; //Shader名称 Ogre::String ParamName; //属性名称 ShaderValType ValType; //Shader参数类型 float MinVal; //最小值 float MaxVal; //最大值 size_t ElementIndex; //属性索引 mutable size_t PhysicalIndex; //物理索引
float getRange(void) const { return MaxVal - MinVal; } //取得差值 float convertParamToScrollPosition(const float val) const { return val - MinVal; } //由属性取得对应滚动条的索引位置 float convertScrollPositionToParam(const float val) const { return val + MinVal; } //由索引取得对应的属性};
//Shader属性结构容器typedef std::vectorShaderControl ShaderControlsContainer;//对应的迭代器typedef ShaderControlsContainer::iterator ShaderControlIterator;// used for materials that have user contr
原创力文档

文档评论(0)