梦幻DUO的游戏开发之路

“学者们都是很单纯的,如果他们不单纯的话,戏剧般的灵感就不会造访他们了。” ——东野圭吾...

游戏程序员养成计划

仅供个人学习使用,请勿转载,勿用于任何商业用途。 作者:Clayman          与玩游戏相比,写游戏要复杂上千万倍,除了需要掌握通用的编程技巧以外,还要有相当的图形学,物理,数学基础,特别是在国内,由于相关资料的缺乏,更是让初学者无从下手。下面总结了一些入门方法和比较容易入手的资...

2015-07-19 13:47:53

阅读数:2075

评论数:0

DirectX11 输入设备——DirectInput检测鼠标、键盘状态

DirectX11 输入设备——DirectInput1. 什么是DirectInput? 由于windows应用程序的消息机制,Windows 成为了在应用程序和硬件之间的一堵无形的墙。 消息队列记录着各种事件,比如鼠标移动,键盘输入,或来自于操作系统本身的事件。这种获取事件的方式对于 Wi...

2015-07-24 20:49:01

阅读数:3794

评论数:0

DirectX11 绘制字体

DirectX11 绘制字体1. DirectX中如何实现绘制字体? 由于Direct3D11中微软移除了ID3DXFont这个在Direct3D 9中非常好用的字体接口,这样导致了目前的Direct3D11中竟然没有一个官方的字体解决方案。所以如果要绘制字体,必须要采取手动绘制文本的方式。 ...

2015-07-23 10:47:00

阅读数:2846

评论数:0

DirectX11 动态缓存

动态缓存1. 为什么需要动态缓存? 例如我们要在同一副精灵纹理中创建一套精灵动画,我们需要经常更改缓存中的顶点位置信息。动态缓存对于我们需要修改一块缓存中的内容的这种情况来说是很合适的。 不推荐多次创建和销毁静态缓存块,特别是逐帧这样做,你应该使用动态缓存来做这样的任务。 2. 如何创建动态顶...

2015-07-21 22:30:16

阅读数:897

评论数:0

DirectX11 混合状态

DirectX11混合状态1. 什么是混合状态? 在D3D11中,“混合”发生在像素着色器阶段的下一阶段,即Output Merger Stage。整个场景在全部经历过像素着色器阶段后,对应于屏幕上每一点像素,可能有多个片段(Fragment)。如下图所示: 当混合功能被打开...

2015-07-21 20:45:34

阅读数:1139

评论数:0

DirectX11 创建视图-投影矩阵

创建视图-投影矩阵1. 什么是视图矩阵和投影矩阵? 视图矩阵:在游戏中,特别是 3D 游戏,照相机扮演一个很大的角色。照相机取向用于几何体来模拟现实照相机的效果。照相机所代表的矩阵叫做视图矩阵。 投影矩阵:为了模拟照相机的位置和方向,我们增加一个投影的概念。一个投影矩阵用于模拟正投影(o...

2015-07-21 20:03:21

阅读数:894

评论数:0

DirectX11 常量缓存

常量缓存1. 常量缓存的作用是什么? 当我们渲染精灵的时候,我们使用位置、旋转和缩放值,来构建精灵的世界矩阵,一旦该世界矩阵构建好后,我们就使用常量缓存将该矩阵传递给顶点着色器,来实现数据的高速运输。常量缓存用于发送模型-视图矩阵给顶点着色器,使得它能够对输入的几何图形进行变换。 2. 如何创...

2015-07-21 14:33:23

阅读数:1022

评论数:2

DirectX11 获得纹理描述

获得纹理描述1. 为什么要获得纹理描述? 我们可以通过获得已经载入的纹理的入口地址(从着色器资源视图),来获得纹理的描述(包含宽和高),这些信息用于顶点缓存创建期间,使得图像的尺寸指示精灵在屏幕上的大小。 在我们创建顶点缓存之后,使用我们从纹理图像中获得的信息(宽和高)来创建常量缓存。 因此我...

2015-07-21 14:07:04

阅读数:781

评论数:0

DirectX11 采样状态对象

采样状态对象1. 采用状态对象有什么用? 采样状态描述用于描述纹理贴图的采样方式。一个采样状态对象允许我们访问一个纹理的采样状态信息。后面我们看采样状态描述结构体就知道有哪些内容可以描述了。 2. 采样状态可以描述哪些内容? 我们来看采样状态描述结构体D3D11_SAMPLER_DESC有...

2015-07-21 13:43:52

阅读数:1853

评论数:1

DirectX11 着色器资源视图

着色器资源视图1. 着色器资源视图是什么? 通常一个着色器还要附加其他资源才能发挥着色器的效果(比如法线高光着色器要附加一张基础纹理,是以基础纹理的alpha通道作为反射贴图和高光贴图的一个考量),着色器资源视图用于着色器中访问其他资源(如纹理)。一个着色器资源视图就是一个用于访问资源的着色器...

2015-07-20 23:56:07

阅读数:883

评论数:0

3D数学 矩阵和线性变换之切变

矩阵和线性变换之切变1. 什么是切变? 我们来看一幅图片。下面的图片,随着y增大,x的偏移会越来越大。这种类型的变换就叫切换。我们可以得到下图的公式x’ = x + sy。该公式转换成矩阵就得到了切变矩阵。 2. 切变效果的矩阵是怎样的? 在3D中,同样的道理,有如下右边三个矩阵,...

2015-07-20 22:34:05

阅读数:1671

评论数:0

3D数学 矩阵和线性变换之镜像

矩阵和线性变换之镜像1. 什么是镜像变换? 在2D中镜像变换就如下图所示,沿着某条轴发生对称现象就叫镜像变换。在3D中同理可以得到沿着某个平面发生对称的现象。 2. 镜像变换的矩阵是怎样的? 我们想来看简单的,沿着x轴、y轴或z轴发生镜像变换(注意是“沿着”轴的镜像,而不是“关于”...

2015-07-20 21:29:36

阅读数:881

评论数:0

3D数学 矩阵和线性变换之正交投影

矩阵和线性变换之正交投影1. 具有正交投影效果的矩阵是怎样的? 这里给出一个正交投影在法向量(而且同时又是单位向量)为(x,y,z)平面上的投影矩阵,数学证明暂时不说,详见《3d数学基础 图形与游戏开发》。 2. 投影矩阵编程示例void Matrix3X3::setOrthProje...

2015-07-20 20:31:07

阅读数:730

评论数:0

3D数学 矩阵和线性变换之缩放

矩阵和线性变换之缩放1. 具有缩放效果的矩阵是怎样的? 我们这里只做沿着x、y、z轴方向的缩放,至于沿着任意方向的缩放比较复杂而且也很少用,所以暂时不介绍。如下图所示,原理非常简单,x、y、z乘上对应的缩放系数kx,ky,kz就得到了缩放后的结果。 2. 缩放矩阵编程示例void Ma...

2015-07-20 20:00:51

阅读数:591

评论数:0

3D数学 矩阵和线性变换之旋转

矩阵和线性变换之旋转1. 如何在3D世界中对坐标进行变换? 我们可以通过产生一个具有某种变换效果的矩形,用坐标上的某个点乘上这个矩阵,就会得到变换后的点。这是线性代数中线性变换的内容。 2. 具有旋转效果的矩阵如何生成? 首先说明下,这本书里用的都是左手坐标系。我们规定左手坐标系,拇指朝向...

2015-07-19 18:52:42

阅读数:2125

评论数:2

DirectX11 渲染——输入装配、绑定着色器、绘制

DirectX11 渲染——输入装配、绑定着色器、绘制网格1.输入装配有哪些工作要做? 每次渲染我们都要考虑使用哪个输入布局来渲染几何图形。所以我们使用Direct3D环境对象的IASetInputLayout函数用于绑定我们所创建的顶点布局,该函数只有一个单一的类型为 ID3D11In...

2015-07-19 08:54:23

阅读数:1325

评论数:0

DirectX11 创建输入布局

创建输入布局1. 输入布局有什么作用? 当我们发送几何图形到显卡上时(发送给顶点着色器),我们是发送它的一大块数据。 为了让 Direct3D 知道所定义的各种属性,它们的顺序,和大小,我们使用一种叫做输入布局的东西告诉 API 关于我们所绘制的几何图形的数据的顶点布局。在Direct3D 中...

2015-07-18 21:46:27

阅读数:952

评论数:0

DirectX11 编译着色器、创建顶点着色器、创建像素着色器

编译着色器1. 如何让GPU执行着色器代码? 你能够选择已经编译好的字节码,或者像我们直接由Direct3D来编译它,它可被本书后面的Demo所接受。编译一个着色器只需调用D3DX11CompileFormFile函数,该函数有很多个参数,我们一一细看: 第一个参数是HLSL着色器代码的...

2015-07-18 21:16:32

阅读数:2824

评论数:0

DirectX11 图形流水线历史以及着色器简介

图形流水线历史Direct3D要求使用着色器来渲染几何图形,因此我们会在深入讨论着色器之前就会遇到它们。为了了解着色器的由来,我们首先要了解下图形流水线的历史。 图形流水线是什么? 图形流水线是GPU(图形处理器,显卡的心脏)工作的通用模型。它以某种形式表示的三维场景或物体为输入,输出二维的光...

2015-07-18 13:07:33

阅读数:1281

评论数:0

DirectX11 创建顶点缓存

顶点缓存 顶点缓存有什么作用? 顶点缓存用于储存网格模型的所有顶点数据。当我们在Direct3D中创建一块顶点缓存时,我们是在创建一个内存的最优位置上的对象,该最优位置例如是图形硬件的显存,它由硬件的设备驱动所选择。当Direct3D渲染我们的对象时,它通过图形总线来变换这些缓存信息,通过渲染...

2015-07-17 23:26:08

阅读数:1021

评论数:0

提示
确定要删除当前文章?
取消 删除
关闭
关闭