自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

梦幻DUO的游戏开发之路

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

  • 博客(60)
  • 资源 (6)
  • 收藏
  • 关注

原创 3D数学 欧拉角类源代码(附中文注释)

欧拉角类源代码(附中文注释)///////////////////////////////////////////////////////////////////////////////// 3D数学基础:游戏与图形开发// 3D Math Primer for Games and Graphics Development//// EulerAngles.h - 欧拉角类声明// Eul

2015-10-31 22:38:46 1674 1

原创 3D数学 4x3矩阵类源代码(附中文注释)

4x3矩阵类///////////////////////////////////////////////////////////////////////////////// 3D数学基础:游戏与图形开发// 3D Math Primer for Games and Graphics Development//// Matrix4x3.h - Matrix4x3类声明// Matrix4

2015-10-31 21:35:08 2747

原创 英语语法 不定词与动名词的区分

传统语法所称的动状词(Verbals),包括现在分词(Ving)、过去分词(Ven)、动名词(Ving)与不定词(to V)等等。其中现在分词、过去分词是形容词类,不定词则是“不一定什么词类”:它可以当名词、形容词、副词使用。这就产生了一些混淆点。比如说,动词后面的宾语位置,必须用名词类。可是动名词和不定词都可以当做名词使用(分词只能当形容词,可以不必考虑),到底应如何区分?这就要借助我们刚才的观察

2015-10-27 23:07:33 1401

原创 英语语法 不定词与助动词的共同点

不定词与助动词的共同点要了解不定词与助动词之间的关系,不妨先看一个例子:  I am glad to know you.(很高兴能认识你。)这是一句简单的会话用语,读者应该都能脱口而出。可是如果追问下去:“为什么用不定词to know you?”“为什么不能用动名词knowing you?”恐怕许多读者就答不上来了。(请不要回答“我背过”,或者“这是惯用法”、“这是短语”;语法要求理解,不能打迷糊仗

2015-10-27 22:40:49 1469

原创 英语语法 完成式的未来时间

未来时间的完成式,只是把箭头所指的截止时间移到未来的一个点。观念上与现在、过去时间的完成式完全一样。在写法上,因为是未来时间,所以动词前面加一个will就可以了。请看例句:   例:In two more minutes,she will have been talking on the phone for three hours!    (再过两分钟,她就一直打了足足三小时的电话了!)

2015-10-11 09:47:07 525

原创 英语语法 完成式的过去时间

如果没有特别交代的话,一般说“有…过”就是“到现在有…过”,所以都是现在完成式。用过去完成式时则要有一个过去的截止时间,也就是箭头指在一个过去时间,在那之前就 “有…过”。   例:I had been smoking three packs of cigarettes a day before I decided to quit.    (我决定戒烟之前,每天要抽三包烟。)   deci

2015-10-11 09:41:36 610

原创 英语语法 完成式的现在时间

完成式   另一种主要的状态是完成式。相对于简单式用括弧形状来表达时间,完成式则是以箭头形状来表达时间,表示动作的截止时间。从功能上来看,简单式是交代动作发生的时段,而完成式并不对动作发生的时段作明确的交代,只表示“曾经”、“做过”的意思。请看看下面的例句。现在时间   例:I’m sure I have seen this face somewhere.    (我肯定曾经见过这张脸。)

2015-10-11 09:36:23 574

原创 英语语法 简单式的未来时间

未来时间的简单式,只是把括弧放在now的右边,其他的原理则完全相同。例:There will be a major election in March.    (三月将有一次大选。) 时间副词in March是一个未来时间的括弧。只要可以括出时间来就是简单式。未来的事情还没发生,尚未确定,所以要加一个助动词will在前面,意思是“到时候会”。

2015-10-11 09:24:36 572

原创 英语语法 简单式的现在时间

如果时间副词是now,或是以now为中心的或大或小的括弧,就要用现在时间的简单式。从前语法书中列出规则:真理以及事实要用现在简单式表示。其实这也没什么好背的。因为,只有在以now为中心的括弧,可以大到涵盖过去未来,才可以用来表示不变的真理。请看下面这些例子:   例: Huang pitches a fast ball.Li swings.It looks like a hit.The shorts

2015-10-11 09:16:32 820

原创 英语语法 简单式的过去时间

简单式   简单式的动词可以清楚交代此动作是发生于哪个时段。而与它搭配的时间副词通常会明确标示出一个时段。也就是说:简单式的时间是括弧的形状,我们可以用括弧把简单式的时间括起来。在以下的叙述中,我们就以括弧来表示简单式中所描述的时间,这个括弧大小不拘,可以小到一个点,也可以大到无限,可是必须标示得很明确。现在来看看几个例子,请注意观察动词时态与时间副词之间的关系:过去时间   例:The U.S

2015-10-11 08:25:55 745

原创 英语语法 定冠词与专有名词

专有名词的定义是:只有一个对象存在的名词,像Genghis Khan和Taibei等。既然只有一个对象存在,就没有“这个”、“那个”的分别,也就不能加定冠词the。如果你说this book,则暗示还有that book 的存在,这时就需要指明是 this book,也就是the book。像Taibei这种字就不能这样使用。所以,专有名词和定冠词是有冲突、且不能并存的。如果加了the,就表示这个东

2015-10-07 11:38:28 1350

原创 英语语法 定冠词the

在语源学上,the可视为that或those的弱化形式。而that或those是指示形容词,有明确的指示功能。所以定冠词the也可以用同样的角度来了解:凡是上下文中有明指或暗示时,也就是有“那个”的指示功能时,便要用定冠词the。请比较:  I need a book to read on my trip. (我在旅途中需要带本书读。)   I have finished the book yo

2015-10-07 11:28:16 914

原创 英语语法 专有名词

人名(如Genghis Khan)、地名(如Taibei)等都是专有名词。因为它所代表的对象只有一个,也不适合加a(n),所以可以不用限定词。为什么只有一个的东西也不能加a(n)呢?因为如果用a Genghis Khan来代表成吉思汗,那么这里指的是one Genghis Khan (一个成吉思汗)的意思。亦即在此句中暗示有第二个成吉思汗存在,所以才特别需要标示是“一个”。如果只有一个成吉思汗存在,

2015-10-07 11:20:57 1290

原创 英语语法 限定词

首先,英语是一种拼音文字,和其他拼音文字一样,用词尾的变化来表示单、复数。不仅如此,在名词短语的开头,还有一些符号来配合标示该名词的范围,这种符号在语言学上称为“限定词”(Determiners)。它与词尾的单复数符号互相呼应,共同determine名词的范围。冠词就是Determiners之中的一种。请看下面的例子:a new book 一本新书 many good students 许多好

2015-10-06 20:32:45 1115

原创 英语语法 两个宾语的句型

最后再谈谈S+V+O+O的句型,那么五种基本句型就全部清楚了。有一种动词,后面可以接两个宾语。例如:  John’s father gave him a dog. (约翰的父亲给他一只狗。)        S   V   O  O请想一想gave这个动词。要做“给”的动作,首先要有个东西:在上例中就是那只狗。然后,还得有人接受,才能给得出去:在上例中就是him。这两个宾语,一个是给的对象,

2015-10-06 19:39:42 614

原创 英语语法 宾语补语的句型

主语补语的句型,是用补语告诉读者主语是什么,中间用“是”为动词串联起来。“主语+动词+宾语+补语(S+V+0+C)”的句型,则是用补语告诉读者宾语是什么,中间暗示有一个“是”的关系存在。请看看下面这些宾语补语的例子:I find the dress pretty.(我觉得这衣服很漂亮。) The meat made the dog friendly.(肉让狗变得很友善。) They consid

2015-10-06 19:28:28 1424

原创 英语语法 连缀动词

需要补语的动词有哪些?be动词直接翻译为“是”,是最有代表性的“连缀动词”。另外,在所有的英语动词中,凡是接补语的动词(也就是所有的“连缀动词”),都可以解释为各种各样的“是”。请观察以下这些“连缀动词”的翻译:Look 看起来是 seem 似乎是 appear 显得是 sound 听起来是 feel 摸起来是 taste 尝起来是 turn 转变为

2015-10-06 19:19:49 3541

原创 英语语法 补语

如果句子缺了补语,就会变得完全没有意义,因为叙述的部分完全缺乏。请注意:在所有的英语动词中,只有解释为“是”的动词是空的,完全没有意义。一般的动词,不论及物或不及物,都要担任叙述全句最主要内容的工作。只有解释为“是”的动词,没有叙述能力,只能扮演引导叙述部分的角色。例如:  1. John Smith was a soldier.   (约翰·史密斯是军人。)  2. John Smith was

2015-10-06 19:11:03 1142

原创 英语语法 及物动词和不及物动词

一个完整的句子,必须能够表达完整的意思。这需要以两个部分来完成:主语和动词。主语,是这个句子所叙述的对象。动词,构成叙述的主要内容。例如:John Smith died in World War Two. (约翰·史密斯死于第二次世界大战。)John Smith killed three enemy soldiers. (约翰·史密斯杀了三名敌军士兵。)在例1中,主语John Smith是

2015-10-06 19:07:55 1077

原创 DirectX11 平面镜像的实现

平面镜像的实现在自然界中有许多物体的表面都非常光滑,可以像镜子一样反射周围的物体。本节介绍了如何在3D应用程序中模拟镜像效果。为简单起见,我们降低了任务难度,只在平面上实现镜像效果。例如,一辆光滑的汽车可以反射周围的物体;但是,车身是一个平滑曲面,而非平面。我们不选择这样的物体。我们将在光滑的大理石地板或挂在墙上的镜子中渲染物体的映像——换句话说,我们只实现平面上的镜像效果。要在程序中实现镜像效果,

2015-10-04 19:58:31 3325 2

原创 DirectX11 深度/模板状态

深度/模板状态1. 深度/模板描述当创建ID3D11DepthStencilState接口时,第一步是要填充一个D3D11_DEPTH_STENCIL_DESC实例:typedef struct D3D11_DEPTH_STENCIL_DESC{ BOOL DepthEnable;//默认True // 默认:D3D11_DEPTH_WRITE_MASK_ALL D3D11_D

2015-10-04 12:47:39 3028

原创 DirectX11 模板测试

模板测试1. 模板测试实现过程如前所述,我们可以使用模板缓冲区来阻止像素片段渲染到后台缓冲区的某些区域。判断一个特定像素是否可以写入后台缓冲区的操作称为模板测试(stencil test),其实现过程为:if( StencilRef & StencilReadMask ⊴ Value &StencilReadMask) accept pixelelse reject pixel

2015-10-04 12:21:09 2356

原创 DirectX11 模板

模板1. 什么是模板?前面的博文已经介绍过深度的概念,所以这里只解释模板的概念。模板缓冲区(stencil buffer)是一种用来实现特殊效果的离屏(off-screen)缓冲区。模板缓冲的大小与后台缓冲及深度缓冲的大小相同,也就是说,模板缓冲的第ij个像素对应于后台缓冲和深度缓冲第ij个像素。我们在4.1.5节的“注意”中提到,当指定一个模板缓冲时,它总是与深度缓冲共享相同的内存空间。尤如名字所

2015-10-04 12:14:40 1387 1

原创 DirectX11 雾

雾1. 为什么需要雾?当我们在游戏中模拟某些类型的天气状况时,可能会用到雾效(参见下图)。雾除了本身所具有的用途外,还具有一些附加效用。例如,雾可以用来掩盖渲染过程中出现的不自然的人工痕迹,避免蹿出问题的发生。蹿出(popping)是指由于摄像机的移动,使原本在远平面后面的物体突然进入平截头体内,从不可见变为可见;这看上去就像是突然“蹿”到场景里面一样。通过在一定距离内加入雾效,可以掩盖这一问题。注

2015-10-04 11:51:53 1783 1

原创 DirectX11 裁剪像素

裁剪像素1. 为什么需要裁剪像素?有时,我们希望完全丢弃某个源像素,使它不再接受后续处理。这一工作可以由HLSL的内置函数clip(x)来实现。该函数只能在像素着色器中使用,当x<0时丢弃当前像素,使之不再接受后续处理。该函数在渲染铁丝网纹理时非常有用。也就是说,它非常适合于渲染那些完全不透明或者完全透明的像素。 (带有alpha通道的铁丝网纹理。clip函数将丢弃那些带有黑色alpha值的像素,

2015-10-04 11:39:31 1941

原创 DirectX11 Alpha通道

Alpha通道1. 漫反射贴图控制Alpha通道在RGB混合中,源alpha分量可以用来控制透明度。混合方程中的源颜色来自于像素着色器。我们会在最后一章中看到,我们将漫反射材质的alpha值作为像素着色器的alpha输出。也就是说,漫反射贴图的alpha通道可以用来控制透明度。float4 PS(VertexOUT pin) : SV_Target{ … // 从漫反射材质和纹理中

2015-10-04 11:15:38 1580

原创 DirectX11 混合例子

混合例子1. 屏蔽颜色写入假设我们希望原始目标像素保持不变,即不被任何其他数值覆盖,也不与当前的光栅化源像素进行混合。当我们希望屏蔽后台缓冲区、只向深度/模板缓冲区写入数据时,该算法非常有用。要实现这一算法,可将源像素混合系数设为D3D11_BLEND_ZERO,目标混合系数设为D3D11_BLEND_ONE,混合运算符设为D3D11_BLEND_OP_ADD。使用一方案,混合方程可简化为:还有一种

2015-10-04 11:03:33 1439

原创 DirectX11 创建混合状态

创建混合状态1. 如何在DirectX11中创建混合状态?我们已经讨论了混合运算符和混合系数,但是还没有说该如何在Direct3D中使用些值。这些混合参数要通过ID3D11BlendState接口来控制。 我们可以通过填充一个D3D11_BLEND_DESC结构体并调用ID3D11Device::CreateBlendState方法来创建该接口:HRESULT ID3D11Device::Crea

2015-10-04 10:15:55 2286

原创 DirectX11 混合方程

混合方程1. 什么是混合?考虑下图。我们从地形和板条箱开始渲染场景,先绘制地形,再绘制板条箱,使地形和板条箱的像素依次存入后台缓冲区。然后使用混合(blending),将水体绘制到后台缓冲区,使水体像素和后台缓冲区中的地形、板条箱像素融为一体。通过一方式,我们可以透过水体看到地形和板条箱。本章我们主要讲解混合技术,它可以将当前的光栅化像素(也称为源像素)与后台缓冲区中的像素(也称为目标像素)混合(融

2015-10-04 09:17:40 1101

原创 DirectX11 压缩纹理格式

压缩纹理格式1. 为什么需要压缩纹理?一个虚拟场景可能会载入数百幅纹理,而些纹理会占用大量的GPU内存(记住,我们必须让所有的纹理驻留在GPU内存中,只有这样着色器才能快速地访问纹理)。使用这些格式的好处是它们可以压缩存储在GPU内存中,当使用时由GPU实时解压缩。将纹理存储为DDS压缩文件的另一个好处是可以减少磁盘空间的占用量。2. 压缩纹理I格式有哪些?了缓解GPU内存压力,Direct3D提供

2015-10-04 09:04:17 6233 1

原创 DirectX11 地形水波纹理示例Demo

地形纹理演示程序1. 地形纹理Demo介绍在本例中,我们要为地形和水体添加纹理。首先,我们要在地形上平铺一幅草地纹理。 由于地形网格很大,如果我们直接拉伸纹理,那么每个三角形只能得到很少的几个纹理元素。换句话说,这里无法为表面提供足够高的纹理分辨率;我们会受到倍增问题的影响。所以,我们要在地面网格上平铺草地纹理,进而获得较高的分辨率。其次,我们要通过一个时间函数对水体纹理进行平移,使水体显得更真实一

2015-10-04 00:05:28 1975

原创 DirectX11 对纹理进行变换

对纹理进行变换1. 纹理坐标变换有什么意义?如前所述,纹理坐标表示纹理平面上的2D点。因此,我们可以像使用其他坐标一样,对纹理坐标进行平移、旋转和缩放。下面是一些会对纹理进行变换的例子:1.沿着墙体拉伸一幅砖块纹理。该墙体顶点的纹理坐标在[0,1]区间内。我们将每个纹理坐标乘以4,使区间扩大为[0,4],让纹理在墙体上重复4×4次。2.在一片晴朗的蓝天上(即,在一个天空球上)拉伸一幅白云纹理。通过一

2015-10-03 23:25:17 1938

原创 DirectX11 寻址模式

寻址模式1. 寻址模式是什么?有哪几种?纹理必须与常量插值或线性插值一起使用以形成一个向量值函数T(u,v) = (r,g,b,a)。也就是,当给定一个纹理坐标(u,v)∈[0,1]2时,纹理函数T返回颜色(r,g,b,a)。Direct3D允许我们以4种不同的方式扩展该函数的值域(称为寻址模式):重复(wrap)、边框颜色(border color)、截取(clamp)和镜像(mirror)。2.

2015-10-03 23:12:07 1538

原创 DirectX11 板条箱示例Demo

板条箱Demo1. 指定贴图坐标GeometryGenerator::CreateBox产生箱子的贴图坐标,使得整个贴图图像都映射到箱子的每一面。为了简便起见,我们只显示前面、后面和顶面。注意这里我们省略了顶点结构的法线和切线向量的坐标。void GeometryGe ne rator::Cre ateBox(float width, float height, float depth, Mesh

2015-10-03 22:45:22 2043

原创 DirectX11 把纹理作为材质

把纹理作为材质1. 将纹理整合到我们的材质/光照系统?要将纹理整合到我们的材质/光照系统中,通常可以将环境光和漫反射光项调制到纹理颜色上,但不需要包括高光项(这常常被称为“后期添加调制,modulate with late add”)。// Modulate with late add.litColor = texColor*(ambient + diffuse) + spec;上述操作给每个像素

2015-10-03 20:51:35 1266

原创 DirectX11 纹理采样

纹理采样1. HLSL纹理采样表示我们知道,Texture2D对象用于在effect文件中表示纹理。不过,还有一种与纹理相关的SamplerState(采样器)对象。它用于描述如何使用过滤器访问纹理资源。下面是它的一些例子:// 在倍增、缩减、多级渐进纹理上使用线性过滤。SamplerState mySampler0{ Filter = MIN_MAG_MIP_LINEAR;};//

2015-10-03 20:42:51 2244

原创 DirectX11 过滤器

DirectX11 过滤器1. 倍增(magnification)现象纹理贴图元素应该被视为在一个连续图像上的离散颜色采样;不应该被视为矩形区域。那么问题是:当我们指定的纹理坐标(u,v)与任何一个纹理元素点都不对应时会产生什么结果?这一问题会发生在如下情景中:当观察点离场景中的一面墙很近时,墙会被放大,以至于会盖住整个屏幕。如果显示器的分辨率为1024×1024,墙体纹理的分辨率为256×256,

2015-10-03 20:27:51 1119

原创 DirectX11 创建和启用纹理

创建和启用纹理1. 创建纹理步骤纹理数据通常是存储在磁盘上的图像文件。我们需要将它读取出来,并载入到一个ID3D11Texture2D对象中(参见D3DX11CreateTextureFromFile)。不过,纹理资源是不能被直接绑定到渲染管线上的;我们需要为纹理创建一个着色器资源视图(ID3D11ShaderResourceView),然后将视图绑定到管线上。这个过程可分为两步:1.调用D3DX1

2015-10-03 19:36:09 7082

原创 DirectX11 纹理坐标

纹理坐标1. 纹理坐标是什么?Direct3D的纹理坐标系由表示图像水平方向的u轴和表示图像垂直方向的v轴组成。坐标(u,v)指定了纹理上的一个元素,我们将该元素称为纹理元素(texel,译者注:texel是texture element的缩写),其中0≤u,v≤1。注意,v轴的正方向是“垂直向下”的(参见图8.2)。另外,将规范化坐标区间设为[0,1],是因为这样可以使 Direct3D拥有一个独

2015-10-03 18:59:00 3111

原创 DirectX11 纹理和资源概述

纹理和资源概述 1. 为什么需要纹理? 我们的演示程序正在变得越来越有趣,但是顶点颜色无法体现真实世界物体所具有的细节。纹理贴图映射(texture mapping)是一种将图像数据映射到三角形表面的技术,它可以显著提高场景的细节和真实感。例如,我们可以创建一个立方体,然后将一 个板条箱纹理映射到立方体的每个面上,使它看上去更像是一个板条箱(参见下图)。 2. 纹理如何表示? 回顾我们自从

2015-10-03 18:26:38 1917

win7 64位汇编开发环境合集

集成了所有win7 64位下的汇编开发环境的程序,包括了DOSBOX、edit、masm、link、debug。使用说明可以见本人博文:《win7 64 汇编开发环境搭建》: http://blog.csdn.net/sinat_24229853/article/details/50133741

2015-12-01

DirectX11程序初始化

DirectX11程序初始化,出自龙书,本人博客有DirectX11学习笔记:http://blog.csdn.net/sinat_24229853

2015-09-28

泡泡堂 DirectX11 Demo

本程序是模仿泡泡堂游戏功能的Demo,使用DirectX11图形库和C++语言,在VS2010环境下编译。4500行左右。更多内容见本人博客:http://blog.csdn.net/sinat_24229853

2015-09-06

C++实现状态驱动智能体设计——消息功能

设计精度的游戏趋向于事件驱动。即当一个事件发生了(武器发射了子弹等),事件被广播给游戏中的相关的对象。这样它们可以恰当地做出反应。而这个消息可以是立即执行,也可以设定多久后才执行。更多详情参见本人博客:http://blog.csdn.net/sinat_24229853

2015-08-17

有限状态机(FSM)

游戏人工智能,状态驱动智能体设计——有限状态机(FSM),编译环境:VS2010。本人博客:http://blog.csdn.net/sinat_24229853

2015-08-17

C++控制台网络聊天室源代码

用C++和socket编程、多线程技术组成的控制台网络聊天室,1000行之内。之所以在控制台运行而不是用MFC等图形库是为了方便从底层理解socket编程和多线程,只有从深入理解技术原理后才能在实际应用如鱼得水。本人大一学生,我的CSDN博客是http://blog.csdn.net/sinat_24229853

2015-04-25

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

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