您的位置:首页 > 其它

Ogre Demo_BezierPatch 贝塞尔曲线

2010-03-12 11:51 267 查看
1. 用顶点数组在创建Bezier Patch的步骤

1) 调用硬件缓存管理器创建顶点声明, 查看需要哪些元素

HardwareBufferManager::getSingleton().createVertexDeclaration();

而后用addElement方法添加元素

2) 填充一段内存的数据用于硬件缓存, 注意数据紧密贴近, VC编译器用#pragma pack实现

3) MeshManager类的createBezierPatch方法使用了硬件缓存中的内容。



2. 用于设置Bezier图片的很重要的类 PatchMeshPtr

PatchMesh为Mesh的派生类, 手工创建后可被Entity使用, 由MeshManager::createBezierPatch创建

所使用的重要方法为 setSubdivision, 参数为因子, 为Bezier Mesh的细分度, 范围为 0.0 - 1.0 。

3. 类 VertexDeclaration 公有继承自VertexDataAlloc, 可用于产生Bezier Mesh, 用硬件缓存来创建

该类声明了一系列顶点输入的格式, 渲染API通过RenderOperation处理这些输入数据

VertexDeclaration的次序与结构对于旧显卡的DirectX非常重要, 如果你想要保证所有渲染系统和所有显卡的最大性能, 你需要注意以下规则:

1) VertexElements 应当按如下顺序添加, 共享缓存内的元素次序也应当如下:

位置, 混合权重, 发现, 散射颜色, 镜面颜色, 纹理坐标(按次序,中间无空白处-对齐产生的缺漏)

2) 不要缺少任何元素

3) 元素之间不要重叠

4. frameRenderingQueued方法用于替代frameStarted和frameEnded, 这个方法可以和GPU同步运行, 计算的结果下一帧才渲染, 可以提高效率

5. 手工创建材质, MaterialManager的create方法可以创建材质, 然后调用getTechnique(0)->getPass(0)来设置第一个通道的材质内容

用全局pass指针在监听器中动态修改材质, 另Pass可调用setPolygonMode方法设置多边形模式

6. 在destroyScene方法里, 注意SharedPtr指针要调用方法setNull来清除对象, 否则退出程序会产生中断错误。

7. 以下格式创建的结构体是所有成员大小之和, 不会产生对齐方式生成的多余大小

#if OGRE_COMPILER == OGRE_COMPILER_MSVC

#pragma pack(push)

#pragma pack(1)

#endif

......

#if OGRE_COMPILER == OGRE_COMPILER_MSVC

#pragma pack(pop)

#endif

8. 本程序设置的项目配置选项

输出目录: ../bin/$(ConfigurationName)

中间目录: ../obj/$(ConfigurationName)

字符集: 多字节

附加包含目录: $(OGRE_HOME)/include;$(OGRE_HOME)/Dependencies/include

输出文件: $(OutDir)/Example_BezierPatch.exe

附加库目录: $(OGRE_HOME)/lib;$(OGRE_HOME)/Dependencies/lib/$(ConfigurationName)

依赖项: OgreMain_d.lib OIS_d.lib

9. 源代码初始框架:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: