把DirectX龙书读薄--大纲
2015-09-11 15:52
155 查看
记得当初大二寒假的时候读了《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 模板
相关文章推荐
- Android 短信发送流程(修改版)
- git常用命令
- java.lang.OutOfMemoryError解决办法
- mybatis 有用连接
- 代码在windows下运行只有12s,但是在linux下需要50s时,这样优化就可以解决
- linux下用fdisk命令制作U盘启动盘
- SQL Server 日期 时间类型
- Junit4进行参数化测试
- Linux rsync + crontab to do backup
- GCD 之线程死锁
- IOS开发系列
- 安卓笔记
- 【Developer Log】MySQL远程连接时间长的原因和解决方式
- 解决adb连接海马玩模拟器
- swift
- Unity 游戏开发技巧集锦之创建部分光滑部分粗糙的材质
- [Java] IO 流的学习
- 节日-CCF测试往届题(80分)仍在debug,求指导
- 【 虚拟局域网VlanTrunk配置】chore.仅作为个人分享
- JDK 源码 -- SET