- 博客(43)
- 资源 (21)
- 收藏
- 关注
转载 char与wchar_t之间的转换
关于C++中的char*与wchar_t*这两种类型的相互转换,网上说的大多很繁琐,可行性也不高。下面这个方法是在MSDN里面找到的,个人认为还比较不错: 把char*转换为wchar_t*用stdlib.h中的mbstowcs_s函数,可以通过下面的例子了解其用法: char*CStr = "string to convert";size_tlen = strlen(CS
2013-06-04 03:04:32 1124
原创 一个生成随机数的类
因为最近在写一个小应用时,需要用到随机数,所以就自己写了一个随机数生成器。示例代码如下:// 随机数生成器#include #include using namespace std;class CRand{public: CRand(); ~CRand(); int Rand(int range); // 获取整型随机数 float Rand(
2013-05-19 00:53:04 945
转载 the value of esp was not properly saved
问题说明: 主模块在调用Dll的导出函数时会保存返回地址在堆栈中(ESP+xxx)。函数调用返回时,会弹栈取得返回地址(ESP-xxx),从而返回到主模块。 vaule of ESP was not properly saved across a function call. 上面出现的错误是系统提示主模块调用前堆栈的指针(ESP),与调用导出函数后的指针不符。 一般有
2013-05-12 23:22:11 810
转载 heap corruption detected: after normal block 可能的原因
heap corruption detected: after normal block 可能的原因转自:http://www.cppblog.com/oyrp/articles/102252.html最近写了点C++的代码,其中也出现过很多奇怪的错误,heap corruption detected就是其中之一,而且这种错误很容易出现,一般出现该错误,在debug中都有大致如
2013-05-06 00:18:12 1256
转载 _BLOCK_TYPE_IS_VALID(pHead->nBlockUse)
在用D3DX写程序,遇到了一些问题,_BLOCK_TYPE_IS_VALID(pHead->nBlockUse)是其中的一个,后来在网上查了一下,得到相关信息,特记录一下,以备查看。 问题产生原因: 1.内存泄漏;所以当程序退出时,系统会收回分配的内存,于是调析构函数,由于内存已被错误地释放,于是就会出现“Debug Assertion Failed”的错误。
2013-04-08 00:37:57 1040
转载 Explicit Constructors(显式构造函数)
按照默认规定,只有一个参数的构造函数也定义了一个隐式转换,将该构造函数对应数据类型的数据转换为该类对象,如下面所示:class String {String ( const char* p ); // 用C风格的字符串p作为初始化值//…}String s1 = “hello”; //OK 隐式转换,等价于String s1 = String(“hello”
2012-11-06 22:21:50 457
原创 Lua 源码剖析第1天
Lua 源码剖析第1天 lmathlib.c , lstrlib.c首先看lmathlib.c文件。标准数学库。预处理部分:包含了stdlib.h、math.h、lua.h、luaxlib.h、lualib5个头文件。定义了PI,以及1弧度 = PI/180.0 。 函数部分:实现了一系列常用数学函数。每个函数实现方法一致,首先函数名命名格式遵循math_xxx(x
2012-11-06 04:20:44 1119
原创 DLL初窥
DLL初窥经常看到dll文件,自己却未曾使用过。今天我们来写一个简单的程序,以调用dll文件。这个程序通过调用add.dll文件,来进行加法运算。首先要认识 __declspec(dllexport) :声明一个导出函数,即这个函数要从该dll导出,所以有:// add.h#ifndef DLL_H#define DLL_Hextern "C" int __decl
2012-10-31 01:59:05 716
原创 3D地形绘制 - 第一篇
鉴于学习3D地形绘制已经有一段时间了,所以想把所学过的内容重新回顾一遍。参考资料:《3D游戏编程》。 第一篇 高度图1 高度图(Height Map) 在高度图中,高度值表现为0 ~ 255之间的明暗值。高度图技巧的使用方法就是:首先,将想要制作的三维地形制作为只包含二维高度信息的高度图,然后,利用高度图信息重新制作为三维地形(terrain)。 2 高度图生成
2012-10-27 16:20:02 2913
原创 《Lua程序设计[第二版]》第11,12章笔记
第11章 数据结构Lua中的table不是一种简单的数据结构,它可以作为其他数据结构的基础。通过table来表示数组、记录、线性表、队列、集合等。 11.1数组使用整数来索引table即可在Lua中实现数组,一般以1作为数组起始索引。a = {}for i=1, 1000 doa[i] = 0endprint(#a)
2012-10-26 17:25:07 1067
原创 《Lua程序设计[第二版]》第9,10章笔记
第9章 协同程序(coroutine)协同程序与线程(thread)差不多,也就是一条执行序列,拥有自己独立的栈、局部变量和指令指针,同时又与其他协同程序共享全局变量和其他大部分东西。主要区别:一个具有多个线程的程序可以同时运行多个线程,而协同程序却需要彼此协作地运行。就是说一个具有多个协同程序的程序在任意时刻只能运行一个协同程序,并且正在运行的协同程序只会在其显示的地要求挂起(suspe
2012-10-24 02:16:01 1220 1
原创 《Lua程序设计[第二版]》第7,8章笔记
第7章迭代器与泛型for7.1迭代器与closure所谓“迭代器”就是一种可以遍历的(iterate over)一种集合中的所有元素的机制。在Lua中,通常将迭代器表示为函数。每调用一次函数,即返回集合中的下一个元素。一个closure就是一种可以访问其外部嵌套环境中的局部变量的函数。closure的例子:function values(t) locali = 0
2012-10-16 23:58:24 886
原创 《Lua程序设计[第二版]》第5,6章笔记
第5章表达式Lua的函数一般将参数放到函数名后的圆括号中。特殊情况:一个函数只有一个参数,并且该参数是一个字符串或table构造式,那么圆括号可有可无,例如:print “Hello World” -- print(“HelloWorld”)dofile ‘a.lua’ -- dofile(‘a.lua’)print [[a m
2012-08-23 23:25:34 1103
原创 《Lua程序设计[第二版]》第3,4章笔记
第3章表达式3.1 算术操作符Lua支持的常规算术操作符有:二元的 +(加)、-(减)、*(乘)、/(除)、^(指数)、%(取模),一元的 -(负号)。其中取模操作符的定义:a % b = a - floor(a/b) * b。3.2 关系操作符Lua提供的关系操作符有: = == ~=这些操作符的运算结果都是 true 或 false 。对于table
2012-08-22 02:46:47 1497
原创 《Lua程序设计[第二版]》第1,2章笔记
第1章 开始1.1 程序块(chunk)Lua执行的每段代码,例如一个源代码文件或交互模式中输入的一行代码,都称之为一个“程序块”,一个程序块也就是一连串的语句或命令。Lua语句之间不需要分隔符,但也可以使用分号来分隔语句,下面4个程序块都合法,并完全等价:a = 1b = a * 2 a = 1;b = a * 2; a = 1 b = a * 2
2012-08-20 23:26:13 1376
原创 编译lua的库和解释器
如何一次性编译lua的库和解释器呢?下面我来说说我的编译步骤:(1)在命令行下使用编译器我是默认将VS 2008装在C盘的,下面添加相关路径时,请注意你的路径是否和我的一致。首先添加环境变量:打开“我的电脑”——“属性”——“高级”——“环境变量”在“用户变量”中新建2个变量,一个名为include,其值为:C:\Program Files\MicrosoftVisual Stud
2012-08-20 15:02:57 7424
转载 Lua库和工具
相比Java、Python、Perl,Lua的开源工具和库可能并不算多,但其中不乏优秀之作。以下介绍的资源均可在http://lua-users.org/wiki/LuaAddons上找到,而且绝大多数都遵循着与Lua相同的许可协议。一、Kepler Kepler是一个简单且轻量的Web开发平台(但这并不意味着只能用它来开发简单的应用),支持用Lua撰写Web程序,因此相
2012-08-20 11:38:22 1307
原创 编写第一个lua程序
今天从www.lua.org上下载了lua 5.1的源码,准备学习一下lua编程。拿到lua 5.1的源码后,先将其编译为静态库lua.lib。(我用VS 2008建立的工程)将生成的lua.lib用于下面这个例子(该例来源于网上,忘记出处了):extern "C"{#include "lua.h"#include "lualib.h" #include "lauxlib.
2012-08-20 02:14:05 4650 2
转载 【图像缩放篇之三】三次线性插值和MipMap链
tag:图像缩放、速度优化、定点数优化、近邻取样插值、二次线性插值、三次线性插值、 MipMap链、三次卷积插值、MMX/SSE优化、CPU缓存优化摘要:首先给出一个基本的图像缩放算法,然后一步一步的优化其速度和缩放质量;高质量的快速的图像缩放 全文 分为: 上篇 近邻取样插值和其速度优化 中篇 二次线性插值和三次卷积插值 下篇 三次线
2012-08-17 22:40:22 3061
转载 【图像缩放篇之二】二次线性插值和三次卷积插值
tag:图像缩放、速度优化、定点数优化、近邻取样插值、二次线性插值、三次线性插值、 MipMap链、三次卷积插值、MMX/SSE优化、CPU缓存优化摘要:首先给出一个基本的图像缩放算法,然后一步一步的优化其速度和缩放质量;高质量的快速的图像缩放 全文 分为: 上篇 近邻取样插值和其速度优化 中篇 二次线性插值和三次卷积插值 下篇 三次线
2012-08-17 22:38:50 11134 1
转载 【图像缩放篇之一】近邻取样插值和其速度优化
tag:图像缩放、速度优化、定点数优化、近邻取样插值、二次线性插值、三次线性插值、 MipMap链、三次卷积插值、MMX/SSE优化、CPU缓存优化摘要:首先给出一个基本的图像缩放算法,然后一步一步的优化其速度和缩放质量;高质量的快速的图像缩放 全文 分为: 上篇 近邻取样插值和其速度优化 中篇 二次线性插值和三次卷积插值 下篇 三次线
2012-08-17 22:34:07 3473
原创 Irrlicht引擎源码剖析——第十八天
今天开始看GUI(图像用户界面)模块的实现部分了。首先是BuildInFont.h,内置字体,在这个头文件里作者使用了Bin2H。Bin2H是免费软件,可以从www.code3d.com 免费下载,一个将二进制文件转换到 C 头文件中的Win32命令行实用工具,数据块作为代表该文件的内容。GUIIcons.h中建立了15种图标,并注明在BuidInFont中还有13种。 接下来是各个GUI
2012-08-13 13:33:04 1961
原创 Irrlicht引擎源码剖析——第十七天
今天开始看图像用户界面(GUI)的实现了。首先是include\gui下的头文件,先预览各个文件的预定义部分,发现大多数都包含了IGUIElement.h头文件,所以首先看IGUIEnvironment.h。在该文件里实现了一个GUI全部元素(或者说GUI组件更贴切点吧)的基类。处理GUI元素的显示位置,元素与子元素的关系,元素的基本属性等等。 看完GUI所有元素的基类,接着看各个元素的实
2012-08-10 20:19:34 1583
原创 Irrlicht引擎源码剖析——第十六天
作者在对于引擎场景管理的实现,其大部分内容是指场景节点是如何渲染的,分为哪些不同的场景结点,诸如动画网格节点、广告牌节点、二叉空间分割树(BspTree)节点、摄像机节点、光源节点、八叉树节点等等。把这部分的实现代码剥离出来,就发现场景管理的实现很简明清晰。 昨天已经看过八叉树节点了,今天首先看网格节点。CMeshSceneNode.h/.cpp实现了如何渲染网格节点。同CMeshScen
2012-08-09 12:24:10 3350
转载 BSP(二叉空间分割)树
BSP(二叉空间分割)树是另一种类型的空间分割技术,其已经在游戏工业上应用了许多年(Doom是第一个使用BSP树的商业游戏)。尽管在今天BSP树已经没像过去那么受欢迎了,但现在仍在广泛地采用这项技术。当你看一下BSP在碰撞检测方面那极度干净漂亮和高速的效率,立刻能让你眼前一亮。不但BSP树在多边形剪切方面表现出色,而且还能让我们有效地自由运用world-object式的碰撞检测。BSP树的
2012-08-09 09:45:17 40028 5
原创 Irrlicht引擎源码剖析——第十五天
今天开始看scene impl部分。场景管理部分是该引擎的核心,我们要开始最精彩的部分落!当然首先从内容最少的文件开始入手。CSeneNodeAnimatorFlyCircle.h/.cpp,实现了转换动画场景结点的类。CSceneNodeAnimatorRotation.h/.cpp和其一样,也是场景结点的动画转换运算。 在CStaticMeshOBJ.h/.cpp中,声明了一个CSta
2012-08-08 10:48:44 1760
转载 八叉树
左: 立方体的切割. 右: 对应的八叉树维基释义:八叉树(Octree)是一种用于描述三维空间的树状数据结构。八叉树的每个节点表示一个正方体的体积元素,每个节点有八个子节点,这八个子节点所表示的体积元素加在一起就等于父节点的体积。一般中心点作为节点的分叉中心。百度百科释义:八叉树(Octree)的定义是:若不为空树的话,树中任一节点的子节点恰好只会有八个,或零个
2012-08-08 09:08:36 1917
原创 Irrlicht引擎源码剖析——第十四天
昨天结束了CVideoSoftware类,今天看DirectX和OpenGL的封装。先看DirectX中的CDirectX8Texture.h/.cpp,在这部分的实现里,用到了d3d8.h、d3dx8tex.h头文件以及d3dx8.lib库文件。主要是对纹理的处理:获取纹理、纹理的颜色格式、复制纹理、纹理属性的各个操作等等。 在CVideoDirectX8.h/.cpp中,声明的CVid
2012-08-07 10:56:12 1757
转载 OpenGL基础图形编程
一、OpenGL与3D图形世界1.1、OpenGL使人们进入三维图形世界 我们生活在一个充满三维物体的三维世界中,为了使计算机能精确地再现这些物体,我们必须能在三维空间描绘这些物体。我们又生活在一个充满信息的世界中,能否尽快地理解并运用这些信息将直接影响事业的成败,所以我们需要用一种最直接的形式来表示这些信息。 最近几年计算机图形学的发展使得三维表现技术得以形成,这些三维表现技
2012-08-06 15:37:28 71429 1
原创 Irrlicht引擎源码剖析——第十三天
依照看的顺序,今天先看CTRFlat.cpp,该文件实现了一个平面着色三角形的渲染器,派生于CTRTextureGouraud接口类。与之相关的CTRFlatWire.cpp,实现了以线框形态绘制物体的渲染器类。 在CTRGouraud.cpp中,实现了一个用高洛德着色三角形的渲染器,同样派生于CTRTextureGouraud接口类,与之相关的CTRGouraudWire.cpp,实现了
2012-08-05 23:31:42 1909
原创 Irrlicht引擎源码剖析——第十二天
根据在include\video下的EdriverTypes.h文件中定义的驱动器类型的排列顺序,我们开始看video impl\Software下的文件。遵照头文件的包含关系以及内容多少的原则,先看S2Dvertex.h文件,在该文件中实现了一个基于2D的顶点结构。 文件IZBuffer.h中声明了一个Z缓冲接口类,在CZBuffer.h/.cpp中,声明的Z缓冲类就是该接口
2012-08-04 22:54:56 1505
原创 Irrlicht引擎源码剖析——第十一天
今天首先看CSurfaceLoaderBmp.h/.cpp,顾名思义给表面载入Bmp位图。建立了BMP文件头结构。声明了一个给表面载入位图的类。在isALoadableFileFormat()函数中语句:return headerID =='MB';应该为return headerID =="MB";,这是根据位图文件类型标志:0x424D,即字符串"BM"得出的。有读取位图数据、解压位图
2012-08-03 20:57:26 1483
原创 Irrlicht引擎源码剖析——第十天
在include分类目录下的5个模块,仅剩gui模块了。我觉得gui模块算是引擎的附加功能,可以独立出来看,所以先放下这块。一鼓作气先把引擎最重要的核心部分——video、scene的实现模块搞定。 按照之前看的顺序,先从video模块开始。在分类目录video impl下,包含Null,Software,DirectX,OpenGL四个子分类目录。根据在include\video下的Ed
2012-08-02 20:59:40 2851
原创 梦境记——老婆饼
梦境记——老婆饼2012.08.02骑着自行车游弋在街道上,街景如此熟悉,却记不得是哪。街上过往人车很多,但是给人一诡异的安静。贴着街边,一个个商店从我眼角划过。忽然,感觉像是被什么给刺中了,抑或是被什么闪耀到了。我停住前行的车轮,倒退了回去。一个糕点店。我停好车,走进商店,看到橱窗里各式各样的糕点。忽然我看到了那种饼,那个久违多年的饼——老婆饼。我竭力搜索
2012-08-02 16:00:14 2912
原创 Irrlicht引擎源码剖析——第九天
今天首先看ISceneNode.h文件,这个文件内容相比以前丰富多了。实现了场景结点的接口。对于一个场景结点,定义了结点名字、各转换矩阵、父结点指针、子结点存储链表、结点动画存储链表、结点id、结点能否访问等属性。并根据这些成员实现了一些方法,设置、获取成员变量的值,渲染前后的操作等。 接着看IAnimatedMeshSceneNode.h,在这个文件里实现了继承自IsceneNode类的
2012-08-01 22:07:59 3363
原创 Irrlicht引擎源码剖析——第八天
根据预定义中头文件的包含关系,在include\scene中首先从ImeshBuffer.h开始看,在该文件中实现了一个网格缓冲区的类,包含了材质、顶点、索引、边界盒等信息。 在IMesh.h中,实现了网格的接口,有获取网格缓冲区信息、设置材质类型、获取边界盒等功能。 在IAnimatedMesh.h中,实现了一个动画网格的接口。有获取动画网格的帧数、获取指定帧的网格等操作。
2012-07-31 20:00:22 3332
原创 Irrlicht引擎源码剖析——第七天
首先看了一下include\scene下的头文件,发现多个头文件的预定义中包含了include\video中的头文件,所以决定先从include\video下的头文件看起。 首先是Color.h,这个文件实现了一个32位真彩色类(分32位整型和32位浮点型两种),该类用于引擎的大部分地方。只是在该类的方法中,对于设置颜色的各分量,有不同意见,如在设置alpha分量中:color =((
2012-07-30 22:23:04 3710
原创 Irrlicht引擎源码剖析——第六天
因为昨天在CZipReader.cpp中包含了other impl中的os.h文件,且目测other impl模块内容很少,所以今天首先搞定这块。在other impl\extern目录下,包含了两个开源库——zlib和jpeglib。我们先添加这两个库,jepglib库是一个jpeg压缩库,zlib是提供数据压缩用的函式库。Other impl还包含另外3个文件:fast
2012-07-29 22:03:08 3400
原创 Irrlicht引擎源码剖析——第五天
在目测了一番后,决定从io模块下手。先看IFileList.h,顾名思义,创建了一个文件列表类,一个基类。然后看IReadFile.h,创建了用于读取文件的基类,在前两个的基础上实现了IFileList.h中的文件系统类。文件系统(File System)管理文件和Zip文档,并提供对它们的访问。中这样在include\io中的3个头文件全搞定,接下来看io模块的实现部分。 在
2012-07-28 20:29:16 3611
原创 Irrlicht引擎源码剖析——第四天
今天先看aabbox3d.h文件。在这个文件里实现了边界盒的相关操作,如边界盒与点、平面、边界盒的相交关系,重载运算符等等。 在heapsort.h中,实现了一个堆排序的算法。 在array.h中,实现了数组模板类,感觉就像SLT中的vector,该数组有堆排序、二分查找、增删元素、易调试等特点。但在二分查找函数中,有语句如下: if (!(element
2012-07-27 20:45:12 4353 2
《3D游戏编程-肖永亮》源代码
2013-05-06
《大型多人在线游戏开发》源代码
2013-05-03
《实时地形引擎》随书源码、gaia引擎源码
2013-05-03
《游戏编程全接触》源代码
2013-05-03
《DIRECTX.9.0 3D游戏开发编程基础》源代码
2013-05-02
《DirectX高级动画制作》 源代码
2013-04-27
《游戏关卡设计》 光盘资源
2013-04-26
zlib数据压缩库源码
2012-07-25
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人