书法字典:https://www.shufadict.com

2013年3月10日

D3D9 Device类型

摘要: D3D9主要有两种类型的Device,一种是HAL Device(Hardware Abstraction Layer,硬件抽象层)。另一种是REF Device(References Device)。HAL Device这是主要的设备类型,该类型支持硬件加速,并且支持hardware vertex processing及software vertex processing。如果显卡支持HAL类型的设备,那么在初始化D3D的时候就应该使用该类型。HAL Device只能实现大部分D3D特性,比如变换,光照,光栅化等。应用程序并不直接访问图形适配器(显卡)而是先调用D3D函数,D3D则通过HAL 阅读全文

posted @ 2013-03-10 16:24 翰墨小生 阅读(3220) 评论(0) 推荐(0) 编辑

2013年3月1日

Direct2D教程(十)绘制文本

摘要: 概述在Direct2D中,文本的绘制是通过DirectWrite来实现的,DirectWrite实际上已经是一个独立的DirectX组件了。关于DirectWrite,我摘录了MSDN的一段文字。DirectWrite介绍当今的应用程序应提供高质量的文本渲染,分辨率无关的字体及完整的Unicode文本和布局支持,DirectWrite提供了这些功能,甚至比这更多。下面是DirectWrite的特性设备无关的文本布局系统,提高了文本的可读性(包括文档及UI上的文本)高质量的,子像素,ClearType文本的渲染(可以使用GDI及Direct2D或应用程序指定的渲染技术)硬件加速的文本渲染(和Di 阅读全文

posted @ 2013-03-01 09:04 翰墨小生 阅读(12045) 评论(22) 推荐(3) 编辑

2013年2月27日

防止Direct Input获取多次输入

摘要: 如果将Direct input处理键盘输入的函数放到游戏循环中,由于Direct Input速度极快,用户的一次按键,Direct Input将会产生多次按键事件,导致程序多次被响应,处理如下。char hitLetter = '';static bool keyPressed = false;if(dinput_->getKey()){ if(!keyPressed) { hitLetter = dinput_->getKey(); keyPressed = true; }}else{ keyPressed = false;}关键在于key... 阅读全文

posted @ 2013-02-27 10:49 翰墨小生 阅读(1417) 评论(2) 推荐(0) 编辑

Direct2D教程(九)渲染位图

摘要: 概述这篇的标题更确切的说应该叫位图画刷,这样才好和前几篇对应起来。在Direct2D中,位图的渲染也是通过画刷来实现的。Direct2D中并没有直接操作位图的接口,而是借助WIC(Windows Image Component)来完成的。今天我们来看看如何在Direct2D中加载并显示位图。这个方法可以用来渲染背景。基本步骤如下。从文件创建WIC位图由WIC位图创建D2D位图使用D2D绘制位图在开始之前,首先简要介绍一下WIC什么是WIC?WIC全称是Windows Image Component,是一套扩展的API,用来处理数字图像,它是基于COM组件的。该API包含非常丰富的图像处理函数, 阅读全文

posted @ 2013-02-27 09:30 翰墨小生 阅读(14690) 评论(42) 推荐(7) 编辑

2013年2月21日

求反射向量

摘要: 在图形学中,计算光照模型时,经常需要求取反射向量,一般的shader函数库都提供计算反射向量的方法,下面介绍一下如何手动计算反射向量。给定入射光线向量I和平面法向量N,求反射向量R,如下图。为了方便计算,这里假定I和N都是单位向量(模为1,编程时可先将I和N单位化)方法一设入射光线向量I和反射平面的... 阅读全文

posted @ 2013-02-21 21:38 翰墨小生 阅读(22383) 评论(1) 推荐(0) 编辑

2012年11月22日

Direct2D教程(八)梯度色画刷

摘要: 概述单色画刷产生的颜色是单一的,比如一个红色画刷只能输出红色,而渐变画刷则不同,它可以输出多种颜色,这些颜色通常是连续的,从一个颜色平滑过渡到另一个颜色,看起来有渐变的效果。渐变画刷又分为两种,一种是ID2D1LinearGradientBrush(线性渐变画刷),另一种是ID2D1RadialGradientBrush(放射渐变画刷),下图显示了这两种画刷的效果。线性渐变画刷这种画刷的颜色从一个位置线性渐变到另外一个位置,所以在创建这种画刷之前需要确定以下两个属性起始位置及颜色终止位置及颜色在Direct2D中,结构体D2D1_GRADIENT_STOP用来表示一个位置及其颜色,其定义如下: 阅读全文

posted @ 2012-11-22 08:41 翰墨小生 阅读(7953) 评论(2) 推荐(3) 编辑

2012年11月6日

Visual Studio 2012中使用自定义project properties

摘要: 由于将系统升级到了Windows 8, 而Windows 8 SDK已经集成了DirectX SDK,且不包含DX9及之前的头文件和库文件,如果想编写DX9程序则需要安装DirectX SDK,我安装的是DirectX SDK的最后一个单独分发包-Microsoft DirectX SDK (June 2010)。这样又出现了一个问题,如果编写DX10/11或者Direct2D程序,就会导致有两份头文件及库文件,一份来自Windows 8 SDK,位于C:\Program Files\Windows Kits\8.0\Include,这是随系统安装的,而且是最新版的,编程时建议使用此版,另一份 阅读全文

posted @ 2012-11-06 22:59 翰墨小生 阅读(4624) 评论(0) 推荐(1) 编辑

2012年10月12日

DirectX11 driver类型浅析

摘要: 在DirectX 11中,创建设备时可以指定以下几种类型的driver。 D3D_DRIVER_TYPE_UNKNOWN = 0, D3D_DRIVER_TYPE_HARDWARE = ( D3D_DRIVER_TYPE_UNKNOWN + 1 ), D3D_DRIVER_TYPE_REFERENCE = ( D3D_DRIVER_TYPE_HARDWARE + 1 ), D3D_DRIVER_TYPE_NULL = ( D3D_DRIVER_TYPE_REFERENCE + 1 ), D3D_DRIVER_TYPE_SOFTWARE = ( D... 阅读全文

posted @ 2012-10-12 23:58 翰墨小生 阅读(2334) 评论(0) 推荐(1) 编辑

2012年10月2日

C++默认构造函数

摘要: 默认构造函数默认的构造函数是指为所有参数都提供了默认值的构造函数,通常是指无参的构造函数。比如下面的类Test,它的默认构造函数就是Test()。class Test{public: Test(){} // default constructor} ;如果你没有为你的类提供任何构造函数,那么编... 阅读全文

posted @ 2012-10-02 15:21 翰墨小生 阅读(23331) 评论(4) 推荐(5) 编辑

2012年9月15日

DirectWrite处理WM_SIZE消息

摘要: 对于DirectWrite程序,在窗口大小改变时,也要同步更新render target的尺寸,否则的话,所绘文本可能超出窗口之外。可以定义一个OnResize函数来更新render target的尺寸,然后再WM_SIZE中调用这个函数。// When window size changed, we need to resize the render target as wellVOID OnResize(UINT width, UINT height){ if(g_pRenderTarget) { D2D1_SIZE_U size = D2D1::SizeU(wi... 阅读全文

posted @ 2012-09-15 21:36 翰墨小生 阅读(1439) 评论(0) 推荐(0) 编辑

Direct2D中资源的创建顺序

摘要: 资源类型Direct2D中有两种类型的资源,设备无关资源和设备相关资源,设备无关的资源可以一次创建,永久使用(在程序生存期内),且通常创建于系统内存中,设备相关的资源和设备有相同的生命周期,一旦设备丢失,则资源也需重建。这类资源一般在显存中创建。设备无关的资源包括ID2D1DrawingStateBlockID2D1FactoryID2D1Geometry及继承自它的接口ID2D1GeometrySink和ID2D1SimplifiedGeometrySinkID2D1StrokeStyle设备相关的资源包括ID2D1Brush及继承自它的接口ID2D1LayerID2D1RenderTarg 阅读全文

posted @ 2012-09-15 12:21 翰墨小生 阅读(3548) 评论(0) 推荐(0) 编辑

2012年9月10日

什么是Modulate?

摘要: Modulate是颜色操作中的一个术语,可以理解为颜色乘法。两个颜色相乘,或者一个颜色与一个标量相乘。叫做modulation(调制?)。一个渲染中的三角形,其上某个像素的颜色由多个颜色源组合而成。通常来说,其中一个颜色来自纹理,另一个来自三角形顶点的插值,这两者的乘积就是最终的颜色,在这种情况下,... 阅读全文

posted @ 2012-09-10 21:46 翰墨小生 阅读(1809) 评论(2) 推荐(0) 编辑

2012年9月8日

程序员,请昂起你高贵的头!

摘要: 程序员与艺术家我这辈子最佩服两类人,一类是艺术家,一类是程序员。一个好的程序员从在某种程度上来说也是一个艺术家!艺术家是精神世界及其丰富的人群,他们不仅自己享受着艺术的魅力,也为全人类的精神文明指引着方向!程序员,他们是城市中的白领,不仅自己享受着编码的乐趣,也推动着信息世界不断向前发展。在这个信息爆炸的年代,哪个行业能离开计算机?能离开程序员?月经贴可是,就是这样艺术家一样神圣的职业,却被某些人玷污了。。。最近越来越多的人开始写一些无聊的月经贴,传播一些无聊的言论,什么程序员是青春饭,过了30就伤不起,就得转管理,程序员是苦逼行业,挣得不如民工多。相信这些类似的言论大家都不陌生吧?对于这种技 阅读全文

posted @ 2012-09-08 21:12 翰墨小生 阅读(23117) 评论(366) 推荐(178) 编辑

XPDM vs WDDM

摘要: XPDM - Windows XP Display Driver ModelWDDM - Windows Vista Display Driver ModelSecure Desktopsecure desktop(安全桌面)在以下几种情况下被激活锁定屏幕(Windows + L)屏幕保护程序启动UAC对话框弹出当安全桌面激活时,HAL(Hardware Abstraction Layer)是不可访问的。XPDM与WDDM的不同试图创建Direct3d9 HAL device将会失败(返回D3DERR_NOT_AVAILABLE),且当前存在的D3D9 device在调用Present函数时都 阅读全文

posted @ 2012-09-08 11:09 翰墨小生 阅读(3372) 评论(0) 推荐(0) 编辑

2012年8月31日

Alpha 混合(三)Texture alpha

摘要: Texture alpha前两篇分别学习了Vertex alpha和Material alpha,今天来研究一下Texture alpha,所谓Texture alpha就是使用Texture的alpha通道进行混合,这需要texture包含alpha通道。所以首先要为texture添加alpha通道。为texture添加alpha通道使用DirectX texture tool添加一般的图片格式都是不包含alpha通道的,使用DX的texture tool可以为texture添加alpha通道,这实际上是做一次格式转换,没有alpha通道的texture格式一般是R8G8B8格式,转换后的格 阅读全文

posted @ 2012-08-31 09:05 翰墨小生 阅读(4339) 评论(0) 推荐(1) 编辑

2012年8月27日

Alpha混合(二)Material Alpha

摘要: Alpha值Alpha混合是为了实现透明效果,透明到什么程度是由alpha值决定的,对于一个32位的ARGB格式的颜色来说,它的组成部分如下:我们可以看到,最高位的一个byte表示alpha值,它并不代表实际的颜色,它是控制颜色的百分比。范围是0x00 - 0xff,也就是十进制的0-255。它可以控制256个级别的透明程度,0表示完全透明,就是什么也看不见了。255表示完全不透明。随后的三个字节分别表示红绿蓝三原色。那么alpha值是如何工作的呢?如果开启了alpha混合,假设指定了颜色为0x80ff0000,可知alpha值为0x80(十进制128),红色=0xff(十进制255),为满色 阅读全文

posted @ 2012-08-27 09:13 翰墨小生 阅读(3067) 评论(0) 推荐(1) 编辑

2012年8月23日

Alpha混合(一)Vertex Alpha

摘要: Vertex alphaAlpha混合通常是为了实现透明效果,透明效果的程度通过alpha值来控制,对于一个8bit的alpha chanel,可以产生0-255级透明效果,0表示完全透明,255表示完全不透明,在D3D中alpha值的来源主要有三种顶点材质纹理今天介绍如何使用顶点的alpha值来实现透明效果,为了简化程序,我们使用顶点的alpha值来控制顶点的颜色,不涉及到纹理。关于如何使用material alpha及Texture alpha将在后续的篇章中介绍。定义顶点格式我们使用Lit顶点格式,也就是无需光照,顶点本身包含颜色值,所以顶点格式如下。#define D3DFVF_CUS 阅读全文

posted @ 2012-08-23 09:14 翰墨小生 阅读(3973) 评论(3) 推荐(2) 编辑

2012年8月10日

绕任意轴旋转

摘要: 绕坐标轴旋转关于最常见的绕坐标轴旋转,可以看看前一篇-几何变换详解。绕任意轴旋转绕任意轴旋转的情况比较复杂,主要分为两种情况,一种是平行于坐标轴的,一种是不平行于坐标轴的,对于平行于坐标轴的,我们首先将旋转轴平移至与坐标轴重合,然后进行旋转,最后再平移回去。将旋转轴平移至与坐标轴重合,对应平移操作旋转,对应操作步骤1的逆过程,对应操作 整个过程就是对于不平行于坐标轴的,可按如下方法处理。(该方法实际上涵盖了上面的情况)将旋转轴平移至原点将旋转轴旋转至YOZ平面将旋转轴旋转至于Z轴重合绕Z轴旋转θ度执行步骤3的逆过程执行步骤2的逆过程执行步骤1的逆过程假设用v1(a1, b2, c2)和v2(a 阅读全文

posted @ 2012-08-10 09:20 翰墨小生 阅读(83489) 评论(32) 推荐(8) 编辑

2012年8月8日

几何变换详解

摘要: 在三维图形学中,几何变换大致分为三种,平移变换(Translation),缩放变换(Scaling),旋转变换(Rotation)。以下讨论皆针对DirectX,所以使用左手坐标系。平移变换将三维空间中的一个点[x, y, z, 1]移动到另外一个点[x', y', z', 1],三个坐标轴的移动分量分别为dx=Tx, dy=Ty, dz=Tz, 即x' = x + Txy' = y + Tyz' = z + Tz平移变换的矩阵如下。缩放变换将模型放大或者缩小,本质也是对模型上每个顶点进行放大和缩小(顶点坐标值变大或变小),假设变换前的点是[x, 阅读全文

posted @ 2012-08-08 09:23 翰墨小生 阅读(38358) 评论(78) 推荐(6) 编辑

2012年8月2日

矩阵-DirectX与OpenGL的不同

摘要: 矩阵是三维图形学中不可或缺的部分,几乎所有和变换相关的操作都涉及矩阵,世界变换,视图变换,投影变换,视口变换无一不需要矩阵,但是当今的两大主流图形库DirectX和OpenGL对矩阵操作却有着细微的差别,大多数的图形学书籍都以OpenGL为基础进行阐述,游戏编程类的书籍则更多使用DirectX,这就难免产生混淆,今天这篇主要讲讲两者在操作矩阵的时候有何不同。矩阵在三维图形学中,一般使用四维矩阵,也就是四行四列的方阵,下面是一个典型的四维矩阵既然是三维图形学,为什么使用四维矩阵呢?主要有两个原因,第一,为了平移变换,第二,为了区别点和向量。行向量与列向量对于一个四维向量,它是行向量还是列向量呢? 阅读全文

posted @ 2012-08-02 09:19 翰墨小生 阅读(14994) 评论(19) 推荐(13) 编辑

2012年7月25日

透视投影详解

摘要: 概述投影变换完成的是如何将三维模型显示到二维视口上,这是一个三维到二维的过程。你可以将投影变换看作是调整照相机的焦距,它模拟了为照相机选择镜头的过程。投影变换是所有变换中最复杂的一个。视锥体视锥体是一个三维体,他的位置和摄像机相关,视锥体的形状决定了模型如何从camera space投影到屏幕上。最常见的投影类型-透视投影,使得离摄像机近的物体投影后较大,而离摄像机较远的物体投影后较小。透视投影使用棱锥作为视锥体,摄像机位于棱锥的椎顶。该棱锥被前后两个平面截断,形成一个棱台,叫做View Frustum,只有位于Frustum内部的模型才是可见的。透视投影的目的透视投影的目的就是将上面的棱台转 阅读全文

posted @ 2012-07-25 08:57 翰墨小生 阅读(69092) 评论(50) 推荐(22) 编辑

2012年7月21日

DirectX Triangle Strips

摘要: 今天北京下了一天的雨,而且是暴雨,不知道又有多少地方可以划船了,这么大的雨也打乱了我的搬家计划,不能搬家,那就写一篇小文吧,也是刚才没事浏览DX SDK文档时偶有所悟,非常简单,博大家一笑而。Triangle Strips是D3D用来绘制三角形的一种方式,这种方式比Triangle list更加高效,因为不用重复存储三角形顶点。下面看一个例子,分析一下这两种方式的不同。现在我们要绘制一个矩形,在D3D中,最基本的几何图元是三角形,所以可用两个三角形拼接成一个矩形,如下图。使用Triangle list绘制triangle list的工作方式是每次取三个顶点作为一组,绘制一个三角形。如果有n个三 阅读全文

posted @ 2012-07-21 21:32 翰墨小生 阅读(4864) 评论(7) 推荐(0) 编辑

2012年7月19日

【转载】DirectX支配游戏!历代GPU架构全解析

摘要: 原文链接http://www.pcpop.com/doc/0/521/521833.shtml泡泡网显卡频道4月30日NVIDIA与ATI(AMD)的GPU之战,远比Intel和AMD的CPU之战有意思,毕竟双方的实力差距并没有那么悬殊,经常斗得是难解难分。N/A的连年征战给我们带来无与伦比游戏画面和优秀产品的同时,也为喜欢IT技术的朋友带来了许多乐趣和谈资,只有深爱硬件技术的朋友才能有所体会。 掐指一算,从GPU诞生至今双方都已推出了十代产品,每一代产品之间的对决都令无数玩家心动不已,而其中最精彩的战役往往在微软DirectX API版本更新时出现。虽说胜败乃兵家常事,但NVIDIA和ATI 阅读全文

posted @ 2012-07-19 14:14 翰墨小生 阅读(3054) 评论(0) 推荐(1) 编辑

2012年7月12日

View Transform(视图变换)详解

摘要: 什么是View Transform我们可以用照相机的原理来阐释3D图形的绘制过程,想象一下,我们在摄影的时候都需要做哪些工作,大致可分为如下几个步骤摆放好待拍摄的物品,或者人物。调整好拍摄角度。调整焦距。拍摄。好了,来分析一下,上面的第一步就相当于世界变换了,将一个模型置于一个公认的坐标系中,这里所谓的公认,也就是大家都遵守的,目的是保证待拍摄的物体和照相机在同一个坐标系。第二步相当于视图变换,这个过程是调整Camera到合适的位置以便拍摄,在3D程序中,也就是设置View Matrix了。第三步调整焦距,这就相当于3D编程中的投影变换。View Transform的过程就是在世界坐标系中摆放 阅读全文

posted @ 2012-07-12 09:26 翰墨小生 阅读(19567) 评论(7) 推荐(6) 编辑

2012年7月9日

用DirectX实现粒子系统(三)

摘要: 引言上一篇讲了如何在DirectX中使用点精灵,这篇再扩展一下,讲讲如何实现一个完整的粒子系统效果-烟花。任何一种复杂的现象都可以拆分为若干独立的小单元,烟花也是如此,一个绚丽的烟花无非是若干小粒子按照一定的顺序,一定的速度,颜色及存活时间组合而成的。烟花的种类成千上万,不同的烟花有不同的效果,我们今天主要讲述爆炸效果。先来几张效果图吧,如下。前面说了,一个复杂的现象是由若干个基本单元构成的,所以,我们最先定义这个基本单元-粒子,一个粒子主要有哪些属性呢?由上面的图可知,首先粒子是有颜色的,上面一共有白,红,黄,绿四种颜色的粒子。其次,粒子是有大小的,只有大小不同的粒子相互组合才能构成特殊的渐 阅读全文

posted @ 2012-07-09 08:57 翰墨小生 阅读(6345) 评论(11) 推荐(6) 编辑

2012年6月27日

用DirectX实现粒子系统(二)

摘要: 引言上一篇讲了点精灵的理论部分,这篇看一下如何在DX程序中使用点精灵。定义顶点格式为了简化程序,我们使用LT(Lit and transformed format)顶点格式,也就是不需要额外的光照和变换。// 点精灵对应的顶点struct POINTVERTEX{ float x, y, z ; // 位置 D3DCOLOR color; // 颜色};// 点的格式是经过光照和变换的,无需设置光照和变换矩阵#define D3DFVF_POINTVERTEX (D3DFVF_XYZ|D3DFVF_DIFFUSE)创建顶点及顶点缓冲区这里首先创建九个顶点,每行三个,三行... 阅读全文

posted @ 2012-06-27 08:52 翰墨小生 阅读(3170) 评论(4) 推荐(2) 编辑

2012年6月25日

用DirectX实现粒子系统(一)

摘要: 引言Point sprites,中文译成点精灵,是粒子系统的基础,本篇主要介绍point sprites的相关知识,为后续的粒子系统做准备。Point Sprites(点精灵)Point sprites是DirectX8中引入的一个新特性,主要是用来高效渲染粒子系统,使用point sprites做为底层数据结构,表示层配以纹理,可以呈现出任意形状的粒子。粒子系统应用十分广泛,可以用来模拟许多特殊效果,比如常见的爆炸,烟雾,火焰等,都可以用粒子系统实现。point sprites不支持固定的几何管线,只能使用可编程的顶点处理程序。Point Primitive Rendering Contro 阅读全文

posted @ 2012-06-25 12:45 翰墨小生 阅读(5315) 评论(0) 推荐(2) 编辑

2012年5月7日

DirectX怪象之二, 程序很吃CPU

摘要: 学习DirectX编程的兄弟们可能经常遇到的一个情况是,程序经常莫名奇妙的占用大量的CPU资源,其实吃CPU的问题并不是DirectX程序所特有的,几乎任何程序都可能,只不过DirectX程序更加容易产生而已,总结了一下,主要有以下几个方面没有及时释放资源这种情况的现象多发生在程序运行的时候,也就是窗口处于active状态时,大家都知道,DX是基于COM的,这也就意味着,你需要手动释放COM对象,如果没有及时释放的话,CPU就会吃紧,尤其是当在Render函数中创建对象的时候更是如此。至于哪些需要释放,哪些不需要释放,需要视具体情况而定,这里有一个简单的方法,如果创建该对象的函数形如Creat 阅读全文

posted @ 2012-05-07 09:10 翰墨小生 阅读(4934) 评论(6) 推荐(5) 编辑

2012年5月2日

DirectX怪像之一,我的模型不见了

摘要: 引言对于刚刚编写DirectX程序的朋友来说,经常遇到的一个问题就是,风风火火写了一大堆代码,编译-运行!哇塞,窗口里黑乎乎一片,啥也没有,或者是之前运行好好的程序,不只修改了哪里,导致以前渲染的画面现在都没有了。我在学习的过程中也经常遇到这种问题,索性总结下来,与大家分享。希望能给刚入门的兄弟们一个提醒。场景为何消失?根据我自己的经验,如果渲染场景中某些东西不见了,一般有以下几个主要的原因光照设置不正确很简单,在一个伸手不见五指的黑夜里,你能指望看见什么呢?光照是D3D中必不可少的东西,用来计算顶点的最终颜色。但是并不是所有的顶点格式都需要光照,有些定点格式,如果设置了光照反而会导致模型无法 阅读全文

posted @ 2012-05-02 08:49 翰墨小生 阅读(3517) 评论(0) 推荐(5) 编辑

2012年4月3日

DirectX截图黑屏的解决办法

摘要: 好久没有更新博客了,今天开始继续耕耘。生活要继续工作要继续梦想也一定要继续!之前写过一篇关于DirectX截屏的文章,其中有网友留言提到了截图黑屏的问题,于是这些日子研究了一下,与大家一同分享。为什么会黑屏?一句话概括,黑屏是由于DDraw加速引起的!先说一下DirectX的显示原理,通常我们看到的屏幕上的数据,都是通过Primary Surface送至显示器的,什么是Primary Surface呢?中文叫做主显示表面,也就是说我们当前看到的屏幕上的图像数据是从这个表面来的,除了主表面意外还有离屏表面,叫做OffScreenSuface。这种表面中的数据是不直接显示在屏幕上的。常用的截屏函数 阅读全文

posted @ 2012-04-03 08:38 翰墨小生 阅读(20703) 评论(4) 推荐(3) 编辑

2011年9月15日

也谈走台阶问题

摘要: 问题刚才在首页看到一篇博客,说的是腾讯的一道面试题:一个楼梯有50个台阶,每一步可以走一个台阶,也可以走两个台阶,请问走完这个楼梯共有多少种方法?博主把这题分析的很麻烦。引来很多人围观。我以前也碰到过这个问题。写出来和大家分享一下。举个例子,假设有3个台阶,则有三种走法:分别是,1-1-1, 1-2, 2-1。分析很简单的一道题,学过组合数学的人很快就能想到,这是一个递推关系。假设走完k个台阶有f(k)种走法。k = 1时,f(k) = 1k = 2时,f(k) = 2k = n时,第一步走一个台阶,剩n-1个台阶,有f(n - 1)种走法。第一步走两个台阶,剩n-2个台阶,有f(n - 2) 阅读全文

posted @ 2011-09-15 14:23 翰墨小生 阅读(4679) 评论(23) 推荐(7) 编辑

2011年7月14日

数组面试题-子数组之和

摘要: 昨天在一位老兄的凡客面试题中看到的,拿来写一下。题目描述给定一个含有n个元素的整形数组a,再给定一个和sum,求出数组中满足给定和的所有元素组合,举个例子,设有数组a[6] = { 1, 2, 3, 4, 5, 6 },sum = 10,则满足和为10的所有组合是{1, 2, 3, 4}{1, 3, 6}{1, 4, 5}{2, 3, 5}{4, 6}注意,这是个n选m的问题,并不是两两组合问题。解法一:穷举法最直观的想法就是穷举,把数组中元素的所有组合情况都找出来,然后看看哪些组合满足给定的和即可,这种方法的计算量非常大,是指数级的,假设数组有n个元素,那么所有组合的情况一共有2 ^ n种( 阅读全文

posted @ 2011-07-14 17:24 翰墨小生 阅读(10790) 评论(29) 推荐(1) 编辑

2011年7月11日

也谈杨辉三角形

摘要: 很久没更新博客了,来篇水的。今天看见有位兄弟写了杨辉三角形,记得以前自己也研究过,索性也发一篇,欢迎讨论。来历杨辉三角形也叫贾宪三角形,西方叫帕斯卡三角形,其实就是各阶二项式系数排列起来构成的三角形,如下。每行的数字实际上是(a + b) ^ n展开后的结果。 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1历史上发现这个三角形的人很多,这里介绍几个主要的,北宋人贾宪约1050年首先使用“贾宪三角”进行高次开方运算。杨辉,字谦光,南宋时期杭州人。在他1261年所著的《详解九章算法》一书中,辑录了如上所示的三角形数表,称之为“开方作法本源”图。欧洲直到1623年以后,法国数学家帕斯卡在 阅读全文

posted @ 2011-07-11 17:48 翰墨小生 阅读(9096) 评论(4) 推荐(4) 编辑

2011年7月8日

八进制字符与十六进制字符

摘要: 一般形式 在C中有两种特殊的字符,八进制转义字符和十六进制转义字符,八进制字符的一般形式是'\ddd',d是0-9的数字。十六进制字符的一般形式是'\xhh',h是0-9或A-F内的一个。八进制字符和十六进制字符表示的是字符的ASCII码对应的数值。比如 '\063'表示的是字符'3',因为'3'的 阅读全文

posted @ 2011-07-08 13:36 翰墨小生 阅读(12803) 评论(6) 推荐(3) 编辑

2011年6月3日

Direct2D教程(七)单色画刷

摘要: 概述画刷是D2D中最重要的资源之一,无论绘制什么图形,都离不开画刷,它好比是画家手中的画笔。画刷由render target创建,是设备相关的资源,如果渲染设备重建了,那么需要重新建立画刷。Direct2D中有以下四种类型的画刷,这些画刷全部继承自ID2D1Brush,并且有一些共同特征(比如设置和获取opacity,以及transform)。ID2D1SolidColorBrush 单色画刷ID2D1LinearGradientBrush 线性梯度色画刷ID2D1RadialGradientBrush 放射梯度色画刷ID2D1BitmapBrush 位图画刷下面是几种画刷及其对应的绘制效果画 阅读全文

posted @ 2011-06-03 12:34 翰墨小生 阅读(7164) 评论(10) 推荐(2) 编辑

2011年6月1日

Direct2D教程(六)图形也能做运算

摘要: 概述大家都学过集合运算,给定两个集合,可以求他们的并集,交集,差集等。其实图形之间也能做运算,今天就带大家开始图形运算之旅,讲讲如何合并图形。在D2D中有四种方法合并图形,分别是并(UNION),交(INTERSECT),差(EXCLUDE)和异或(XOR)。那么图形之间是如何合并的呢?两个图形之间进行Xor的结果是什么呢?为了便于理解,我先把效果图贴上来。下面图片中第一副图示两个圆的原始图,第二副图是UNION的结果,取两个圆所有的部分,但是公共部分只保留一份。第三幅图是INTERSECT的结果,取两个圆的公共部分。第四幅图是XOR的结果,取两个圆公共部分以外的部分。最后一幅图是EXCLUD 阅读全文

posted @ 2011-06-01 09:37 翰墨小生 阅读(7388) 评论(10) 推荐(4) 编辑

2011年5月31日

Direct2D教程(五)复合图形

摘要: 概述Direct2D支持以下几种类型的几何图形。Simple Geometry(简单几何图形) 矩形 圆角矩形 椭圆Path Geometry(路径图形)Composite Geometry(复合图形) Geometry Group(图形组) Transformed Geometry(变换的图形)上一篇介绍了Path geometry,这篇介绍复合图形。复合图形也可以叫做合成图形,包含两种,一种是图形组,即由多个图形组成的一组图形,另一种是经过变换的图形,D2D支持的变换有四种,平移,旋转,缩放和倾斜。图形组由于图形组是一组图形的集合,所以如果对图形组进行操作,会影响到其中每一个图形,这对批量 阅读全文

posted @ 2011-05-31 10:05 翰墨小生 阅读(7429) 评论(7) 推荐(8) 编辑

2011年5月27日

Direct2D教程(四)Path Geometry

摘要: 概述Direct2D支持以下几种类型的几何图形,上一篇介绍了简单几何图形,这篇介绍Path geometry。Simple Geometry(简单几何图形)矩形圆角矩形椭圆Path Geometry(路径图形)Composite Geometry(复合图形)Geometry Group(图形组)Transformed Geometry(变换的图形)Path geometry,说白了,就是以路径来描述图形,由于翻译过来比较别扭,所以下文中出现该词的地方全部使用英文。Path geometry可以用来创建复杂的几何图形,因为无论多么复杂的图形都可以由一些基本的几何图元来表示,Path geomet 阅读全文

posted @ 2011-05-27 09:02 翰墨小生 阅读(12288) 评论(24) 推荐(6) 编辑

2011年5月25日

Direct2D教程(三)简单几何图形

摘要: 从本章开始,我们介绍D2D几何图形。D2D图形分类Direct2D支持多种类型的几何图形,包括Simple Geometry(简单几何图形)矩形圆角矩形椭圆Path Geometry(路径图形)Composite Geometry(复合图形)Geometry Group(图形组)Transformed Geometry(变换的图形)各种图形对应的D2D接口如下,所有接口都继承自ID2D1Geometry。矩形-ID2D1RectangleGeometry圆角矩形-ID2D1RoundedRectangleGeometry椭圆-ID2D1EllipseGeometry路径图形-ID2D1Path 阅读全文

posted @ 2011-05-25 09:48 翰墨小生 阅读(11256) 评论(12) 推荐(2) 编辑

2011年5月23日

Direct2D教程(二)来看D2D世界中的Hello,World

摘要: 引子任何一门语言的第一个教程几乎都是Hello,world。我们也不例外,但是这里不是教大家打印Hello,world,而是编写一个简单的D2D绘制程序,让大家对Direct2D的程序结构及编程方法有一个基本的认识。下面我们来看如何一步一步绘制一个矩形。基本概念在开始之前,还是先介绍一些基本的概念,有助于大家理解程序,这些概念包括,Brush(画刷),Render target(渲染目标),Geometry(几何图形),它们会贯穿整个教程,所以越早介绍越好,对于有Windows GDI基础的人来说,理解这些概念很容易。没有基础的也没关系,我们可以先了解一下,随着学习的深入,会有更加深刻的认识。 阅读全文

posted @ 2011-05-23 20:26 翰墨小生 阅读(24805) 评论(38) 推荐(7) 编辑

导航

书法字典:https://www.shufadict.com