- 博客(44)
- 收藏
- 关注
转载 call指令
CPU执行call指令时,进行两步操作:1、将当前的IP或CS和IP压入栈中2、转移call指令不能实现短转移,除此之外,call指令实现转移的方法和jmp指令的原来相同 依据位移进行转移的call指令call 标号(将当前的IP压栈后,转到标号处执行指令)CPU执行此中格式的call指令时,进行如下的操作:1、(SP)=(SP)-2 ((SS)*16
2012-09-27 14:33:57
1794
转载 ret指令
ret指令是转移指令,它们都修改IP,或同时修改CS和IP。ret指令用栈中的数据,修改IP的内容,从个人实现近转移ret指令用栈中的数据,修改CS和IP的内容,从而实心远转移CPU执行ret指令时,进行下面两步操作:1、(IP)=((SS)*16+(SP))2、(SP)=(SP)+2CPU执行retf指令时,进行下面4步操作:1、(IP)=((SS)*16+(SP))
2012-09-27 13:59:24
5225
转载 PE文件头
PE文件中,代码、已初始化的数据、资源和重定位信息等数据被按照属性(这里的属性指的是读、写、执行等属性)分类放到不同的Section(节区/或简称为节) 每个节区的属性和位置等信息用一个IMAGE_SECTION_HEADER结构来描,所有的IMAGE_SECTION_HEADER结构组成一个节表(Section Table),节表数据在PE文件中被放在所有的节数据的前面。
2012-09-05 14:27:23
1826
转载 winsocket1
套接字类型: 流式套接字(SOCK_STREAM),提供面向连接、可靠的数据传输服务,数据无差错、无重复的发送,且按发送顺序接收,基于TCP 数据报式套接字(SOCK_DGRAM),提供无连接服务,数据包以独立包形式发送,不提供无错保证,数据可能丢失或者重复,并且接受顺序混乱,基于UDP 基于TCP(面向连接)的socket编程服务器端步骤:1、创建套接字(s
2012-06-28 16:11:43
1272
转载 windows核心编程第3章笔记
第三章 内核对象3.1 何为内核对象? 在软件开发中,我们需要创建、打开和处理内核对象比如:令牌对象、事件对象、文件对象、文件映射对象、I/O完成端口对象、作业对象、邮件槽对象、互斥量对象、管道对象、进程对象、信号量对象、线程对象、可等待的计时器对象以及线程池工厂对象等。 每个内核对象都只是一个内存块,当调用创建系统函数创建内核对象时,内存块由操作系统内分配,
2012-06-20 13:40:18
558
转载 char*和CString转换
(1) char*转换成CString 若将char*转换成CString,除了直接赋值外,还可使用CString::Format进行。例如: char chArray[] = "Char test"; TCHAR * p = _T("Char test");( 或LPTSTR p = _T("Char test");)
2012-06-17 23:20:27
721
转载 网格1
10.1 几何信息 ID3DXMesh接口对象包含了一个用于保存网格中顶点数据的顶点缓冲区,和一个用于记录三角形顶点在顶点缓冲区中索引信息的索引缓冲区。 可以通过下面方法获得指向这些缓冲区的指针 ID3DXMesh::GetVertexBuffer(LPDIRECT3DVERTEXBUFF9 *ppVB); ID3DXMesh::GetIndexBuffer
2012-06-13 17:10:31
1403
转载 C语言中字符串的处理方式(一)
写多了 Java 代码,对 String 类 很是喜爱,可惜经典的 C 语言没有。。。最近在做程序过程中,发现对C语言字符串的处理很模糊,一会儿用数组,一会儿用指针,一会儿又引入 string.h。。。于是决定总结一下C语言中字符串的处理,一则作为笔记,二则作为技术交流和大家分享。字符串字面量(字符串常量,在C标准中称为,字符串字面量)如何存储字符串字面量 从本质上而言,C语
2012-06-11 11:14:24
540
转载 lstrcpy strcpy 区别
strcpy是C运行时函数,是标准C提供的函数 lstrcpy是Windows API 而StrCpy仅仅是lstrcpy的调用而已,相当于lstrcpy 在微软的开发环境里比方说VC开发windows程序,最好使用lstrcpy(),否则很多地方会出问题,
2012-06-09 22:58:46
1713
转载 模版缓存3
7.1 模板技术7.1.1 模板的概念模板缓冲(Stencil Buffer)用来控制是否一个像素一个像素地向渲染目标表面绘制场景。在模板缓冲最基本的一级上,它能够使程序掩盖住被渲染图像的一部分,使它不能显 示。模板缓冲区是一个记录每个像素信息的附加的缓冲区, 很像一个z缓冲区。实际上,该缓冲区就驻留在z缓冲区的某些位中。常见的模板/z缓冲区格式为15位的z和1位的模板,或24位的z和
2012-06-07 21:51:35
1349
转载 模版缓存2
当实现一个镜面,一个物体假如在一面镜子前那么它就会被反射。然而,我们不想测试空间一个物体是否在一面镜子前,要做它是非常复杂的。因此,为了简化事 情,我们总是反射物体并且无限制地渲染它。但是这样就有一个象本章开头的图8.1一样的问题。即,物体反射被渲染到了没有镜子的表面。我们能够用模板缓存 来解决这个问题,因为模板缓存允许我们阻止渲染在后缓存中的特定区域。因此,我们使用模板缓存来阻止渲染被反射的不在
2012-06-07 21:48:33
1335
转载 模板缓存1
模板缓存是一个离屏缓存,我们能够用它来完成一些特效。模板缓存与后台缓存和深度缓存有相同的定义,因此在模板缓存中的像素与后台缓存和深度缓存中的像素 是相协调的。就象名字所说,模板缓存就象一个模板它允许我们刷新渲染后缓存的某个部分。 举例,当要实现一个镜子时,我们只需要简单地反射一个物体细节到镜子平面上;然而,我们仅仅想只绘制镜子里的反射结果。我们能用模板缓存来渲染它,图 8.1清楚的
2012-06-07 21:40:54
1546
转载 DX融合技术
融合处理的步骤:1。设置融合因子D3DRS_SRCBLEND和D3DRS_DESTBLEND Device->SetRenderState(D3DRS_SRCBLEND,D3DBLEND_SRCCOLOR);Device->SetRenderState(D3DRS_DESTBLEND,D3DBLEND_INVSRCALPHA);2。如果使用alpha分量,还需指定其来
2012-05-29 10:34:22
1507
转载 DX着色
着色步骤1。为顶点缓存增加color属性2。设置着色模式,Device->SetRenderState(D3DRS_SHADEMODE,D3DSHADE_FLAT)DX颜色小结1。 颜色可用红色,绿色和蓝色的光强来描述,这三种分量可按不同的亮度进行加性混合,在D3D中可用D3DCOLOR,D3DCOLORVALUE或D3DXCOLOR类型进行对颜色进行描述。2。我们可将
2012-05-28 17:09:48
1260
转载 DX纹理映射
总结为场景添加纹理映射的步骤1。构造组成物体的顶点,并为其指定纹理坐标。2。用函数D3DXCreateTextureFromFile为IDirect3DTexture9接口加载一种纹理。3。设置缩小过滤器和放大过滤器及多级渐进纹理过滤器4。绘制物体前,用函数IDirect3DDevice9::SetTexture来设定与该物体关联的纹理。注意:关闭灯光,Device->Se
2012-05-28 14:05:40
1686
转载 DX光照
为一个场景添加光照的步骤如下。1,启用光照Device->SetRenderState(D3DRS_LIGHTING,true);2,为每个物体创建一种材质,并在绘制相应物体前应用(设置)该材质D3DMATERIAL9 mtrl;Device->SetMaterial(&mtrl);3,创建一种或多种光源,设置并启用。D3DLIGHT9 dir;De
2012-05-28 14:00:41
1329
原创 求三角形的法线
法线的计算:假定一个三角形由顶点p0,p1,p2构成,计算顶点法线n0,n1,n2先求出这个三角形的面法线p1-p0=up2-p0=v//调用叉积函数进行运算,然后调用求法线函数D3DXVec3Cross(&n,&u,&v);//如果调换后面两个参数的位置,则法线相反D3DXVec3Cross(&n,&v,&u);D3DXVec3Normalize(&n
2012-05-26 22:09:01
2515
转载 sin cos tan cot sec csc
直角三角形有 对边 邻边 斜边锐角和 钝角三角形有对边 邻边正弦(sin):角α的对边比上斜边 余弦(cos):角α的邻边比上斜边 正切(tan):角α的对边比上邻边 余切(cot):角α的邻边比上对边 正割(sec):角α的斜边比上邻边 余割(csc):角α的斜边比上对边
2012-05-12 21:55:54
3531
转载 Direct3D几何流水线由世界变换、观察变换、投影变换和视口变换几个部分组成。
Direct3D几何流水线由世界变换、观察变换、投影变换和视口变换几个部分组成。一、坐标空间1.1 局部坐标系用于描述物体自身属性的独立坐标系,它相对于物体中心位置构成一个模型空间。在该模型空间,描述了物体的方向和构成物体的元素相对于物体中心的位置。1.2 世界坐标系用于建立一个描述其他坐标系所需要的参考框架,以便指定物体在该坐标系中的位置、方向及大小。其描
2012-05-11 23:25:01
1134
转载 坐标系与变换矩阵
1.世界坐标系和模型几何变换SetTransform(D3DTS_WORLD,&world) 物体在图形学中通常通过一个4X4矩阵来表示三围物体的空间几何变换,表示三围物体在世界空间中集合变换的矩阵称为世界变换矩阵,简称世界矩阵,在Direct3D中通过为Direct3D设备接口设置世界矩阵完成其模型几何变换。模型集合变换有三种基本类型:平移(Translate),旋转(Rotae)
2012-05-09 13:28:50
1763
转载 游戏程序员养成计划 (更新2010.11.6)
与玩游戏相比,写游戏要复杂上千万倍,除了需要掌握通用的编程技巧以外,还要有相当的图形学,物理,数学基础,特别是在国内,由于相关资料的缺乏,更是让初学者无从下手。下面总结了一些入门方法和比较容易入手的资料。 首先你要精通一门高级语言,比如C++或者C#,其次,要有良好的英文阅读能力。对游戏开发者来说英文阅读能力是最重要也是最基本的工具之一,因为你遇到的大部分资源都将是英文的,
2012-05-08 18:34:21
390
转载 转载dx龙书书评
首先得声明我这篇文章只有很少的篇幅介绍龙书,其实我是想写点东西给那些看完龙书的人。 这是我接触3D图形编程的第一本书,接触3d图形编程前,我看的是《Windows 游戏编程大师技巧》,只看了前几章,当时我急着想去学3D的酷玩意儿,立刻就没耐心看GDI,DirectDraw。转投Direct3D门下,入门书当 然是这本龙书了。对我来说龙书最棒的地方在于,它除了开始的数学基础章节外,每一章都
2012-05-08 18:31:30
1739
转载 D3D数学基础(初级篇)
Direct3D游戏开发学习笔记3——D3D数学基础(初级篇) (转)一、数学工具在虚拟3D世界中的作用、D3D与D3DX的关系:1、数学的作用:数学是搭建虚拟3D世界的基础,角色控制、动画、关照计算、阴影计算、特效显示等等,数学在里面都起着支柱作用;2、D3D与D3DX的关系:D3D是基本库的函数,任何跟基本渲染包括和硬件打交道的底层操作都在这里,它是必需。D3DX是扩展库函数,是做
2012-05-08 00:12:27
680
转载 [转]Direct3D入门-向量和距阵变换
向量(也叫矢量,英文叫vector) 向量就是包含大小(长度)和方向的一个量。向量有2维的,也有3维甚至4维的。在DX的所有结构体中,有一个结构体是用来表示3维向量的,它就是D3DVECTOR,这个结构体很简单,只有三个成员:x、y、z。一般来说,如果不涉及到向量运算的话,用这个结构体来定义一个向量就可以了。我们可以它来表示方向以及顶点在3D世界中的位置等。如
2012-05-07 23:25:57
647
转载 改变D3D中的渲染状态
改变D3D中的渲染状态1). 设置着色模式: SetRenderState(D3DRS_SHADEMODE, D3DSHADE_FLAT) //设置平面着色模式SetRenderState(D3DRS_SHADEMODE, D3DSHADE_GOURAUD) //
2012-05-07 17:52:58
407
转载 D3DFVF_XYZ和D3DFVF_XYZRHW的区别
今天,做了个实验得知,在顶点结构体中没有RHW时,Direct3D将执行视、投影、世界等变换以及进行光线计算,之后你才能在窗口中得到你所绘制的物体。当顶点结构体中有RHW时,就像上面那段英文所述,告知Direct3D使用的顶点已经在屏幕坐标系中了,不再执行视图、投影、世界等变换和光线计算,因为D3DFVF_XYZRHW标志告诉它顶点已经经过了这些处理,并直接将顶点进行光栅操作,任何用SetTran
2012-05-07 16:41:12
413
转载 三维旋转矩阵使用算法
3D数学 ---- 矩阵和线性变换一般来说,方阵能描述任意线性变换。线性变换保留了直线和平行线,但原点没有移动。线性变换保留直线的同时,其他的几何性质如长度、角度、面积和体 积可能被变换改变了。从非技术意义上说,线性变换可能“拉伸”坐标系,但不会“弯曲”或“卷折”坐标系。矩阵是怎样变换向量的向量在几何上能被解释成一系列与轴平行的位移,一般来说,任意向量v都能
2012-05-07 16:29:09
1753
转载 DX配置
一个DirectX程序要想正确的编译和链接,需要下面三个主要前提一 安装DirectX SDK二 正确配置.h文件路径和.lib文件路径三 正确链接所需.lib文件详细步骤如下:一.安装DirectX SDKhttp://msdn.microsoft.com/zh-cn/directx/aa937788.aspx这是微
2012-05-07 10:25:52
835
转载 齐次坐标 (Homogeneous Coordinate)
齐次坐标 (Homogeneous Coordinate) 所谓齐次坐标就是将一个原本是n维的向量用一个n+1维向量来表示。例如,二维点(x,y)的齐次坐标表示为(hx,hy,h)。由此可以看出,一个向量的齐次表示是不唯一的,齐次坐标的h取不同的值都表示的是同一个点,比如齐次坐标(8,4,2)、(4,2,1)表示的都是二维点(4,2)。 那么引进齐次坐标有什么必要,它有什么优
2012-05-06 23:01:11
1360
转载 灵活顶点格式
灵活顶点格式--Flexible Vertex Format, FVF 灵活顶点格式(Flexible Vertex Format, FVF)用来描述在顶点缓冲区中的顶点存储格式中包含了哪些属性。Direct3D应用程序可以用几种不同的方式定义灵活顶点格式。灵活顶点格式使应用程序只使用它需要的顶点数据,排除那些它不需要的组成成分。这样,应用程序可以节省内存空间,减少系统带
2012-05-06 22:55:28
1064
转载 模板
1. 模板的概念。我们已经学过重载(Overloading),对重载函数而言,C++的检查机制能通过函数参数的不同及所属类的不同。正确的调用重载函数。例如,为求两个数的最大值,我们定义MAX()函数需要对不同的数据类型分别定义不同重载(Overload)版本。//函数1.int max(int x,int y);{return(x>y)?x:y ;}//函数2.
2012-05-04 14:12:50
232
转载 C++文件操作详解(ifstream、ofstream、fstream)
C++ 通过以下几个类支持文件的输入输出:ofstream: 写操作(输出)的文件类 (由ostream引申而来)ifstream: 读操作(输入)的文件类(由istream引申而来)fstream: 可同时读写操作的文件类 (由iostream引申而来)打开文件(Open a file)对这些类的一个对象所做的第一个操作通常就是将它和一个真正的文件联系起来
2012-05-04 13:56:28
371
转载 UPDATE_COMMAND_UI 处理菜单对应的用户界面 COMMAND 处理该菜单对应的功能
UPDATE_COMMAND_UI 处理菜单对应的用户界面 COMMAND 处理该菜单对应的功能 传统SDK程序,要改变选单命令项状态,可以呼叫EnableMenuItem或是CheckMenuItem,但这使得程序杂乱无章,因为你没有一个固定的位置和固定的原则处理命令项状态。MFC提供一种的方式,解决这个问题,这就是UPDATE_COMMAND_UI消息。其设计理念是,每当选单被拉
2012-05-03 21:36:34
507
转载 CString格式化,从“const char [6]”转换为“const wchar_t
“void ATL::CStringT::Format(const wchar_t *,...)”: 不能将参数 1 从“const char [6]”转换为“const wchar_t *”1> with1> [1> BaseType=wchar_t,1> StringTraits=StrTr
2012-05-03 20:19:10
1219
转载 vs2010生成mfc无法标记菜单
GetMenu()->GetSubMenu(0)->CheckMenuItem(0,MF_BYPOSITION|MF_CHECKED);一:在VS2010中,由于CMainFrame继承至CFrameWndEx会导致无法像VC6.0一样使用GetMenu()等函数,所以这时在建立工程的时候就应该选择为:第一步:项目标准: MFC标准 视觉样式和颜色:
2012-05-03 17:04:05
650
转载 list使用中遇到的erase问题(List Iterator Not Incrementable)
list使用中遇到的erase问题(List Iterator Not Incrementable)在VS2005中使用list的erase遇到了"List Iterator Not Incrementable"问题举个例子:1.list sList;list::iterator sP;sList.push_back(1);sList.push_
2012-04-27 00:12:01
406
转载 重大发现:VC++2005,2008或更高版本 之list iterator not incrementable 错误原因
在VC6中list Tlist;list::iterator iter; iter=Tlist.end(); 再iter++;此时iter的游标位置和iter.begin()相等 但在VC6以后的版本中,比如VC2002,2005,2008中list Tlist;list::iterator it
2012-04-26 23:39:55
443
转载 对C++ STL,list元素的循环删除操作 //断链,出错地方
1 #include iostream> 2 #include list> 3 #include algorithm> 4 using namespace std; 5 6 int main(int argc, char* argv[]) 7 { 8 listint> MyList; 9 10 for (int i = 0; i 1
2012-04-26 15:40:19
671
转载 删除stl list 类对象
#include using namespace std;class A{};int main(){lista;for(int i=0;i{a.push_back(new A());}list::iterator i;for(i=a.begin();i!=a.end();i++){delete *i;i=a.erase
2012-04-20 13:49:16
494
转载 释放资源
BeginPaint()对应EndPaint()GetDC()对应ReleaseDC()CreateCompatibleDC对应DeleteDC()HBITMAP对应DeleteObject()
2012-04-07 23:11:37
451
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人