3D Game开发笔记
文章平均质量分 65
n5
在信息时代客观障碍已不复存在所谓障碍都是主观上的如果你想研发什么新的技术你不需要几百万美元的资金你只需要在冰箱里放满比萨和可乐再有一台便宜的计算机和与之献身的决心你即可拥有任何你想拥有的编程境界- John Carmack
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
3dMax导出.x文件以及3D Explorer
panda export是从3Dmax中导出.x文件的插件网站为:http://www.andytather.co.uk/Panda/directxmax.aspx最新版本:2005-11-27 v4.8.61.0 for 3ds Max8, v4.6.61.0 for 3ds Max6/7PDE和微软Export的不同:1 PDE also changes the right-handed原创 2006-03-02 13:51:00 · 7997 阅读 · 0 评论 -
无stencil buffer,绘制半透明planar shadow的一种方法
所谓planar shadow就是用一个投影矩阵(不是opengl流水线所谓之projection matrix,而是根据光源和投影面位置将一个点投射到投影面上的矩阵),将模型的所有顶点投射到投影面(比如地面)上。一般或者直接使用模型经过skin动画计算好的mesh进行投影并绘制,或者使用一个低模独立计算mesh然后投影绘制。无论哪种方法,都有一个问题,由于影子是很多三角形重叠在一起的,如果使用半原创 2009-12-03 14:31:00 · 3283 阅读 · 0 评论 -
如果将OpenGL的MVP矩阵设置为单位阵
如果将OpenGL的MVP矩阵设置为单位阵,会发生什么? opengl的几个坐标空间: object space-> eye space-> clip space -> NDC -> WC那么,MVP矩阵即model-view-projection matrix是将object sapce的vertex直接变换到clip space即 (X,Y,Z) -&g...原创 2009-12-03 10:59:00 · 4236 阅读 · 0 评论 -
Realtime Rendering 3rd笔记 2
Chapter3 The Graphics Processing Unit历史上,硬件图形加速是从流水线的末端开始的,最初是做三角形的光栅化,之后连续更新换代的硬件从流水线末端向上发展,甚至一些application阶段的高层次算法被交由硬件实现。在过去的十多年里,图形硬件发展迅速,1999年出现的NVIDIA's GeForce256是第一个包含硬件顶点处理的消费型图形芯片,NVIDIA创造了术语"graphics processing unit"(GPU)来区分GeForce256和之前原创 2010-10-29 15:36:00 · 1827 阅读 · 0 评论 -
Realtime Rendering 3rd笔记 1
Chapter 2 The Graphics Rendering Pipeline流水线的速度由最慢的环节决定。概念性的stage可细分为功能stages,功能stage可以成为流水线stage也可以不成为。流水线stage是可以同时执行的。例如两个功能stage可以合并为一个流水线stage,某个功能stage被划分为多个流水线stage。FPS和Hz: fps是每秒钟渲染的帧数,程序生成一帧图像的时间通常是变化的,因此fps表示某个特定帧的速度或者表示一段时间的平均性能。Hertz(原创 2010-10-28 23:24:00 · 2729 阅读 · 1 评论 -
Realtime Rendering 3rd笔记 3
<br />3.2 The Programmable Shader Stage<br /><br />现代的shader stages(即支持Shader Model4.0, DirectX 10以及更高)使用common-shader core。即vertex, pixel和geometry shaders共享同一种编程模型。common-shader core是对应用程序员而言的API,相应的在GPU架构上则为unified shaders。早期的GPU在vertex和pixel shaders上缺原创 2010-11-01 22:56:00 · 1890 阅读 · 0 评论 -
Realtime Rendering 3rd笔记 4
<br />3.3 The Evolution of Programmable Shading<br /><br />早在1984年就出现了可编程shading框架的想法,RenderMan shading语言在80年代后期被开发出来至今仍然在电影渲染中使用。<br />在GPU原生支持可编程shader之前,有一些尝试是通过多遍渲染(multiple rendering passes)去实现可编程shader。在2000年,Peercy et al.描述了一个系统将RenderMan Shader原创 2010-11-02 16:17:00 · 2307 阅读 · 0 评论 -
Realtime Rendering 3rd笔记 5
<br />3.4 The Vertex Shader<br /><br />尽管vertex shader是第一个进行图形处理的阶段,但值得注意的是在这个阶段之前要进行一些数据处理,在DirectX中这被称作input assembler。很多数据流可以被编织在一起形成顶点和图元的集合并向下发送至流水线。例如,一个物体可以用一个位置数组和一个颜色数组表示。“input assembler”可能通过创建具有位置和颜色的顶点来创建这个物体的三角形组。第二个物体可能使用同样的位置数组(连同一个不同的模型变换原创 2010-11-03 14:24:00 · 2979 阅读 · 0 评论 -
Realtime Rendering 3rd笔记 6
<br /><br />3.5 The Geometry Shader<br /><br />geometry shader在2006年末随着DirectX10的发布被引入到硬件加速的图形流水线中,它在流水线中紧跟在vertex shader之后,并且是可选的。他是SM4.0的必须的部分,不用在早先的shader models中。<br />geometry shader的输入是一个物体和它的顶点。物体通常是一个mesh中的一个三角形,一个线段或仅仅是一个点。另外,扩展的顶点可以被定义并且被ge原创 2010-11-04 14:37:00 · 1719 阅读 · 0 评论 -
Realtime Rendering 3rd笔记 7
<br />3.6 The Pixel Shader<br /><br />在vs和gs执行之后,图元被clipped并set up准备光栅化,这个阶段是很固定的,不能编程(值得注意的例外是pixel shader可以指定使用哪种插值,perspective corrected or screen space, or none)。每个三角形依次处理,顶点数据在三角形内插值。pixel shader是下一个可编程阶段。在OpenGL中,被称作fragmenet shader,这在某种角度是一个更好的名字。原创 2010-11-05 10:28:00 · 1984 阅读 · 0 评论 -
Realtime Rendering 3rd笔记 8
<br /><br />3.8 Effects<br /><br />一个单独的shader程序是不能单独起作用的:一个vs程序将结果提供给一个ps。两个程序都必须被载入才能工作。程序员必须将vs的输出和ps的输入进行匹配。一个特定的渲染特效可能由任意数量的shader在几个pass中执行产生。除了shader自己,状态变量必须被正确的设置来保证shader正确的工作。例如,渲染器的状态包括是否使用和如何使用z-buffer和stencil buffer,一个片段如何影响已经存在的像素值(e.g.原创 2010-11-10 15:08:00 · 1717 阅读 · 0 评论 -
Realtime Rendering 3rd笔记 9
Chapter 4 Transforms所谓变换(transform)是指作用于点、向量、颜色等实体,以某种方式转变他们的操作。使用变换,可以移动、变形和动画物体、灯光和摄像机。变换还可以保证所有的计算处于同一个坐标系下,将物体投影到一个平面,这些都仅仅是冰山一角,总之,变换在图形学中非常重要。线性变换满足:f(x)+f(y)=f(x+y)和kf(x)=f(kx) 其中x,y是矢量,k是标量。例如变换f(x)=5x是线性变换,因为对于矢量x,y, f(x)+f(y)=5x+5y=5(x+y)原创 2010-11-12 11:17:00 · 2030 阅读 · 0 评论 -
OpenGL ES draw call优化
1)glDrawArrays vs glDrawElementsglDrawArrays只能用在顶点有序,无共享顶点的情况。否则会导致顶点数很多,效率很低。一般情况都使用glDrawElements另一个角度说,使用glDrawArrays一般是三角带,但往往一个模型要用多个三角带才能表达,这样就需要多次draw call,所以不如使用索引,一个draw call搞定。2) bat原创 2011-06-07 10:33:00 · 6541 阅读 · 0 评论 -
《OpenGLES 2.0 Programming Guide》学习笔记(持续更新)
《OpenGLES 2.0 Programming Guide》 学习笔记1介绍OpenGLESgles由KhronosGroup创立,目前有3个版本1.0,1.1(统称1.x)和2.0。ES1.0,1.1由OpenGL1.3,1.5继承而来,ES2.0由OpenGL2.0继承而来。OpenGLES 2.0的specifications有两份:theOpenGL ES原创 2012-02-08 14:07:10 · 31678 阅读 · 5 评论 -
球贴图和思维定势
贴图用习惯宽和高的了,特别是在移动平台,用pvr。但是球的贴图,因为球面展开正好是宽高2:1的,用2:1的贴图正合适,还用什么方的贴图,把图案都压扁,思维定势啊。。用2:1的贴图,不用压缩格式,正常的移动设备GPU都可以用,没什么问题,而且质量显然比压扁的方图要好。打破思维定势,非方贴图该用就用原创 2014-01-07 14:10:31 · 2087 阅读 · 2 评论 -
[转载] Hermite 与 Bezier 曲线的绘制
发信人: william@cis_nctu (何陋居主), 信区: programming 标 题: [转载] Hermite 与 Bezier 曲线的绘制 发信站: 交大资科_BBS (May 25 00:32:41 1995) 转信站: cis_nctu转载 2009-07-06 16:26:00 · 4740 阅读 · 1 评论 -
ZBuffer裁剪planar shadow
适当的操作ZBuffer可以巧妙的完成一些任务,比如我要在擂台的边缘裁剪人的影子。擂台的特点是边缘之外的地方比较低。将影子埋在擂台表面下一点点,先绘制擂台,然后改变z test func,改为greater,并关闭zwrite,然后绘制影子,因为影子是在擂台下面的,这样从擂台上方看,影子具有比擂台表面更大的z值,opengl中z值大意味着离camera远,按照正常的z测试方法,GL_L原创 2009-06-21 21:51:00 · 1748 阅读 · 0 评论 -
动画技术-关键帧(keyFrame)
动画技术-关键帧(keyFrame) 关键帧是一种常用的动画技术,其基本原理是将动画序列中比较关键的帧提取出来,而其他帧根据时间用这些关键帧插值计算得到。一个简单的关键帧结构:typedef struct sKeyframe { DWORD Time ; D3DMATRIX matTransformation ;}sKeyframe这是一个非常简化原创 2006-03-02 13:49:00 · 7949 阅读 · 1 评论 -
Camera In JSR184
转自lyo的blog,原文地址:http://lyo.blogsome.com/2007/01/31/camera-in-jsr184/1. Camera类 — Lyo Wu写完模拟器的M3G部分,早就想写点总结,不写怕要忘了。那就从最简单的Camera类开始。Camera类封装了3种投影变换:Generic、Parallel、Perspectiv转载 2007-02-10 21:52:00 · 2375 阅读 · 0 评论 -
3D文章收藏
辐射度算法:http://freespace.virgin.net/hugo.elias/radiosity/radiosity.htm 构建地形系统(翻译)1:http://www.sf.org.cn/design/Design_Tutorial/design_19213.html构建地形系统(翻译)2http://www.sf.org.cn/design/Design_原创 2007-10-14 22:17:00 · 2475 阅读 · 3 评论 -
3D基本概念答疑(1)
问:为什么在一些书上和文章上看到的变换矩阵以及相乘顺序不一样?答:一个主要原因是行向量和列向量的区别。对于变换矩阵M,如果v是行向量,这时使用v左乘 矩阵: v=vM (v是行向量) 如果v是列向量,就要使用v右乘矩阵: v=Mv (v是列向量) 由于向量矩阵之间的乘法(实际也就是矩阵乘法)是不满足交换率的,所以对于行向量和列向量 ,他们做相同变换的变换矩阵是不一样的,所以在一些书上看到的原创 2008-02-15 22:41:00 · 2018 阅读 · 0 评论 -
OpenGL学习笔记-OpenGL的变换和矩阵
OpenGL的变换和矩阵1)指定矩阵类型OpenGL中使用glMatrixMode指定当前要设置的矩阵类型,常用的参数是GL_PROJECTION和GL_MODELVIEW,还有GL_TEXTURE。OpenGL将视点变换(即摄像机变换)和模型变换(即物体变换和世界变换)合二为一了。glMatrixMode指定的模式一但指定就不会变除非再次调用glMatrixMode,所以一般在resh原创 2008-04-14 11:43:00 · 3007 阅读 · 0 评论 -
irrlicht中设置平行光
使用scene manager的addLightSceneNode,默认加入的是点光源,设置平行光,需要自己设置SLight,将其type设置为ELT_DIRECTIONAL,这都好说,问题是光的方向,被误导了一下,因为ILightSceneNode本身没有setDirection之类的方法,而SLight::Direction文档中说是read only的,怎么回事?自己直接设了下,完全没有作用原创 2009-01-04 17:31:00 · 2196 阅读 · 0 评论 -
关注Blender-开源的3D创作软件
3D Max, Maya很强大,但他们也很昂贵,但这个世界上总有开源或免费软件可以替代。Blender就是其中之一。Blender是一套三维绘图及绚染软件。它具有跨平台的特性,支持FreeBSD,IRIX,GNU/Linux,Microsoft Windows,Mac OS X,Solaris,及 SkyOS。 除了免费,吸引我的还有他使用python作为脚本。他的劣势是使用的人少,特别是原创 2008-12-02 13:08:00 · 2735 阅读 · 0 评论 -
(ZT)Matrix Layouts, DirectX and OpenGL
Matrix Layouts, DirectX and OpenGLWhen reading about computer graphics, you invariably run into the mention of the Matrix datatype. Typically, this is a 4x4 matrix of floating-point values,转载 2008-12-22 18:18:00 · 1893 阅读 · 0 评论 -
lyo blog3D文章集锦
lyo blog关闭了,好文章做个备份--------------------------------------- Skinned Mesh in M3G Filed under: ProgrammingSkinned Mesh,就是根据skeleton去变换顶点,通过addTransform函数将Vertex和bone绑定,Specification中给出了计算式子:D转载 2009-04-07 09:27:00 · 1471 阅读 · 0 评论 -
lens flare:镜头光晕
最近的又一个工作是给游戏添加镜头光晕,google一下,gamedev上就有一个很好的教程,最简单的方法是:将太阳位置投影到屏幕空间,如果不在屏幕内就不画,否则从太阳位置向屏幕中心画出一系列的光晕贴图,混合方法还是src:srcalpha,dest:one。可完全当做2d图片进行绘制。我使用irrlicht引擎,就有一个小问题了,如果当做2d图片绘制就必须改变camera,设置一个原创 2009-06-21 21:49:00 · 4417 阅读 · 0 评论 -
RGBA模式人物换色的实现
早期的即时战略游戏,如星际争霸,采用调色板模式,因而可以很方便的通过修改人物图片的调色板索引,达到换色的效果。在RGBA模式下,修改顶点色或设置材质自发光皆不能达到满意的效果,因为我们需要的是像素级别的颜色调整,和多边形无关,即便可以通过细分材质,那也很勉强,况且会增加材质数量影响性能。所以我经过研究,觉得唯一的方法还是改变纹理。(欢迎有人提供更好的方法,这也是我发表这个文章的目的)那么怎么改变纹原创 2009-06-21 21:54:00 · 2491 阅读 · 1 评论 -
opengl粒子系统的渲染方式
原来一直以为,只有当前颜色alpha使用的混合函数为glBlendFunc( GL_SRC_ALPHA, GL_ONE );也有类似alpha通道的效果。复习一下blend的公式:源颜色是(Rs,Gs,Bs,As),源混合因子是(Sr,Sg,Sb,Sa),目的颜色是(Rd,Gd,Bd,Ad),目的混合因子是(Dr,Dg,Db,Da),而默认的混合计算是加法那么最终混合后的片原创 2009-06-21 21:50:00 · 2989 阅读 · 0 评论 -
3D几何流水线之模型变换
参考书:Real-time Rendering 2nd, 《3D游戏与计算机图形学中的数学方法》最初,物体在模型空间中,通过模型变换改变了物体的位置和朝向,物体被变换到世界空间。按照变换顺序,应该先旋转后平移,对于opengl的规则,是TR X V。矩阵T,R都是4X4的,T中只有第4列有效,其他是单位阵的排列,R中是前3X3子阵有效,其他是单位阵排列,将TR相乘:|原创 2009-06-21 21:52:00 · 3226 阅读 · 0 评论 -
OpenGL clip plane会受modle-view matrix影响
From the red book: OpenGL implementations often must compute the inverse of the modelview matrix so that normals and clipping planes can be correctly transformed to eye coordinates.From google原创 2009-06-21 21:48:00 · 2334 阅读 · 0 评论 -
Skinned Mesh原理解析和一个最简单的实现示例
Skinned Mesh原理解析和一个最简单的实现示例 作者:n5 本文的github地址:https://github.com/happyfire/SkinnedMeshDemo原创 2008-10-19 23:24:00 · 40829 阅读 · 26 评论
分享