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

首先,最重要的必须,在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.物理系统的接口是如何定义引擎的需求的?或者就是乱糟糟地直接用上.

阅读一款3D引擎的方法备忘相关推荐

  1. [译] Kotlin 标准方法备忘

    原文地址:Kotlin Standard Functions cheat-sheet 原文作者:Jose Alcérreca 译文出自:掘金翻译计划 本文永久链接:github.com/xitu/go ...

  2. 3D引擎优化方法整理

    来自:http://blog.csdn.net/udking/article/details/6048210 [游戏开发]DirectX 性能优化:(From D3D9 SDK)2009-06-04 ...

  3. 推荐一款可自动即时保存备忘内容的电脑记事本软件

    有很多小伙伴都有过用电脑记事本.便利贴等记录了好多内容后,没有点击保存直接关了!这就很尴尬了!刚写好的东西没保存可是找不回来的! 如果用全百科备忘记事本软件就不会发生这样的问题了!全百科备忘记事本软件 ...

  4. AR9331出现connect-debounce failed,port 1 disabled解决方法备忘

    基于AR9331的路由器,自己画的pcb板子,竟然出现这个错误,百度下,貌似有不少人遇见过这个错误,但是在修改板子前我的固件用的是没问题的,USB完美使用 修改过板子后出现这个问题! hub 1-0: ...

  5. 16款vscode神器(收藏备忘)

    drawio:一款强大.免费.开源的绘图工具,可以代替visio,支持LaTeX,全平台!使用简介可参考传送门 Doxygen Documentation Generator:自动生成注释,也可用ko ...

  6. 0xc000007b错误 - 解决方法备忘(vc red重装)

    关于这个,大部分网络文章一般将该错误定性为directx错误,加上此时重新安装directx会遇到"内部系统错误",更加增加了迷惑性.近期安装MAYA2013后遇到了这种情况,我以 ...

  7. windows中 修改某种文件图标 的方法 (备忘)

    某些文件类型在windows没有特别的图标显示, 特别是对于工程师来说,在一个project文件夹下, 经常会有一堆相同文件名不同扩展名的文件, 当你要找其中一个时, 瞪大眼睛瞅半天. 比如我想在一个 ...

  8. jquery中的ajax方法(备忘)

    参考:https://www.cnblogs.com/tylerdonet/p/3520862.html w3school:http://www.w3school.com.cn/jquery/ajax ...

  9. JAVA中获得一个月最大天数的方法(备忘)

    Calendar 类是一个抽象类,为日历字段之间的转换提供了一些方法. 其中有一个重要方法 getActualMaximum ,该方法用于返回指定日历字段实际的最大值. 利用这个方法(Calendar ...

最新文章

  1. Hashtable和HashMap的区别:
  2. 两所大学中的智能车竞赛校内赛
  3. GPU 原理解密(一)画个三角形居然这么难
  4. 刚开始学C 语言 怎么编写小程序,用C 语言 程序怎么样编写一个小程序 工具
  5. js(Dom+Bom)第一天(2)
  6. python——学习登录用户和密码的判断——1
  7. keil5怎么放大字体_keil5如何设置字体大小-keil设置字体大小的方法
  8. 净化-湿式除尘器:湿式除尘器
  9. CCF 201712-3 Crontab
  10. 计算机会计处理流程,会计电算化账务系统期末处理流程
  11. 知网研学打不开?一片空白怎么办?一步解决
  12. ckplayer在手机用不了解决方法
  13. R语言 非参数检验:Mann-Whitney检验和Wilcoxon检验
  14. 【Nginx 快速入门】反向代理、负载均衡、动静分离
  15. Windows10 调整屏幕颜色,设置暖色屏幕的办法
  16. mysql时间格式化%Y与%y_MySQL日期格式化 DATE_FORMAT() 函数
  17. 一、安装docker
  18. Python爬虫,数据可视化之matplotlib初步--制作一个高楼高度的条形统计图全思路
  19. Android kotlin工具类获取屏幕分辨率及宽高
  20. 押宝ACE平台 北电自救或转身服务型公司

热门文章

  1. 整合swagger2生成Restful Api接口文档
  2. [转]一个总成本花费100W的失败项目的小小反省
  3. 弹性地基梁板法计算原理_地基下沉别慌张!沉着冷静用对地基加固法
  4. python网格搜索核函数_机器学习笔记——模型调参利器 GridSearchCV(网格搜索)参数的说明...
  5. 微信小程序 html css xml,微信小程序 使用towxml解析html流程及踩坑记录
  6. 【数理知识】《数值分析》李庆扬老师-第6章-解线性方程组的迭代法
  7. 01、DFT-全面了解如何测试一颗芯片
  8. 硬核创客DIY遥控氦气球飞行器——会飞的鲨鱼的诞生的全过程
  9. C++虚成员函数表vtable
  10. Python----Requests库基本使用