把DirectX龙书读薄--大纲

记得当初大二寒假的时候读了《Windows游戏编程》那本书,我当初是抱着很大的希望去读的,希望可以从中得到修炼成一名合格游戏程序员之道。然而,那个时候的我连接口的定义尚且都搞不清楚,很快我就迷失在纷杂的代码段中,这本书我读了三分之一不到就弃置一旁了。
后来我学习了Unity3D,发现原来做游戏这么简单。后来我又学习了计算机图形学,发现了其实做游戏简单,但是游戏背后的实现要难上加难,仅仅是图形引擎的实现就非常困难。

我读这本书的意义

我认为,无论是作为一名游戏性程序员还是一名游戏引擎程序员,对其实现原理都应该有所掌握。枉论游戏引擎程序员,对于一名合格的游戏性程序员来说,空有操作经验,而没有其深层次的感悟,我觉得很难进步。而且也很枯燥。
因此,我决定先”略读“一下这本DirectX中的龙书——3D游戏开发编程基础

我读这本书的方式

我的时间不太允许我去仔细读这本书,甚至是对实现例程也不太可能一个一个实现。而且,我很担心在代码的细节中失去耐心。我打算将这本书所提到的各个概念、其作用做一个总结。这样,后来若是要精读,这篇文章会成为一个非常好的提纲。

第一部分的基础知识我觉得对我不是很重要,这里先略过。 需要补充再来。

1 初始化 Direct3D

在图形实现中的位置

应用程序=》Direct3D=》HAL=》图形设备

hal相当于一个图形设备的指令集

又由于有些图形设备不支持DX的部分功能,这时需要REF(reference rasterizer device)来模拟实现。

组件对象模型

表面
多重采样

像素格式 存储一个像素信息的数据结构
内存池 资源所在
交换链和页面置换 前台缓存显示在屏幕上,后台缓存是正在被处理的帧
深度缓存 每一个像素都会有一个深度(entry),选出离相机最近的
顶点运算(vertex processing)

Direct3D初始化步骤

  1. 获取接口指针
  2. 检查设备性能
  3. 初始化一个设置项
  4. 用设置项来生成一个Device对象

direct3d是对图形设备的操作!

2 绘制流水线

三角形单元 拼凑出各种多面体的模型
索引 点的索引,防止多点重合
虚拟摄像机 定义了可见的空间体积 平截头体 投影窗口一个2d区域 投影平面

局部坐标系=>世界坐标系=>观察坐标=> 背面消隐 =>光照=> 裁剪 =>投影=>视口变换=> 光栅化

3 Direct3D的绘制

使用顶点和索引缓存进行绘制

4 颜色

颜色表示方法 alpha R G B
顶点颜色 和着色

5 光照

环境光 经其他平面反射 到达物体表面
漫射光 方向特定,到达物体表面时会向各个方向均匀反射
镜面光 方向特定,到达物体表面时会向特定方向反射

材质正是建立在对这三种光的处理上的

  • Diffuse对漫射光的反射率
  • Ambient 对环境光的反射率
  • Specular 对镜面光的反射率
  • Emissive 增强物体的亮度,使其好像可以自己发光
  • Power 镜面高光点的Sharpness(锐度)

顶点法线
光的反射需要发现。对光的反射的计算是在顶点上完成的,所以需要顶点法线。

光源

  • 电光源
  • 方向光
  • 聚光灯

6 纹理映射

texture mapping,将图形数据映射到三角形单元中去!
多级渐进纹理:对分辨率不同做出的妥协

7 融合技术

将当前要进行光栅化的像素的颜色 与 先前已经光栅化的同一位置的像素的颜色 进行合并

  1. 融合方程
  2. 融合因子(颜色占最后结果的比重)
  3. 透明度

8 模板

版权声明:本文为博主原创文章,转载请标明出处。

posted @ 2015-09-11 15:52  Fridge  阅读(586)  评论(0编辑  收藏  举报