阅读一款3D引擎的方法[转]

news/2024/7/20 14:48:08 标签: 内存管理
好文需要备忘,转载自: http://www.cnitblog.com/linghuye/archive/2009/11/29/62870.html
要带着引擎系统所共有的问题去阅读,不要被具体引擎的实现思路牵着走,要思考这个引擎如何实现或绕过(如不考虑低端机)这些必然要面临的问题.

首先,最重要的必须,在Debug模式下调试起来一个主场景程序,然后沿着代码流走几遍,在代码里闲逛,生成第一印象,留意基础工具设施类(如字符串内存管理),大约3小时.
然后带着如下每一个问题(不分先后)去走流程,走逻辑,弄清引擎的业务处理方法.

1.SetStreamSource,SetIndices,DrawIndexedPrimitive的调用是在哪里(哪个cpp哪个类的哪个函数),整个工程有几个DrawIndexedPrimitve,DrawPrimitveUp,DrawXXX,被统一管理了吗,还是零零散散地分布在各个cpp各个类?

2.纹理资源是如何管理的?句柄,ID,指针? 按使用时间,按使用计数? 模型顶点资源是如何管理的,是否有Buffer分配上的优化(比如顶点缓冲整合)? 渲染的实例数据如何管理,如何与资源概念区分的? 纯3D资源如Shader/RenderTarget是如何管理的?

3.场景管理是怎样搭建的,如何包含区分节点实例数据和资源数据?镜头是如何被各模块访问的?剔除不可见物件的代码行在哪里?兼容各种算法吗,使用了具体的算法是什么?不论使用何种算法,场景管理模块是否提供了清晰的需求定义接口?

4.骨骼动画是在哪里计算的,具体到顶点乘以矩阵是在哪个cpp的哪个代码行里?Socket实现在哪里?如果有高级动画系统,骨架在哪里,有什么功能?动作融合的矩阵间过渡代码在哪一行?

5.异步数据加载是怎样做的,在哪个cpp里,由哪个模块管理?各个资源的加载读取cpp代码行在哪里?

6.渲染管线如何为ShadowMap提供深度图,如何为CubeMap,水面反射提供场景RenderTarget?如何管理固定流水线状态RasterState的?

7.材质管理系统是如何运作的(通常都是technique + multipass),如何并入管线的,如何从理论上保证可以实现各式各样的效果的?如何抽象兼容固定和可编程流水线的? 如果是抽象管理的,如何抽象掉不同的technique下的不同的数据?管线里是否有独立的后期效果,还是用材质表达出来?材质是否可以脚本化?材质是要分组的,排序的代码段在哪个cpp的哪里?

8.特效如粒子系统到最后是使用哪个DrawXXX画出来的? 粒子系统是动态公式计算(不要理会具体公式)还是帧动画?

9.界面2D Texture Draw是如何被支持的?文字渲染是如何被支持的,特别是如何支持中文的,字体资源如何被管理?是否使用Freetype,是否支持东亚文字?

10.物理系统的接口是如何定义引擎的需求的?或者就是乱糟糟地直接用上.

转载于:https://www.cnblogs.com/billin/archive/2011/01/31/1948423.html


http://www.niftyadmin.cn/n/1295951.html

相关文章

电脑应用程序出错解决方案

有时,我们在电脑上打开任何软件都会弹出一个方框如下: 据我所知,这种情况的出面有可能跟硬件内存有关 可能是内存的金手指有灰尘,你可用橡皮来擦拭一下试试 以下是找来的答案,可做参考一、应用程序没有检查内存分配…

Mysql日期和时间函数

mysql> SELECT something FROM table WHERE TO_DAYS(NOW()) - TO_DAYS(date_col) < 30; DAYOFWEEK(date) 返回日期date的星期索引(1星期天&#xff0c;2星期一, ……7星期六)。这些索引值对应于ODBC标准。 mysql> select DAYOFWEEK(1998-02-03); -> 3 …

二进制整数奇偶互换c语言,奇偶

信息学奥赛一本通题库 题号&#xff1a;1041&#xff1a;奇偶数判断题号&#xff1a;1041&#xff1a;奇偶数判断时间限制: 1000 ms 内存限制: 65536 KB题目描述&#xff1a; 给定一个整数&#xff0c;判断该数是奇数还是偶数。如果n是奇数&#xff0c;输出odd&#xff1b;如果…

产品开发中不给力语录

经过一个多月的努力&#xff0c;我的iPhone作算是有惊无险地完成了&#xff0c;但由于用户体验的方面的不足被迫推迟发布。最近在解决的同时也在反思这这个开发过程。回顾下过去的一个多月&#xff0c;有几句话深深影响了这个产品现在的命运。 1 策划&#xff1a;“这是用户需要…

Android 自动动画布局更新 使用,自动布局做动画的应用

使用自动布局做动画&#xff0c;就是通过更改控件的frame来实现动画&#xff0c;但是不能直接更改frame,可以更改控件的约束关系来实现&#xff0c;其注意事项如下&#xff1a;自动布局的页面实现动画效果需要注意1.不能够直接修改frame,可能会引起自动布局系统计算错误2.直接修…

php 编译参数

./configure –prefix/usr/local/php php安装目录 –with-apxs2/usr/local/apache/bin/apxs –with-config-file-path/usr/local/php/etc 指定php.ini位置 –with-mysql/usr/local/mysql …

android+4.4+打印功能,如何使用Android 4.4打印框架打印PDF

Dinesh T A..73在google上花了几个小时后我找到了解决方案.PrintManager printManager (PrintManager) this.getSystemService(Context.PRINT_SERVICE);String jobName this.getString(R.string.app_name) " Document";printManager.print(jobName, pda, null);Pr…

春天喝什么茶最健康

中医认为&#xff0c;茶叶因种类不同&#xff0c;其性能和功效也各异&#xff0c;对人体的保健也有不同的作用&#xff0c;所以一年四季饮茶应根据茶叶的性能和功效&#xff0c;随季节的变化而选择不同品种的茶叶。 春季&#xff0c;天气乍暖还寒&#xff0c;以饮用香气浓郁的花…