Ogre Demo_BezierPatch 贝塞尔曲线

541 篇文章 26 订阅
126 篇文章 6 订阅

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. 源代码初始框架:

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值