记得当初大二寒假的时候读了《Windows游戏编程》那本书,我当初是抱着很大的希望去读的,希望可以从中得到修炼成一名合格游戏程序员之道。然而,那个时候的我连接口的定义尚且都搞不清楚,很快我就迷失在纷杂的代码段中,这本书我读了三分之一不到就弃置一旁了。
后来我学习了Unity3D,发现原来做游戏这么简单。后来我又学习了计算机图形学,发现了其实做游戏简单,但是游戏背后的实现要难上加难,仅仅是图形引擎的实现就非常困难。
我读这本书的意义
我认为,无论是作为一名游戏性程序员还是一名游戏引擎程序员,对其实现原理都应该有所掌握。枉论游戏引擎程序员,对于一名合格的游戏性程序员来说,空有操作经验,而没有其深层次的感悟,我觉得很难进步。而且也很枯燥。
因此,我决定先”略读“一下这本DirectX中的龙书——3D游戏开发编程基础
我读这本书的方式
我的时间不太允许我去仔细读这本书,甚至是对实现例程也不太可能一个一个实现。而且,我很担心在代码的细节中失去耐心。我打算将这本书所提到的各个概念、其作用做一个总结。这样,后来若是要精读,这篇文章会成为一个非常好的提纲。
第一部分的基础知识我觉得对我不是很重要,这里先略过。 需要补充再来。
1 初始化 Direct3D
在图形实现中的位置
应用程序=》Direct3D=》HAL=》图形设备
hal相当于一个图形设备的指令集
又由于有些图形设备不支持DX的部分功能,这时需要REF(reference rasterizer device)来模拟实现。
组件对象模型
表面
多重采样
像素格式 存储一个像素信息的数据结构
内存池 资源所在
交换链和页面置换 前台缓存显示在屏幕上,后台缓存是正在被处理的帧
深度缓存 每一个像素都会有一个深度(entry),选出离相机最近的
顶点运算(vertex processing)
Direct3D初始化步骤
- 获取接口指针
- 检查设备性能
- 初始化一个设置项
- 用设置项来生成一个Device对象
direct3d是对图形设备的操作!
2 绘制流水线
三角形单元 拼凑出各种多面体的模型
索引 点的索引,防止多点重合
虚拟摄像机 定义了可见的空间体积 平截头体 投影窗口一个2d区域 投影平面
局部坐标系=>世界坐标系=>观察坐标=> 背面消隐 =>光照=> 裁剪 =>投影=>视口变换=> 光栅化
3 Direct3D的绘制
使用顶点和索引缓存进行绘制
4 颜色
颜色表示方法 alpha R G B
顶点颜色 和着色
5 光照
环境光 经其他平面反射 到达物体表面
漫射光 方向特定,到达物体表面时会向各个方向均匀反射
镜面光 方向特定,到达物体表面时会向特定方向反射
材质正是建立在对这三种光的处理上的
- Diffuse对漫射光的反射率
- Ambient 对环境光的反射率
- Specular 对镜面光的反射率
- Emissive 增强物体的亮度,使其好像可以自己发光
- Power 镜面高光点的Sharpness(锐度)
顶点法线
光的反射需要发现。对光的反射的计算是在顶点上完成的,所以需要顶点法线。
光源
- 电光源
- 方向光
- 聚光灯
6 纹理映射
texture mapping,将图形数据映射到三角形单元中去!
多级渐进纹理:对分辨率不同做出的妥协
7 融合技术
将当前要进行光栅化的像素的颜色 与 先前已经光栅化的同一位置的像素的颜色 进行合并
- 融合方程
- 融合因子(颜色占最后结果的比重)
- 透明度
8 模板
版权声明:本文为博主原创文章,转载请标明出处。