![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
图形图像
文章平均质量分 58
ProgramRookie
go go go
展开
-
将MFC与DirectX9结合使用
将DX+MFC,一般用来实现地图编辑器的效果,因为单纯使用DX+Win32来写地图编辑器框架需要做很多工作,而用MFC问题就简单化了,你所要做的就是在响应事件中编写代码。 首先我根据MFC的框架与消息传递路线(具体参见侯捷老师的深入浅出MFC),我们发现一个主窗体事实上管理一个当前激活窗口(View)的成员变量,而这个变量正是MFC用来分管渲染的对象(MFC著名的文档-视图模式,文档框架原创 2009-10-21 20:04:00 · 2626 阅读 · 1 评论 -
应用程序与shader交换场景数据浅析
Shader中的场景信息,也就是那些被写入常量表的全局数据,是与应用程序的相关数据绑定的。它们包含渲染一个shader所需要的各种渲染状态,就好象是在应用程序和shader之间的一份契约。Shader知道,它必须依靠应用通过特定变量来提供确定的数据,才能完成它的任务。没有这种场景数据,shader不能凭空操作,甚至连最简单的操作也不能执行。注意这种数据是单向的,只能从应用到shader中去,而且每原创 2009-04-03 13:45:00 · 843 阅读 · 0 评论 -
获取加载进ID3DXMESH后的.x文件的信息
通常,我们获得了一个LPD3DXMESH指针来保存一个.x文件的顶点与索引信息,但是,我们通常会需要直接针对顶点来做一些事情,比如,求包围盒等。那么这个时候我们就需要提取模型中的相关顶点信息。接下来,我就简单的说一下我实现提取顶点位置信息的过程。大家首先要知道以下这个方法: static LPVOID pV; pMesh->LockVertexBuffer原创 2009-04-01 17:33:00 · 2326 阅读 · 2 评论 -
使用Direct Graphics取得GDI
我们已经完成了Direct Graphics的初始化工作,下面我们可以先看看如何使用GDI来进行绘图操作,虽然Direct Graphics希望用户遗忘Windows的GDI,不过使用GDI却可以更方便的完成工作。 在早期的DirectDraw时代,只要调用GetDC就可以取得绘图页,在Direct Graphics里首先要面对的是如何取得绘图页。 首先,定义两个变量如下:原创 2008-09-15 14:39:00 · 1580 阅读 · 0 评论 -
Ogre动态纹理(转)
Ogre动态纹理(2007-01-18 13:48:40) 分类:Ogre一、材质资源//取得该脚本材质对象 Ogre::MaterialPtr mMaterial = MaterialManager::getSingleton().getByName("Examples/Mark"); //根据text原创 2009-09-14 19:45:00 · 4078 阅读 · 0 评论 -
ogre+oFusion+3dsMax如何合并多个骨骼动画文件
网上常说ogre+oFusion+3dsMax是开源游戏编程的黄金组合,但是在刚接触时我就遇到了一个问题,用oFusion导出的.mesh只能和一个.skeleton文件绑定,而一个.skeleton中只只能包含一个动作,这问题就大了,一般游戏,一个模型都应该能在n个动作中切换,为了解决这个问题,我在ogre3d.org的论坛中泡了好一阵子,终于找到了解决方案,为了让后来人能够少走弯路,总结如下:原创 2009-09-11 15:34:00 · 6514 阅读 · 2 评论 -
Ogre中的碰撞检测
Ogre中的碰撞检测(完整版) 原创UI动力 韩举 http://www.uipower.com/ 请注明转载地址 Ogre是开源的封装了DirectX和OpenGL的3D引擎 Ogre的下载和安装见http://www.uipower.com/bbs/dispbbs.asp?boardID=2转载 2009-08-30 20:08:00 · 864 阅读 · 0 评论 -
引擎底层对实体方位的操作
这里的实体,指的是像摄像机,几何体集这些概念,而方位,是指设置位置与朝向。在游戏引擎的底层接口,需要设置两个方法,一个设置放置的位置,一个是设置放置的朝向。从而可以把这些方法提供给更高的抽象层次调用。 对于位置的设置,相当简单,只需要修改位置向量就可以了。 而对于朝向,由于需要关心三个轴向,所以可以采取以下方法: (1)设置新的朝向 (2)根据新的朝向重新计原创 2009-07-19 14:14:00 · 600 阅读 · 0 评论 -
游戏AI引擎的三层体系结构分析
1.综述由于具有相似的应用环境,游戏程序可以采用与机器人的三层软件体系结构相似的体系结构。在机器人学中,机器人的软件体系结构必须决定如何将反映式控制与基于模型的思考模式相结合。反应式控制是传感器驱动的,适合于实时地制定低层次决策,而思考式控制适用于依赖于在进行决策时不能感受到的信息的全局控制策略。混合体系结构将反应与事先思考相互结合。最流行的混合体系结构是三层体系结构,它由一个反应层、一个原创 2009-07-17 16:58:00 · 1600 阅读 · 0 评论 -
在基于shader的D3D程序中实现2D面板
3D游戏中,很多东西都需要以2D的形式展现,比如人物的状态栏,物品栏等,那么如何才能在3D场景中放置它们呢?我在这里介绍一种通过简化变换过程而实现的方法. 大家知道,一个模型顶点在显示到屏幕上,一共要经过4次变换,分别是世界变换,摄象机变换,投影变换以及视口变换.在世界变换中,我们通过一个仿射矩阵把这个顶点放置到世界的相应位置;在摄象机变换中,我们以摄象机作为原点把顶点放置到相应位置;而原创 2009-04-23 18:49:00 · 1155 阅读 · 0 评论 -
HLSL中的函数
函数的作用是为了降低程序的复杂度。HLSL的函数与C函数类似:他们都有定义与函数体,而且他们都可以有返回值与声明列表。与C函数一样,HLSL通过参数列表与返回值类型进行匹配。与C函数不同的是,HLSL入口函数使用语义来将函数声明绑定到SHADER的输入输出上。这使得把缓冲区数据绑定到SHADER上变的容易。函数包含一个声明与一个函数体,声明必须在函数体前。下面分析一下这个函数:fl原创 2009-04-01 17:36:00 · 2541 阅读 · 0 评论 -
shader中的变量和语义
在shader主函数的输入变量必须是用语义或者uniform关键字标记的.否则,将会出现编译错误.输入语义是用来联系shader的给定输入与渲染管线中相应输出的.比如,语义POSITION0就是用来指定来自顶点缓冲相应位置数据的. 由于功能不同,象素与顶点渲染器有不同的输入语义集.顶点渲染器的输入语义用来描述每一个顶点的信息,比如位置,法线,象素纹理,颜色,切线,次法线等.输入语义是直接原创 2009-03-26 19:48:00 · 2250 阅读 · 1 评论 -
如何高效的对可移动物体进行四叉树管理
首先,我要假设你已经对一个空间完成了四叉树划分,并得到一棵树( root ),那么对于静态物体,很明显你只需要在预处理阶段一次性插入即可,并且在游戏运行阶段你都无须去关心它们( 除非你用一颗炸弹把它们炸飞,不过那时侯你只要调用树的删除方法就可以了 ). 但是,对于动态物体,你就必须时刻关心它们的动向,因为一旦它们离开了原本所依附的空间节点的区域,而在树中却没有即使的更新,那么就会得到错误原创 2009-05-16 14:51:00 · 2498 阅读 · 2 评论 -
光模拟基础(2) 光源
在基本光照模型基础上,今天探讨一下如何建立各种光源模型. (1)方向光(或称平行光) 方向光可以看作太阳光,为什么会有白天黑夜呢,就是因为太阳只能照向地球的一个面( dir ),也即一个方向,而且即使地球绕太阳转动时距离会变化,太阳光也没有衰减(no pos, no attenuation 当然,这里是近似的). dirLight = emissive + ambi原创 2009-05-20 19:44:00 · 1080 阅读 · 0 评论 -
渲染到纹理(转)
Render to Texture(渲染到纹理) [ZZ]渲染到纹理是D3D中的一项高级技术。一方面,它很简单,另一方面它很强大并能产生很多特殊效果。 比如说发光效果,环境映射,阴影映射,都可以通过它来实现。渲染到纹理只是渲染到表面的一个延伸。我们只需再加些东西就可以了。首先,我们要创造一个纹理,并且做好一些防范措施。第二步我们就可以把适当的场景渲染到我们创建的纹理上了。然后,我们把这个纹转载 2009-08-13 23:04:00 · 695 阅读 · 0 评论 -
游戏引擎中物体的组织
1.一切都以空间为根本 对于3D渲染来说,能够剔除的东西都应该剔除,所以我们需要知道当前空间是否可见,如果不可见,对不起,这个空间中的物体就都不应该作为可见物体来看待,因此,物体之所以存在,就是因为有空间这个概念,一个空间就应该代表一个独有的本地坐标系,同时它又在世界中占据一个一定大小的位置,而这个大小,则应该根据这个空间容纳物体物体的多少来定. 2.抽象出空间与物体原创 2009-07-04 15:09:00 · 1124 阅读 · 0 评论 -
纹理采样
一个纹理采样器包含采样状态,采样状态指定了纹理将如何被采样,并控制采样过程中的纹理过滤.在纹理采样时需要做三件事情:(1)获取纹理(2)声明一个采样器(3)定义采样器. 这里写一个简单实例: texture Tex2D;sampler2D Sampler2D = sampler_state{ Texture = ; MipFilter = LINE原创 2009-03-27 19:31:00 · 6192 阅读 · 2 评论 -
Direct Graphics的初始化
在Direct7.0之前,绘图引擎分成DirectDraw与Direct3D,而Direct8.0则针对游戏3D化而将DirectDraw与Direct3D合并,取名为Direct Graphics,专门用来处理绘图影像以及利用3D命令的硬件加速特性来发展更强大的API函数。 首先,要建立一个Direct Graphics环境,先要规划一个程序框架,可以定义一个类,来存放所有与之有关原创 2008-09-15 13:59:00 · 3789 阅读 · 1 评论 -
全局状态(一)---ZBuffer( 深度缓冲 )
所谓深度缓冲,如果你开启它,并启用写缓冲操作,那么在每一次光栅化像素的前,会进行一次比较操作,通过比较的则可以光栅化当前像素并用当前深度值更新深度缓冲中对应像素的深度值。 如果你在渲染一个物体A前关闭了深度缓冲的写操作功能,那么当你将物体A渲染了到场景中后,即使后渲染的物体的某些顶点比物体A的深度要大,也会将物体A覆盖,因为物体A在光栅化像素的过程中没有用自己的深度值更新深度缓冲。原创 2009-12-21 16:48:00 · 1998 阅读 · 0 评论 -
解决使用施密特正交化而带来的左右手坐标系的变化问题
1.为什么要解决这个问题 在游戏引擎中,经常需要让摄像机看向某一个方向,这时你可以提供一个方法SetCameraDir,通过输入一个Direction向量来设置摄像机的坐标系。这时候就需要施密特正交化,它用来将给定的n个向量正交化,对于摄像机坐标系来说就是: // u0 = v0/|v0| // u1 = (v1-(u0*v1)u0)/|v1-(u0*v1)u原创 2009-07-21 20:26:00 · 1425 阅读 · 0 评论 -
关于引擎灯光系统
灯,是3D游戏不可缺少的部分,因此如何设计有效的灯光,就必须认真考虑,一般灯光分为AMBIENT(全局光),DIRECTIONAL(方向光),POINT(点光源)与SPOT(探照灯)四种。因此,在设计灯类时,必须考虑到这四种灯光的区别。 全局光只有灯光颜色这个属性,方向光有颜色与方向两个属性,点光源有位置,颜色,与衰减三个属性,探照灯最复杂,有位置,方向,颜色与衰减四个属性。由于我的灯光原创 2009-07-20 19:34:00 · 1044 阅读 · 1 评论 -
声音引擎之DirectMusic(1)---重要概念
一、概念 我在我的引擎使用的是DirectMusic,他是高层的audio API,他比DirectSound方便很多,他可以播放WAV文件与MIDI文件,在这里我主要介绍如何播放WAV文件。 首先,所有的声音的播放都要依赖于两个COM对象,一个是IDirectMusicLoader8,他负责从磁盘上读取声音文件;还有一个是IDiretMusicPerformace,他负责播放原创 2009-07-13 11:23:00 · 1569 阅读 · 0 评论 -
如何高效的载入并组织.x文件数据
1.为什么要.x文件 在我的引擎中,抽象出了Geometry的概念,它包含了顶点缓冲与索引缓冲的数据,用来负责组织出几何体。但是用代码画出有趣的东西是愚蠢的,因此,我在引擎中实现了.x文件读取子系统,通过读取.x文件的数据来生成对应的Geometries,因此我又抽象出Mesh的概念,来包含所有的由一个.x文件所能产生的Geometries. 一般的,我通过.x的文件名来读取并原创 2009-07-07 13:25:00 · 863 阅读 · 0 评论 -
如何实现D3D全屏与窗口的转换
有很多游戏会提供这样的功能,比如足球经理,生化危机,魔兽世界等,这样做最大的便利,是让你可以在玩游戏的同时做其他事情( I Guess)。1.首先要做的事情是为D3DPRESENTATION_PARAMETERS设置好与此有关的参数,简单的说就是,我们必须要让device明确知道当前的top窗口是哪个,并且要知道这个窗口的长与宽,这样device才能准确切换。2.如果是从全屏幕切为原创 2009-06-06 17:03:00 · 5555 阅读 · 1 评论 -
光模拟基础(1) 基本光照模型
1.基本光照模型:sufaceColor = emissive + ambient + diffuse + specular以下是公式各个项的解析: (1)emissive放射光 它是独立于所有光源的,是单纯由物体材质产生的光(说句废话,不能作为光源照亮其他物体,其实在shader实现里很明确) emissive = Ke; 这个公式明显可以看出,光照原创 2009-05-19 20:38:00 · 2531 阅读 · 0 评论 -
如何利用Composite模式实现多样化的粒子系统
首先,我的粒子是采取广告板的方式来表现的,因为这样才能给我实现多样化粒子系统的能力. 具体做法是,将广告版看成是Leaf,而粒子系统看成Composite,那么利用Composite模式既可以让广告板单独使用,又可以用多个广告板组成复杂的粒子系统,这是灵活性1. 另外,我们知道Composite模式是可以组成一个树型结构的,那么粒子系统需要树型结构吗,答案是肯定的,比如你模拟火原创 2009-05-20 10:29:00 · 624 阅读 · 0 评论 -
在Octree场景下的多层次node包围盒问题
这两天遇到了一个问题(毕竟接触ogre不久,可能问题比较弱智哈),由于我把模型用OSMLoader的演示方法导入,它具体是通过一个场景(.osm文件)导入后,将其中的子模型分别用一个node保存,如果你提供了一个node(暂订叫rootNode),那么所有的子模型node都会添加rootNode下. 这样本来也很没有问题,毕竟如果我用.osm导入一个大场景,为了处理碰撞,我肯定要把各个子原创 2009-09-18 17:12:00 · 1589 阅读 · 0 评论