自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

  • 博客(57)
  • 资源 (2)
  • 收藏
  • 关注

转载 debug和rlease的区别

在使用VC开发软件的过程中,正当要享受那种兴奋的时候突然发现:release与debug运行结果不一致,甚至出错,而release又不方便调试,真的是当头一棒啊,可是疼归疼,问题总要解决,下面将讲述一下我的几点经验,看看是不是其中之一:1. 变量。 大家都知道,debug跟release在初始化变量时所做的操作是不同的,debug是将每个字节位都赋成0xcc(注1),而release的赋值近似

2008-04-17 16:15:00 473

原创 重构中有关代码坏味之六__解决方案蔓延(SolutionSprawl)

 解决方案蔓延表现在许多类中都有完成某些职责的代码和或数据。用创建知识搬移到Factory重构可以解决对象创建职责蔓延的问题。

2007-07-24 12:37:00 485

原创 重构中有关代码坏味之五__不恰当的暴露(Indecent Exposure)

不恰当的暴露表现在客户了解到不太重要或间接重要的代码,对于这种坏味 可以用Factory封装类重构可以去除这中坏味。

2007-07-24 12:27:00 575

原创 重构中有关代码坏味之四__基本类型迷恋(Primitive Obsession)

如果基本类型值控制着类中的逻辑,而基本类型并不是类型安全的,应该考虑应用替换类代码重构。如果控制对象的状态转换的是使用基本类型值的复杂逻辑,那么可以使用State替换状态改变条件语句重构。如果控制算法运行的是非常复杂的条件逻辑,而且该逻辑还使用基本类型值,可以考虑应用strategy替换条件逻辑重构。如果隐式创建了使用基本类型表示树结构,比如安符串,代码将非常难用、易错而且充满重复,应

2007-07-23 21:08:00 633

原创 重构中有关代码坏味之三__条件逻辑太复杂(Conditional Complexity)

如果条件逻辑控制的是应该执行一种计算操作几个变形中的某个,则可以考虑应用STRATEGY替换条件逻辑重构。如果条件逻辑控制的是应该执行类的核心行为之外某个特殊行为的若干段中的某一段,则可以使用将装饰功能搬到DECORATOR重构。如果控制对象状态转换的条件表达式比较复杂,可以考虑通过应用State替换状态改变条件语句重构简化逻辑。 

2007-07-23 20:28:00 476

原创 重构中有关代码坏味之二__方法过长(Duplicated Code)

如果方法很长,是因为它包含了一个用来分派和处理 请求的在的switch语句,可以使用COMMAND替换条件调度程序重构将其缩短。如果使用SWITCH语句从接口不同的许多类收集数据,可以通过应用将聚集操作搬移到VISITOR重构缩短方法的长度。如果方法很长,是因为它包含算法的许多版本和运行时用选择版本的条件逻辑,那么可以应用STRATEGY替换条件逻辑重构缩短方法的长度。

2007-07-23 20:13:00 455

原创 重构中有关代码坏味之一__重复代码(Duplicated Code)

 通常情况:                   对于类层次中不同子类里存在的明显和/或微妙的重复,我们可以通过Template Method重构。对于子类中的方法除了对象创建不足之外其他实现方式都类似,可以应用Factory Method引入多态创建。 特殊情况:                            如果类的构造方法包含重复代码,通常可以通过应用

2007-07-23 19:59:00 507

原创 Ogre主要特点

  效率特性l         简单、易用的面向对象接口设计使你能更容易地渲染3D场景,并使你的实现产品独立于渲染API(如Direct3D/OpenGL/Glide等等)。l         可扩展的程序框架(framework)使你能更快的编写出更好的程序。l         为了节省你的宝贵时间,OGRE会自动处理常见的需求,如渲染状态管理,hierarchical cull

2007-06-13 22:07:00 844

原创 static的一个用法

今天看effective c++,发现一个有趣的东东,就是关于一个static的用法,以前没有怎么在实际工作中用到。使用static定义成员函数的含义,整个类只有这个成员的一份拷贝,并且这个成员可以不通过类的具体对象来访问。也就是说用static定义的成员函数可以当成全局函数使用,太好用了,太伟大了,c++,我爱你!!!!!

2007-04-26 16:25:00 501 1

原创 使用顶点着色器步骤

1.编写和编译顶点着色器2.创建一个IDircet3DVertexShader接口来代表基于编译过后的着色器代码的着色器3.用IDirect3DDevice9::SetVertextShader方法开启这个顶点着色器 

2007-04-08 18:01:00 588

原创 拦截API的基本步骤

  获得函数地址(GetProcAddress),取得被拦截的函数地址和要替代这个被拦截的函数的地址(也就是拦截后要处理的函数); 形成JMP指令(__asm),准备避开被拦截的函数跳转到处理函数直接处理; 设置内存可写(VirtualProtect),跳转后的函数执行; 记得恢复内存

2007-03-07 13:43:00 572

原创 使用DLL的原因一二三

1. 它们扩展了应用程序的特性。由于D L L能够动态地装入进程的地址空间,因此应用程序能够在运行时确定需要执行什么操作,然后装入相应的代码,以便根据需要执行这些操作。例如,当一家公司开发了一种产品,想要让其他公司改进或增强该产品的功能时,那么就可以使用D L L。 2. 它们可以用许多种编程语言来编写。可以选择手头拥有的最好的语言来编写D L L。也许你的应用程序的用户界面使用Microso

2007-03-06 13:48:00 467

原创 使用关键代码段时有效技巧收集

 1. 每个共享资源使用一个C R I T I C A L _ S E C T I O N变量,如果应用程序中拥有若干个互不相干的数据结构,应该为每个数据结构创建一个C R I T I C A L _ S E C T I O N变量。这比只有单个C R I T I C A L _ S E C T I O N结构来保护对所有共享资源的访问要好;2. 同时访问多个资源;3. 不要长时间运行关键

2007-02-13 16:07:00 429

原创 线程终止时会产生的操作

• 线程拥有的所有用户对象均被释放。在Wi n d o w s中,大多数对象是由包含创建这些对象的线程的进程拥有的。但是一个线程拥有两个用户对象,即窗口和挂钩。当线程终止运行时,系统会自动撤消任何窗口,并且卸载线程创建的或安装的任何挂钩。其他对象只有在拥有线程的进程终止运行时才被撤消。 • 线程的退出代码从S T I L L _ A C T I V E改为传递给E x i t T h r e

2007-02-09 16:31:00 460

原创 使用线程函数返回来终止线程需要注意的事项

• 在线程函数中创建的所有C + +对象均将通过它们的撤消函数正确地撤消。 • 操作系统将正确地释放线程堆栈使用的内存。 • 系统将线程的退出代码(在线程的内核对象中维护)设置为线程函数的返回值。 • 系统将递减线程内核对象的使用计数。 

2007-02-09 16:29:00 614

原创 终止线程的若干方法

• 线程函数返回(最好使用这种方法)。 • 通过调用E x i t T h r e a d函数,线程将自行撤消(最好不要使用这种方法)。 • 同一个进程或另一个进程中的线程调用Te r m i n a t e T h r e a d函数(应该避免使用这种方法)。 • 包含线程的进程终止运行(应该避免使用这种方法)。 

2007-02-09 16:28:00 558

原创 线程函数值得注意的问题

• 主线程的进入点函数的名字必须是m a i n、w m a i n、Wi n M a i n或w Wi n M a i n,与这些函数不同的是,线程函数可以使用任何名字。实际上,如果在应用程序中拥有多个线程函数,必须为它们赋予不同的名字,否则编译器/链接程序会认为你为单个函数创建了多个实现函数。 • 由于给你的主线程的进入点函数传递了字符串参数,因此可以使用A N S I / U n i c

2007-02-09 16:26:00 408

原创 线程的组成

 一个是线程的内核对象,操作系统用它来对线程实施管理。内核对象也是系统用来存放线程统计信息的地方。另一个是线程堆栈,它用于维护线程在执行代码时需要的所有函数参数和局部变量 

2007-02-09 16:23:00 847

原创 c/c++应用程序的进入点

应用程序类型 进入点 嵌入可执行文件的启动函数 需要ANSI字符和字符串的GUI应用程序 WinMain WinMainCRTStartup

2007-02-07 17:14:00 453

原创 使用顶点着色器的必要步骤

 1.编写和编译顶点着色器2.创建一个IDirect3DVertexShader9接口来代表基于编译过后的着色器代码的着色器3.用IDirect3DDevice9::SetVertexShader方法开启这个顶点着色器

2007-01-31 16:21:00 329

原创 算法入门

所有算法必须满足的条件:1.输入:不具有输入数据或具有多个输入数据。2.输出:具有一个以上的结果输出。3.定义明确:每一个步骤的语句必须很明确。4.有限的步骤:按照算法所描述的步骤执行,在有限的步骤内,一定会结束。5.有效率的步骤:算法中的每一个步骤必须是基本的指令。写算法的方式:1.条例式的步骤:以条例式的步骤来描述解决问题的方法。2.流程图:以图形符号来描述解决

2007-01-28 15:05:00 536

原创 网络I/O模型之性能数据比较

  I/O Method Performance Comparison I/O Model Attempted/Connected 内

2007-01-27 23:04:00 438

翻译 第十章 原始套接口 ----------------------第一节 创建原始套接口

  使用原始套接口的第一步是创建套接口。你可以使用socket或用WSASocket来创建。注意对于Windows 95, Windows 98, and Windows Me来说,在Winsock里没有目录条目的IP有SOCK_RAW套接口类型,可是,这不能防碍你创建这种套接口。它的意思是你不通过使用一个WSAPROTOCOL_INFO结构来创建一个原始套接口。返回第二章中查阅关于通过使用函数W

2007-01-24 21:58:00 950

原创 D3D基础笔记(8)- 模版缓存

深度/模版缓存的3种格式:D3DFMT_D24S8,D3DFMT_D24X4S4,D3DFMT_D15S1. 镜面实现流程:1.正常渲染所有的场景-地板,墙,镜子和茶壶--------不包含反射的茶壶。2.清除模版缓存为0.3.渲染只有镜子部分的图元到模版缓存中。4.现在我们渲染被反射的茶壶的后缓存和模版缓存中。

2007-01-23 17:25:00 643

原创 D3D基础笔记(7)- 混合

使用混合的必要步骤:1.设置混合要素D3DRS_SRCBLEND和D3DRS_DESTBLEND.2.假如你使用alpha部分,指定资源(材质或alpha通道)3.允许混合渲染状态 

2007-01-23 16:30:00 418

原创 完成端口的一个8错的blog(还有source code)

http://blog.csdn.net/yongshiok/archive/2006/12.aspx 

2007-01-23 15:31:00 359

原创 D3D基础笔记(6)- 纹理

D3D中的三种过滤器:1.Nearest point sampling,2.Linear filtering,Anisotropic filteringMipmaps过滤器的三种选项:1.D3DTEXF_NONE---------------不使用mipmap;2.D3DTEXF_POINT---------------通过使用这个过滤器,d3d将选择与屏幕三角形大小最接近的mipma

2007-01-23 14:29:00 535

原创 D3D基础笔记(5)- 灯光

灯光的组成:环境光(Ambient Light),漫反射(Diffuse Reflection),镜面反射(Specular Reflection).光源有点光源,方向光源,聚光灯。场景增加灯光的步骤:1.允许使用灯光2.为每个物体创建材质并且在渲染相应物体前应将材质附予物体3.创建一个或多个光源,设置它们,把它们设为可用。4.将其他附加光源设为可用。 

2007-01-23 10:04:00 465

原创 D3D基础笔记(4)- 色彩

着色处理模式有平面着色(flat shading)和高洛德着色(gouraud shading)

2007-01-23 09:52:00 420

原创 D3D基础笔记(3)- 在D3D中画画

 绘制准备工作:1设置资源流。设置资源流与一个顶点缓冲区挂钩,此流就是一个流入渲染管线的几何信息的流。2设置顶点格式。在这里我们指定后面用来绘图调用的顶点的顶点格式。3设置索引缓冲区。D3DX库提供如下6种网格生成函数:DEDXCreateBox,D3DXCreateSphere,D3DXCreateCylinder,D3DXCreateTeapot,D3DXCreatePol

2007-01-22 15:33:00 571

原创 D3D基础笔记(2)- 渲染管线

 渲染管线过程如下:Local Space ->World Space -> View Space ->Backface Culling -> Lighting -> Clipping -> Projection -> Viewport Space ->RasterizationLocal Space(本地空间):本地空间以叫建模空间,这是我们定义物体三角形列的坐标系。World Sp

2007-01-22 15:21:00 923

原创 D3D基础笔记(1)-初始化D3D

 初始化Direct3D的基本步骤:1.获取一个IDirect3D9接口指针。2.检查设备的技术特性(D3DCAPS9),搞清楚主显示卡是否支持硬件顶点处理。3.初始化一个D3DPRESENT_PARAMETERS结构实例,这个结构包含了许多数据成员,它们允许我们指定将要创建的IDirect3DDevice9接口的特性。4.创建一个基于已经初始化好的D3DPRESENT_PARAM

2007-01-22 14:47:00 723

转载 知笑话大全

http://r1114152.blog.hexun.com/7366377_d.html

2007-01-18 09:24:00 417

原创 TCP/IP基础笔记(3)-TCP/IP概述

 1.TCP/IP的优点a..好的破坏恢复机制。b.能够在不中断现有服务的情况下加入网络。c.高效的错误率处理。d.平台无关性。e.低数据开销2.TCP/IP的工作a.握手过程b.报文管理c.流量控制d.错误检测和处理3.体系结构a.应用层,包括SMTP,FTP,NFS,NIS,LPD,Telnet和Remote Login。b.传输层,包括UD

2007-01-07 16:40:00 476 1

原创 游戏软件开发哲学

第一原则是尽可能保持局部化。这个规则适用于类、宏和其他数据类型。简言之,就是所有写在头文件中的内容。为了。为了强化这一点。可以通过对每个组件或软件包使用名字空间或在它们的符号名前加上前缀。这条原则的实际表现就是尽可能使用C++的内建数据类型和它们的无符号类型。第二原则是分离数据及其可视表示。第三原则是分离静态数据和动态数据。第四原则是避免不合逻辑的相关性。类只要包含它所需的所有数据和处

2007-01-03 22:12:00 413

原创 游戏组件体系结构主要构成

。 应用层组件。容器。数学。文本和语言处理。图形。碰撞。资源管理。牛顿物理学。网络

2007-01-03 21:35:00 419

转载 服务器端编程

首先,再次强调一下,网络游戏开发极为困难,技术含量相当的高,其编程知识涉及网络编程,操作系统进程、线程编程,图形图像编程(DirectX / OpenGL),WIN32 API编程(Windows下开发),以及各种算法和数据结构,同时对设计人员策划能力要求也颇高,如不能构思出一个吸引玩家的游戏世界,也必将导致开发失败。 目前,国内的网络游戏市场被韩国游戏霸占,情形让人心寒。在国内网络游戏编

2006-12-31 16:48:00 586

原创 TCP/IP基础笔记(2)____Internet服务和对应的端口号

 1.Whois是一种协议和服务,它允许我们找到有关的Internet主机和域的信息,通过查询任何可以利用Whois数据库服务器,Whois客户可以收集到诸如主机,域方位,地理地址等更多的信息。对应的是TCP端口432.Finger服务协议允许我们收集Inernet用户的信息。对应的是TCP端口793.FTP(File Transfer Protocol)是用于通过Inernet传输文件的

2006-12-31 15:06:00 430

原创 TCP/IP基础笔记(1)______________osi模型

  第一章开放式通信模型简介第一层物理层:    功能是负责传送比特流,这从DDL接收数据帧,并将帧的结构和内容串行发送即每次发送一个比特,然后这些数据流被传输给DLL重新组合成数据帧。第二层数据链路层:功能 一是负责将指令,数据包装到帧中,检测并修正传输帧的错误,重新组织从物理层收到的数据比特流。第三层网络层:    功能是负责在源机器和目标机器之间建立它们所使用的路由第

2006-12-27 10:12:00 475

原创 MD5算法

    在一些初始化处理后,MD5以512位分组来处理输入文本,每一分组又划分为16个32位子分组。算法的输出由四个32位分组组成,将它们级联形成一个128位散列值。首先填充消息使其长度恰好为一个比512位的倍数仅小64位的数。填充方法是附一个1在消息后面,后接所要求的多个0,然后在其后附上64位的消息长度(填充前)。这两步的作用是使消息长度恰好是512位的整数倍(算法的其余部分要求如此),同时确

2006-11-22 15:59:00 362

Excel转Lua的PYTHON脚本

excel转LUA的PYTHON脚本,非常有用,excel转Lua必备利器,用着省心舒心

2018-06-22

skin的设计框架

skin技术设计框架

2007-04-21

空空如也

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

TA关注的人

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