
游戏编程
文章平均质量分 52
limiteee
这个作者很懒,什么都没留下…
展开
-
预编译头
许多初学 VC 的朋友也许都为那么一个问题困扰过: 为什么所有的 cpp 都必须 #include "stdafx.h" 也许请教了别的高手之后,他们会告诉你,这是预编译头,必须包含。可是,这到底是为什么呢?预编译头有什么用呢? 这得从头文件的编译原理讲起。其实头文件并不神秘,它的全部作用,就是把自己的所有内容直接“粘贴”到相应的 #include 语句处。如果转载 2009-01-24 10:05:00 · 615 阅读 · 0 评论 -
在ogre中进行精细射线检测
ogre有一个RaySceneQuery的类,在默认场景管理器下,这个类返回一组RaySceneQueryResultEntry,他们都是通过包围盒进行的检测,由于包围盒过于简陋,我们可以再进行更精细的基于面的射线碰撞检测。主要注意的就是mesh的构造方式,是否用了index,index是16位还是32位,其他的没什么了,射线到三角的检测函数取自dx例子,ogre自己也提供了,不过我感觉原创 2009-01-24 10:17:00 · 2585 阅读 · 1 评论 -
physx学习手记
physx放下了一段时间,最近重新拣起,很多东西都忘记,重新复习一下。1,创建基本物理对象physx的碰撞对象是actor,每个actor都可以包含任意多个基本物理模型(shape)。shape有很多种,cube,sphere,capsule,plane,heightfield。创建一个actor需要3个对象的信息才能创建,body描述,shape描述,actor描述。body描原创 2009-02-26 23:04:00 · 1799 阅读 · 0 评论 -
lua c函数的堆栈变化标记
lua文档中每一个函数都有一个堆栈变化标记类似[-o,+p,x] 第一部分o代表有多少元素出栈,第二部分p代表有多少元素入栈(有些函数总是出栈它的参数,入栈它的结果)这部分在一些情况下,有可能是 x|y 形式出现,代表有x或y个元素入栈(出栈), ?标记的意思不能知道有多少个元素出、入栈。 第三部分 x说明函数是否可以抛出错误:-代表函数从不抛出错误。m代表函数只有not en翻译 2009-07-16 16:10:00 · 723 阅读 · 0 评论 -
physx学习手记,NxUserContactReport,NxUserTriggerReport,NxUserContactModify
这三个类是physx里常用的3个回调函数NxUserContactReport:报告物体碰撞时的数据,用户可以在这里得到碰撞的具体信息NxUserTriggerReport:是触发器,物体穿过、进入、离开触发器都会调用NxUserContactModify:是physx提供的一个强大的在碰撞瞬间的修改机会,但是消耗量巨大,sdk中说推荐只有在极为重要的地方使用它,比如主角,另外如果使用原创 2010-02-10 13:50:00 · 2086 阅读 · 0 评论 -
physx中的inertia tensors(惯性张量)
最近编写编辑器的时候遇到一个问题,在创建一个nxactor后,这个actor的弹性很奇怪,在平坦的地面弹起来会胡乱的旋转。 在和正常actor比较后,发现,是弹性张量出的问题,犹豫程序的bug,导致弹性张量出现无效值。 在查阅了physx文档,发现这个弹性张量只能通过程序计算physx提供了一系列函数 NxCompute.....MassNxCompute.....原创 2010-03-16 11:44:00 · 3835 阅读 · 1 评论 -
一个使用c++在lua中创建自定义数据类型的简易方法
lua是一个内嵌式的语言,很多初学者对于lua中使用c++类中的函数,或者用c++直接创建一个自己的自定义数据类型比较头疼,因为这部分确实比较乱,牵扯到内存释放分配等问题,但是如果把其中关系理清,还是很简单的,下面这段代码是一个老外写的,我做了一些修改。首先看代码。 #ifndef LUNA_H#define LUNA_H 1/***********************原创 2010-04-15 20:12:00 · 4313 阅读 · 0 评论 -
Re:关于变换矩阵的行列性
来自gameres.com论坛wjk98550328发表Re:关于变换矩阵的行列性行列都没所谓的,只要你应用层知道每行是什么意义,每列是什么意义,如果矩阵是行有意义,那就Matrix×Vector,vector理解为列向量,如果是列有意义的矩阵,那就Vector×Matrix,那个被变换的矩阵理解为行向量。仅此而已,在数学上不是还有矩阵转置,行列在数学上不就是一堆数据么,没转载 2011-10-25 12:52:45 · 2146 阅读 · 0 评论 -
压缩tangent frame
压缩tangent frame转载请注明出处为KlayGE游戏引擎,本文的永久链接为http://www.klayge.org/?p=2038(对tangent frame的压缩,其实在2008年做All-frequency rendering of dynamic, spatially-varying reflectance这篇paper的过程中,就曾在茶余饭后讨论过这个事情。这其实转载 2012-10-08 09:50:44 · 609 阅读 · 0 评论 -
SetUnhandledExceptionFilter拦不住的崩溃
前段程序测试中使用了SetUnhandledExceptionFilter,发现很多崩溃并没有拦截到,还是弹出关闭窗口,网上找了找,发现问题在于MS在c++缓存溢出检查中重置了这个函数,原因很简单,避免黑客利用这个常见错误黑电脑,不过也带来很多不便,这篇文章告诉我们如何避开这个问题SetUnhandledExceptionFilter and VC原文:http://blog.kalmba转载 2013-01-06 11:18:51 · 12847 阅读 · 2 评论 -
压缩四元数
遇到一个需要减少旋转储存空间的问题,首先想到从3x3矩阵可以用四元数代替,一下省掉5个float,那么四元数还能压缩么,当然可以。 首先保证四元数是经过标准化的。那么这个四元数就会满足: x2 + y2 + z2 + w2 = 1那么我们要做的就是把w压缩到xyz里。上面公式经过换算得到: w = sqrt( (x/w)2 + (y/w)2 + (z/w)2 + 1翻译 2013-02-20 11:06:49 · 1302 阅读 · 0 评论 -
左右手坐标系转换
原文: http://www.cnblogs.com/gin_dl/archive/2012/12/16/2820659.html和某同学讨论起这个 说服不了 就写了个简单的推导 顺手贴上来 长草好久好久好久了假定Sz是一个缩放矩阵,能把z取反,也就是Sz = 1 0 0 0 1 0 0 0 -1P = (x,y,z),P' =转载 2014-03-19 10:50:33 · 1335 阅读 · 0 评论 -
用 System.Xml 读写XML 整理文档
用 System.Xml 读写XML 整理文档example http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">转载 2014-06-15 20:28:47 · 551 阅读 · 0 评论 -
不要用步进方式调试directinput。
今天程序出了一个bug,以为是OIS的问题,结果调试了一天,才发现不是,另外知道了,directinput不能单步调试,很低级的错误……原创 2009-01-24 10:16:00 · 590 阅读 · 0 评论 -
ogre 1.6和mfc 的debug new冲突问题的白痴解决方法。。
由于ogre1.6实现了自己的debug new,跟mfc冲突,我尝试询问ogre官方是否有什么方法禁止ogre的debug new,但是得到的答复是不可以。貌似官方很鄙视mfc的内存漏洞检测机制。 不得已只能禁止mfc的了。 但是,很多人用了mfc的扩展库,比如我,修改很麻烦,如果只是删掉自己代码中的#defin new DEBUG_NEW,每次运行完后,都有大量的内存漏洞原创 2009-01-24 10:16:00 · 986 阅读 · 0 评论 -
搞清楚VC++中的char,wchar_t,TCHAR
大家一起做一个项目,经常发现有的人爱用strcpy等标准ANSI函数,有的人爱用_tXXXX函数,这个问题曾经搞的很混乱。为了统一,有必要把来龙去脉搞清楚。 为了搞清这些函数,就必须理请几种字符类型的写法。char就不用说了,先说一些wchar_t。wchar_t是Unicode字符的数据类型,它实际定义在里: typedef unsigned short wchar_t;不能使用类似s转载 2009-01-24 10:06:00 · 594 阅读 · 0 评论 -
研究Physx的一些进展(NX_BF_FROZEN 、NX_BF_KINEMATIC和静态物体)
NX_BF_KINEMATIC 标志是NxBodyDesc.flags的一个标志。 KINEMATIC 是一种特殊的动态物体,他不会受到力的影响,比如重力,而且也不会移动,有了这个标记的物体,系统会认为它是一个密度无限大的物体,但是我们可以在程序中使用moveGlobal*()系列函数改变的姿态。 KINEMATIC 会将动态物体推出去,但是他不和其他静态物体以及KINEMA原创 2009-01-24 10:15:00 · 1220 阅读 · 0 评论 -
实现一个类似3dmax那样的鼠标移动物体操作
说起来很简单,但是当第一次想的时候,感觉还是挺有难度的。 首先得到当前物体需要朝向哪个方向移动,比如用户选中了x轴,说明物体需要沿着物体自己的x轴方向运动。 然后将这个x轴方向转换到摄像机空间,然后让z=0得到一个前截平面上的投影。 将这个投影和鼠标移动的xy组成的向量进行点积,得到这个值就是我们需要在x轴上移动的量,当然这个量很小,我们需要将他放大,系数随我们喜欢了原创 2009-01-24 10:18:00 · 2491 阅读 · 1 评论 -
投影贴图
投影贴图的原理是 投影坐标变换中,view矩阵将顶点变换为视点空间坐标,而project矩阵将这些顶点变换为-1,1区间内的点,此时可以通过将这些点坐标缩放到0.1之间,得到贴图坐标 在ps中,读取贴图必须用tex2DProj读取进行缩放的矩阵:0.5,0,0,00,0.5,0,00,0,0.5,00.5,0.5,0.5,1原创 2009-01-24 10:09:00 · 1271 阅读 · 1 评论 -
研究physx的一些进展(NxTriangleMesh)
physx有很多用户类需要自己写,很麻烦,比如NxStream,NxUserAllocator,不过他带的例子中有现成了,拿来用好了 :)physx的plane类型和character不能进行碰撞,这点非常奇怪,网上问了很多人,都不得要领,在他的官方论坛上问,也没有回应,好在他的NxtriangleMesh支持和character的碰撞。physx除了对固定形状的碰撞判定外,还支持任原创 2009-01-24 10:11:00 · 2487 阅读 · 0 评论 -
研究Physx的一些进展(character controller)
character一般用于主角这类用户控制的物体,它不会受到scene的重力影响,不会被其他物体推。 程序中可以使用它的move方法移动它,当他碰到静态物体时,会停下来,遇到动态物体时会推开他,当然,这些都是可以通过activegroup来控制的。group最多有32组。因为他是一个NxU32,并通过每一位代表一个组。 move的一个参数用来告诉程序,character的当前原创 2009-01-24 10:12:00 · 1555 阅读 · 0 评论 -
ogre:在运行时,为entity添加骨骼文件,以及合并骨骼文件的方法
添加:很简单,setSkeletonName即可。 但是,需要初始化一下:_initialise(true);refreshAvailableAnimationState(); //这个函数好像可以不用调用,具体还没时间仔细看,不过调用一下,也可以 >_ 合并:skel1,skel2两个骨骼实例指针.Skeleton::BoneHandleMap b原创 2009-01-24 10:14:00 · 1325 阅读 · 0 评论 -
四元数,齐次坐标问题及相关回答
我看了很多书,和文章,可是还是不知道,四元数到底有什么用 好像她的好处就是为了能比矩阵,在相乘的时候,运算次数少 另外,一个包含旋转信息的四元数如何与一个向量运算得到我希望的结果?好像dx没有提供这样的函数啊?难道需要转换为矩阵再计算吗? D3DXQUATERNIONSlerp函数是做球体上旋转线性插值的吧?他的最后一个参数如何使用? q=cos(a/2) + sin(a/2原创 2009-01-24 10:00:00 · 1226 阅读 · 0 评论 -
将exe文件转化成lib,dll失败,只能使用折中办法
关键字:导出 dll lib def c++类 __declspec(dllexport)因为exe中带有资源(窗口模板),所以修改成静态lib失败,虽然可以把资源文件独立出来,但是总觉得不是很爽,不伦不类的 而修改为dll的话,虽然资源文件的问题可以解决,但是由于exe中带有dxut得静态类,导致我在制作def文件时出现问题,exe中的某些类是继承来自dxut得,所以dxut也原创 2009-01-24 10:05:00 · 884 阅读 · 0 评论 -
ogre与mfc结合
将view类直接当作ExampleApplication来用,不继承另外实现一个自己的ExampleFrameListener 重点在于configure里面 mWindow = mRoot->initialise(false);这里要用false,不使用autowindow 然后unsigned int hWnd = (unsigned int)this->原创 2009-01-24 10:08:00 · 2165 阅读 · 1 评论 -
研究Physx的一些进展(错误)
Physx的错误非常难找,因为它的sdk也带的是release版本,没有调试信息,而且出错也不报错,就告诉你内存访问错误,一大堆内存地址,这对高手或许有用,反正我是看不懂。 这两天因为一个错误搞了好久,终于找到了,原因在于我创建的一个capsule由于计算方法的原因,传入的半径为0,但是这个capsule创建居然成功了,郁闷的是,我为这歌capsule创建joint时失败了,提示一大原创 2009-01-24 10:13:00 · 823 阅读 · 0 评论 -
mfc菜单项运行时不见了
最近,做场景管理器,大量使用了mfc来制作界面,又遇到了当初遇到的菜单在运行时不见了的问题。 经过调试,在运行时,这个菜单项是存在的,使用GetMenu函数是可以找到的,但是它就是不现实出来。 偶然间,发现CApp下有一个SetRegistryKey函数,这是一个用来保存应用程序状态的方法,比如窗口大小,最大化最近使用的文件之类的,mfc把这些保存在注册表。 于是我进原创 2009-01-24 10:15:00 · 1718 阅读 · 5 评论 -
赶时髦过了一遍Swift 语言....
Swift 语言 2014年6月3日发布,替代OBJECT-C Swiftis a new programming languagefor creating iOS and OS X apps. Swift buildson the best of C and Objective-C, without the constraints of C c转载 2014-06-15 20:32:10 · 554 阅读 · 0 评论