自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

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

转载 四元数与三维空间的旋转

四元数与三维空间的旋转我们要关心的是三维空间上任意的伸缩旋转变换是否可用四元数的乘积来表示,而这一点对四元数来说是完全能够胜任的。如果已知一个三维空间的伸缩旋转的转轴方向、旋转角度和伸缩比例,来求相应的四元数,是比较容易的。特别地,单位化的四元数用来描述旋转:以原点为旋转中心,旋转的轴是(α, β, γ)( α^2 + β^2 + γ^2 = 1), (右手系的

2014-05-23 14:19:16 1416

原创 基于PhotoScan的模型生成技术

基于图片生成模型的技术早已存在,也有若干软件可以模拟。俄毛子的PhotoScan软件,可以基于一组360度照片,生成逼真的高精度模型。从FoxEngine的实现上,不难看出,未来几年的次时代制作将是高度逼真的模型。所以,基于照片生成高模的技术可以作为次时代美术必不可少的辅助软件。下面,我进行了简单的尝试,并附以简单效果截图。这里先是一组各个角度的照片素材。 通过PhotoScan,

2013-08-04 00:57:21 2195

原创 PNPatches学习

PNPatches学习2013/5/1                    Simon&Lee理论学习通常,为了在游戏中更加丰富模型细节,AMD提出了一种Tessellation的网格拆分技术。经过若干年的发展,微软在DirectX11中引入了这一技术。在基于DirectX11的渲染管线中,增加了Hull-Shader Stage、Tessellator Stage和Domain-S

2013-05-01 23:55:44 727

原创 现代C++基于STL的算法使用

在C++11中,引入了lambda,可以极大的方便了STL算法函数的处理。下面以几个算法为例:for_each遍历算法find_if查询算法lower_bound排序算法原C++:for (std::vector::itorator it(vList.begin()); it != vList.end(); it++){ ... }std::vector

2013-04-06 02:27:28 460

原创 现代C++的智能指针

为了更加高效安全的使用指针,智能指针应运而生。1. unique_ptr (原auto_ptr,由于不够高效,已被否决):动态分配对象以及当对象不再需要时自动执行清理,并且指针无法复制,只能通过std::move移动;    auto ptrA = unique_ptr(new Song(L"T", L"A"));    auto ptrB = ptrA;    // wrong!!!

2013-04-06 02:01:35 546

转载 内存分配器dlmalloc 2.8.3源码浅析

目    录1. 本文档介绍 12.边界标记法 23. 分箱式内存管理 64. 核心结构体malloc_state 135. 内存分配相关函数 165.1 函数dlmalloc 165.2 函数tmalloc_small 255.3 函数tmalloc_large 275.4 函数sys_alloc 325.5 函数m

2013-03-12 00:11:20 997

转载 C/C++内存泄漏及检测

C/C++内存泄漏及检测2011-02-20 17:51 by 吴秦, 10936 阅读, 7 评论, 收藏, 编辑 “该死系统存在内存泄漏问题”,项目中由于各方面因素,总是有人抱怨存在内存泄漏,系统长时间运行之后,可用内存越来越少,甚至导致了某些服务失败。内存泄漏是最难发现的常见错误之一,因为除非用完内存或调用malloc失败,否则都不会导致任何问题。实际上,使用C/C++这

2013-03-11 23:08:04 327

原创 基于LookIK实现的精简四方向移动动画

在类Wow的网络游戏中,需要实现四方向的移动动画,以实现在标准键盘操作下的八方向移动效果。通常情况下,为了实现这种效果,需要美术至少制作4个方向的移动动画。         在最近的研究中,发现了一个非常有用的东西LookIK。使用这个,可以实现任意方向的动画,并且还可以保证足够良好的效果。该灵感最初是源于一个同事对Wow资源的分析和猜测而来的。经过足够的验证,发现使用LookIK,可以实现非

2012-11-11 17:51:18 427

转载 带宽限制下的视觉实体属性传播

带宽限制下的视觉实体属性传播1. Introduction 简介 The Saga of Ryzom is a persistent massively-multiplayer online game (MMORPG) released in September 2004 throughout Europe and North America, localised in 3

2012-10-29 10:38:54 687

转载 网络游戏的位置同步

有关位置同步的方案实际上已经比较成熟,网上也有比较多的资料可供参考。在《带宽限制下的视觉实体属性传播》一文中,作者也简单提到了位置同步方案的构造过程,但涉及到细节的地方没有深入,这里专门针对这一主题做些回顾。最直接的同步方案就是客户端在每次发生位置改变时都向服务器报告 ,服务器再转发给周围的其他玩家,其他客户端将对应的游戏实体移动到新的位置上。但是这样存在一个问题,每个玩家的位置都是自己先

2012-10-29 10:36:07 383

转载 关于网络游戏的位置同步问题

关于网络游戏的位置同步问题同步在网络游戏中是非常重要的,他确保了每个玩家在屏幕 上看到的东西大体是相同的。其实呢,解决同步问题的最简单的方法就是把每个玩家的动作都向其他玩家广播一遍,这里其实就存在两个问题:1,向哪些玩家广 播,广播哪些消息。2,如果网络延迟怎么办。事实上呢,第一个问题是个非常简单的问题,不过之所以我提出这个问题来,是提醒大家在设计自己的消息结构的时 候,需要把这个因素考虑进去

2012-10-29 10:30:52 524

原创 关于3D空间旋转矩阵的推导

由于工作的原因,很少有时间来写博客了。这段时间,由于项目版本完结,有几天的休息时间,同时自己也在学习关于DX11,所以将过程中遇到的一些心得记录下来。 在复习3D空间的基础时,发现看到旋转矩阵,一时想不起如何推导出来的。所以,又尝试推导了一下。 如:初始变换坐标P0(x0, y0, z0), 变换后的坐标P1(x1, y1, z1)。为了方便推导,我们架设是绕着Z轴进行旋转的,并使用极

2012-07-23 10:55:38 2911 4

原创 一种较好的Singleton设计

  Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONE

2010-01-17 22:18:00 562

转载 c++中的explicit关键字(转)

c++中的explicit关键字用来修饰类的构造函数,表明该构造函数是显式的,既然有"显式"那么必然就有"隐式",那么什么是显示而什么又是隐式的呢?如果c++类的构造函数有一个参数,那么在编译的时候就会有一个缺省的转换操作:将该构造函数对应数据类型的数据转换为该类对象,如下面所示: class MyClass{public:MyClass( int num );}....MyClass

2009-10-25 17:15:00 271

转载 static_cast和dynamic_cast (转)

static_cast和dynamic_cast static_cast  用法:static_cast ( expression )   该运算符把expression转换为type-id类型,但没有运行时类型检查来保证转换的安全性。它主要有如下几种用法:  ①用于类层次结构中基类和子类之间指针或引用的转换。  进行上行转换(把子类的指针或引用转换成基类表示)是安全的;  进行下行转换

2009-10-25 16:55:00 379

原创 关于代码相关性的一点理解

关于代码相关性的一点理解2009-10-25通常在程序设计中,为了提高代码的重用,都尽量要减少代码之间的相关性。按照关联的强弱程度,可以分为以下几种:1、 硬关联如果A与B之间有关联,且B与A之间有强关联,那么A与B之间就存在这硬关联。如:// B.h#include “A.h”class B{           A   m_A;}; // A.h

2009-10-25 16:20:00 638 1

转载 次表面散射(Subsurface Scattering)(转)

次表面散射(Subsurface Scattering)作者:何咏    日期:2009-2-25   点击:1923如需转载本文,请声明作者及出处。 次表面散射是光射入非金属材质后再内部发生散射,最后射出物体并进入视野中产生的现象。次表面散射材质是高质量渲染中最复杂的材质之一,一个重要原因在于此表面散射物体内

2009-09-23 08:33:00 5264

原创 实现ListCtrl控件中 数据项可编辑功能

实现ListCtrl控件中 数据项可编辑功能2008年10月10日星期五要实现ListCtrl可编辑功能,只要在响应鼠标双击事件时,获取List中当前鼠标所在的Iem和SubItem序号,并获取当前数据项的Point位置,然后在响应的位置即时生成一个编辑框,并将原来数据项中的内容写入到编辑框中等待编辑,最后将编辑过的内容再保存到数据项中。为了实现这个功能,我需要对CListCtrl和C

2009-04-21 11:09:00 5875 13

原创 计算机软硬件信息获取程序实现

计算机软硬件信息获取程序实现2008年9月22日星期一最近从msdn上看到了获取系统软硬件信息的API和操作注册表的API,所以就编写了一个小的演示程序来实现,主要实现过程:通过一个登录框登录,其中用户名(默认Administrator)是在程序运行时自动在注册表中生成的,并在登录按钮中查询用户密码是否有效。当成功登录后,再初始化函数中实现系统软硬件信息获取并以树控件视图的形式显示出来。可

2009-04-21 11:06:00 2586

原创 一个基于WinInet API的FTP下载器的实现

一个基于WinInet API的FTP下载器的实现2008年11月4日星期二今天看了一下关于WinInet编程,编写了一个小的FTP下载器,运行图如下:详细实现代码如下: 包含头文件:// included for WinInet programming#include #include  部分实现代码:// Impletement of W

2009-04-21 10:47:00 989 1

原创 获取系统进程列表的实现

获取系统进程列表的实现2008年10月22日星期三通常,我们都用过操作系统自带的任务管理器,但是对于列表中的进程列表是如何获取的呢?我们可以使用给内存拍快照的方式获取内存中的进程列表信息。大概过程如下:1、  初始化PROCESSENTRY32结构PROCESSENTRY32 pe32 = {sizeof(PROCESSENTRY32)};    // 初始化结构2、  给系统

2009-04-21 10:46:00 662

原创 MS-Agent的使用简介

MS-Agent的使用简介2008年11月3日星期一通常我们都见过Office里的帮助助手,也见过瑞星里的卡卡,感觉很奇怪。其实,微软早在操作系统里提供了一个COM接口,通过调用COM接口可以实现类型的效果,如果想自定义的话,可以在微软的网站下载相关的工具。下面通过一个示例简要介绍实现过程:// 创建MS-Agent(使用COM)     ::CoInitialize(NULL);

2009-04-21 10:44:00 495

原创 基于MailSlot邮槽的进程间通信实例

基于MailSlot邮槽的进程间通信实例2008年11月6日星期四     实现进程间通信的方式有很多中,其中一种是使用邮槽来进行通信。这里编写了一个服务器----客户端程序来演示使用方法。1、  服务器端创建邮槽MailSlot对象2、  客户端打开MailSlot对象,并写入消息3、  服务器端先获取MailSlot信息,然后读取消息程序运行图如下: 

2009-04-21 10:42:00 585

原创 通过发送消息来实现线程间通信

通过发送消息来实现线程间通信2008年11月12日星期三线程间通常需要通信,可以通过发送消息来实现线程间的通信。但通常将继承线程类CWinThread(在MFC中),需要注意两点:一是,线程函数的消息映射宏(ON_THREAD_MESSAGE);二是,给线程发消息的函数(PostThreadMessage)。详细的代码实现如下:线程类:BEGIN_MESSAGE_MAP(CCacu

2009-04-21 10:40:00 3127

原创 实现右键快捷菜单

实现右键快捷菜单2008年10月17日星期五在Windows操作系统中,我们随处都见的右键快捷菜单是怎么实现的,这里给出一种简单的实现方法,具体实现过程如下:1、  使用VS 编辑环境定义一个菜单资源(无需过问编写代码,自动生成)2、  在所需弹出右键菜单的窗口类中编写WM_RBUTTONDOWN的消息处理函数,并在其他添加触发右键菜单的代码     CMenu menu1;

2009-04-21 10:38:00 394

原创 ANSI版本和UNICODE版本的函数实现

ANSI版本和UNICODE版本的函数实现2008年11月4日星期二通常我们在编程中需要提供软件的ANSI版本和UNICODE版本,以提供更大的兼容空间。最新的windows操作系统已经将内部实现都转换为UNICODE编码了。尽管有很多API还有ANSI版本,但是其内部实现却是先转换为UNICODE,然后再调用UNICODE版本的函数。因此,我们在实际编写两个版本的函数实现时,也应该采用这

2009-04-21 10:36:00 549

原创 关于托盘的使用

关于托盘的使用2009年3月16日星期一1、  托盘的创建// 创建托盘     m_nd.cbSize = sizeof(m_nd);     m_nd.hWnd   = AfxGetApp()->m_pMainWnd->GetSafeHwnd();     m_nd.uID    = IDR_MAINFRAME;     m_nd.uFlags = NIF_ICON

2009-04-21 10:32:00 366

原创 关于模式对话框的打开与关闭

关于模式对话框的打开与关闭2009年3月16日星期一打开模式对话框通常用DoModal()函数,而关闭模式对话框则有多种方法,如:OnCancel(),EndDialog(nExitCode)等。OnCancel()是受保护成员函数,因此只能在类内使用。如果需要在类外进行关闭,则不能直接调用OnCancel(),需要使用EndDialog(nExitCode),可以制定关闭窗口后DoMod

2009-04-21 10:30:00 589

原创 打印系统日志(使用API)

 打印系统日志(使用API)2009年4月13日星期一通常,我们在编写小型软件时,不太注重使用系统的日志维护功能,而是自己定义日志文件。但当我们的软件变的庞大时,为了更好的维护日志,最好的办法就是使用系统提供的日志功能,系统会自动帮我们进行维护。下面介绍几个打印日志的API:RegisterEventSource函数原型:HANDLE RegisterEventSource

2009-04-14 11:32:00 1823

原创 基于数据共享进行通信的服务编程

基于数据共享进行通信的服务编程2009年4月14日星期二通常为了提高程序的运行权限,如在系统启动是进行启动运行,就需要用到服务,这里简单的给出基于Win32应用程序框架的服务(和控制台类似),详细不再介绍,见代码注释。 void Init();                             // 初始化函数BOOL IsInstalled();            

2009-04-14 11:29:00 565

转载 BSTR详解

COM是一种跨编程语言的平台,需要提供语言无关的数据类型。多数编程语言有自己的字符串表示。•C++ 字符串是以0结束的ASCII或Unicode字符数组 •Visual Basic字符串是一个ASCII字符数组加上表示长度的前缀。 •Java字符串是以0结束的Unicode字符数组。需要定义一种通用的字符串类型,可以很容易的匹配到不同编程语言。在C++中,就是B

2009-04-03 16:59:00 479

转载 常用数据类型使用转换详解

常用数据类型使用转换详解作者:程佩君读者层次:初学刚接触VC编程的朋友往往对许多数据类型的转换感到迷惑不解,本文将介绍一些常用数据类型的使用。我们先定义一些常见类型变量借以说明int i = 100;long l = 2001;float f=300.2;double d=12345.119;char username[]="程佩君";char temp[200];ch

2009-04-03 16:40:00 252

原创 使基于ATL的控件成为可安全执行的程序

 通常在ATL生成的控件后,使用Web调用时,总是提示非安全的,需要设置IE属性,使其可以执行。由于工作需要,从网上Google了一下,发现一种方法,很好,现拿出来分享一下,具体方法如下: 1.在接口的.h文件中,增加一个继承的基类public IObjectSafetyImpl 2.在.h文件中,增加一个COM_MAPCOM_INTERFACE_ENTRY(IObject

2009-04-03 16:19:00 377

转载 error PRJ0050: 未能注册输出。请确保您有修改注册表的相应权限错误的解决

 使用vs 2005写ocx控件,一个字 爽,遇到Project : error PRJ0050: 未能注册输出。请确保您有修改注册表的相应权限错误的解决 很不爽。看了半天,我是管理员权限,删除debug也不行。Project : error PRJ0050: Failed to register output. Please ensure you have the appropriate per

2009-04-03 09:32:00 2197

原创 二进制、八进制、十进制、十六进制数的转换方法

 二进制、八进制、十进制、十六进制数的转换方法一)、数制 计算机中采用的是二进制,因为二进制具有运算简单,易实现且可靠,为逻辑设计提供了有利的途径、节省设备等优点,为了便于描述,又常用八、十六进制作为二进制的缩写。 一般计数都采用进位计数,其特点是: (1)逢N进一,N是每种进位计数制表示一位数所需要的符号数目为基数。 (2)采用位置表示法,处在不同位置的数字所代表的值不同,而在固定位置上

2009-03-25 19:01:00 9071 5

转载 关于C++ Private的深究

 其实,按   private   的作用,面向对象的语言可以大致分两类:     一类以类为访问界限,如   C++,同一类的不同对象可以互相访问   private   成员     另一类以对象为访问界限,如   smalltalk,一个对象的   private   成员只有该对象自身才能访问,不同对象,即使同一类,也不能访问。         或者说,C++   更像“面向类”的语言,而

2009-03-20 17:02:00 460

转载 为控件添加提示文字(转)

 我学VC从VC知识库中得到不少好处,相来都是一些热心朋友们的帮助,在此表示感谢!本工程可分五步:1、建一个基于对话框的程序TipTest,在CTipTestDlg中增加成员变量:CToolTipCtrl m_tip[2],CWnd *m_pSub[2];2、在CTipTestDlg::OnInitDialog()函数中增加如下代码: pSub[0] = GetDlgItem

2009-03-03 17:49:00 405

转载 在Dll中编写通过ADO远程访问SQL2000数据库时遇到的问题

这一段时间要用到dll中使用ado,在mfc中用ado一段时间没有出现什么问题,本以为在dll中也不会出现什么问题,但是问题产生了,而且是在最开始的导入ado的dll文件时候。我的做法是:  #import "c:/program files/common files/system/ado/msado15.dll" no_namespace rename("EOF","adoEOF")  出现: 

2009-03-03 09:30:00 844 2

原创 解析从INI配置文件读取到操作命令

解析从INI配置文件读取到操作命令2009年2月23日星期一由于工作中遇到文件更新到开发,自然涉及到从配置文件中读取操作命令,以便中更新过程中进行操作。下面以工作中的Demo为示例:[Setting]Version=1.2.3.0[Files]umini_console.exe={desktop}install_driver.exe={thisdir}umini_o

2009-02-23 16:15:00 778

转载 TrackMouseEvent函数

 TrackMouseEvent函数TrackMouseEvent函数在鼠标离开某一窗口或在某一窗口上停留超过某一特定时间长度时发送消息。原型:BOOL TrackMouseEvent(LPTRACKMOUSEEVENT lpEventTrack);参数:  lpEventTrack:是一个指向TRACKMOUSEEVENT结构体的指针。返回: 成功的话返回非零值(

2009-02-13 16:19:00 723

Win32API编程使用

Win32API接口使用介绍,chm格式的

2008-12-02

PC游戏编程

PC游戏编程,chm格式的

2008-06-06

空空如也

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

TA关注的人

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