阅读一款3D引擎的方法备忘

阅读一款3D引擎的方法备忘

此文为转载,根据引擎模块对相关方法进行了归类,略作改动,具体内容如下:

 

要带着引擎系统所共有的问题去阅读,不要被具体引擎的实现思路牵着走,要思考这个引擎如何实现或绕过(如不考虑低端机)这些必然要面临的问题.

首先,最重要的必须,在Debug模式下调试起来一个主场景程序,然后沿着代码流走几遍,在代码里闲逛,生成第一印象,留意基础工具设施类(如字符串内存管理),大约3小时.
然后带着如下每一个问题(不分先后)去走流程,走逻辑,弄清引擎的业务处理方法.
具体包括以下几方面:
一、资源管理:
1. 材质:
  1.1 纹理
纹理资源是如何管理的?句柄,ID,指针? 按使用时间,按使用计数?
  1.2 统一管理接口
材质管理系统是如何运作的(通常都是technique + multipass),如何并入管线的,如何从理论上保证可以实现各式各样的效果的?
如何抽象兼容固定和可编程流水线的?
如果是抽象管理的,如何抽象掉不同的technique下的不同的数据?
管线里是否有独立的后期效果,还是用材质表达出来?
材质是否可以脚本化?
材质是要分组的,排序的代码段在哪个cpp的哪里?
2. 模型:
模型顶点资源是如何管理的,是否有Buffer分配上的优化(比如顶点缓冲整合)?
3.特效资源:
纯3D资源如Shader/RenderTarget是如何管理的?
特效如粒子系统到最后是使用哪个DrawXXX画出来的? 粒子系统是动态公式计算(不要理会具体公式)还是帧动画?
4.动画
骨骼动画是在哪里计算的,具体到顶点乘以矩阵是在哪个cpp的哪个代码行里?
Socket实现在哪里?
如果有高级动画系统,骨架在哪里,有什么功能?
动作融合的矩阵间过渡代码在哪一行?
5.待渲染的实例对象
渲染的实例数据如何管理,如何与资源概念区分的?
6. 资源加载
异步数据加载是怎样做的,在哪个cpp里,由哪个模块管理?
各个资源的加载读取cpp代码行在哪里?
二、场景组织:
1. 场景结构
场景管理是怎样搭建的,如何包含区分节点实例数据和资源数据?
2. 相机系统
镜头是如何被各模块访问的?
3. 裁剪、剔除:
剔除不可见物件的代码行在哪里?兼容各种算法吗,使用了具体的算法是什么?
不论使用何种算法,场景管理模块是否提供了清晰的需求定义接口?
三、渲染:
1. 渲染管线
渲染管线如何为ShadowMap提供深度图,
如何为CubeMap,水面反射提供场景RenderTarget?
如何管理固定流水线状态RasterState的?
2. 绘制接口组织与调用
SetStreamSource,SetIndices,DrawIndexedPrimitive的调用是在哪里(哪个cpp哪个类的哪个函数),
整个工程有几个DrawIndexedPrimitve,DrawPrimitveUp,DrawXXX,被统一管理了吗,还是零零散散地分布在各个cpp各个类?
四、物理
物理系统的接口是如何定义引擎的需求的?或者就是乱糟糟地直接用上.
五、UI
1.界面背景
界面2D Texture Draw是如何被支持的?
2. 文字
文字渲染是如何被支持的,特别是如何支持中文的,字体资源如何被管理?是否使用Freetype,是否支持东亚文字?
六、网络通信

源自: http://www.cnitblog.com/linghuye/archive/2009/11/29/62870.html
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值