3D Engine研究
文章平均质量分 55
n5
在信息时代客观障碍已不复存在所谓障碍都是主观上的如果你想研发什么新的技术你不需要几百万美元的资金你只需要在冰箱里放满比萨和可乐再有一台便宜的计算机和与之献身的决心你即可拥有任何你想拥有的编程境界- John Carmack
展开
-
引擎开发随笔之OpenGL Shader的封装思考
在进行mini3d.js这个开源小项目的过程中,越来越体会到一个引擎的复杂性,从技术DEMO到可以完成实际工作的引擎,完全不是一个数量级的复杂度。因为工作量太大,且想做的事情太多,mini3d.js的开发笔记一直是很滞后的,当然主要原因还是开发mini3d.js对我来说已经是一个很大的工程了。为了防止时间长了忘了很多东西,以及记录一些暂时没法去做的事情,特别用随笔的形式简单记录一下,想到哪儿记到哪...原创 2020-04-16 13:56:43 · 522 阅读 · 0 评论 -
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 · 1728 阅读 · 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 · 2812 阅读 · 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 · 1557 阅读 · 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 · 1828 阅读 · 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 · 1562 阅读 · 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 · 1869 阅读 · 0 评论 -
POD格式分析学习
1. POD文件基本结构和读取方法POD是powvr sdk提供的一种场景文件,包含了scene tree常用的对象。POD是二进制文件,通过导出插件PVRGenPOD或者Collada2POD工具从dae转换得到。通过分析学习POD格式以及pvr sdk装载POD的代码,可以了解3d引擎场景模型动画文件的一种二进制实现方式,作为自己设计文件格式的参考。并且POD格式特别针对Imagina原创 2013-04-15 21:32:38 · 5717 阅读 · 0 评论 -
较真一下OpenGL Clip Space和NDC
在OpenGL ES 2.0 Programming Guide里面,有一段:uniform mat4 u_mvpMatrix; // matrix to convert P from model // space to normalized device space.这个地原创 2013-08-03 20:15:14 · 12005 阅读 · 3 评论 -
glActiveTexture和glBindTexture的一些理解
在openGL中,存在一系列的texture unit,通过 glActiveTexture激活当前的texture unit,默认的unit是0。而当前的texture unit中存在多个texture target,例如GL_TEXTURE_2D, GL_TEXTURE_CUBEMAP。通过glBindTexture将一个texture object绑定到当前激活的texture unit...原创 2019-05-09 18:53:37 · 4279 阅读 · 1 评论 -
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 · 2134 阅读 · 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 · 1656 阅读 · 0 评论 -
irrlicht引擎源码剖析3 - 引用计数
在研究irrlicht的video driver和scene graph之前,必须先了解在irrlicht中广泛应用的引用计数机制。irrlicht的接口IReferenceCounted实现了引用计数的机制。需要采用引用计数管理的类都会继承这个接口。irr的引用计数最重要的两个接口就是grab()和drop()。 bool drop() const{// someone is d原创 2009-07-12 21:44:00 · 3380 阅读 · 2 评论 -
irrlicht引擎源码剖析1 - 引擎概览
irrlicht是跨平台,支持多种图形库的开源3d引擎。irrlicht的设计很好的体现了接口和实现分离的原则,整个框架设计精巧清晰,是学习3d引擎设计的不错的教材。先看下名字空间的划分,可以看到irr具有非常清晰的结构:irrEverything in the Irrlicht Engine can be found in this namespace原创 2009-07-05 17:40:00 · 5740 阅读 · 4 评论 -
irrlicht引擎源码剖析2 - IrrlichtDevice
本篇讨论IrrlichtDevice,主要探讨以下几个问题:->irrlicht对设备做了哪些抽象->如何做到跨平台->win32设备的实现细节1)引擎的基石 - IrrlichtDeviceirrlicht所指的设备是什么呢?探究IrrlichtDevice接口,irrlicht设备是对应用程序窗口环境的抽象,实际上对应了在各个平台上的应用程序框架。在Irrlic原创 2009-07-07 23:11:00 · 4054 阅读 · 0 评论 -
wild magic3的Scene graph结构和Geometric State更新体系
刚看了《3D Game Engine Architecture》第3章“Scene graphs and renderers"的前两节,很精彩,暂且不拿wild magic 3和其他引擎相比较,只是作为读书笔记,记录一下书中的核心内容。我觉得第3章是此书的核心部分,全部内容就是scene graph的更新和渲染,其中第一节描述了wild magic3中的scene graph架构,第二节重原创 2010-02-16 23:56:00 · 2095 阅读 · 0 评论 -
wild magic3 渲染状态更新和scene绘制
基本上是《3D Game Engine Architecture》第3章的剩余内容,说实话我有点后悔看这个了,应该直接看《3D Game Engine Design 2nd》,不过好歹记录一下,有些“亮点”我第一次看到还是不错的。1 wild magic3 render state主要包括global state, lights, texture, effects1) global s原创 2010-02-19 00:27:00 · 1717 阅读 · 0 评论 -
3D引擎动画设计中的一个问题
最近遇到一个很隐晦的bug,我们有个需求需要将人物的动画进行替换,用完后再换回去。发现bug换回原始动画后,人物不见了。跟了很久,原来是我们使用的引擎在处理动画时没有考虑到动画可能被替换,因此直接让动画修改了模型的一些属性但不能恢复。例如,原始动画具有修改bip01的translation Z的动画track,而替换动画具有修改bip01的translationx,y,z的track,原创 2010-05-03 22:35:00 · 1602 阅读 · 0 评论 -
OpenGLES 1.1 相对于OpenGL2.1的删减-材质部分
1) Color MaterialOpenGLES1.1只支持使用glEnable/glDisable开启关闭,如果开启,必然是diffuse & ambient同时trace,而OpenGL2.1可以使用glColorMaterial(GLenum face, GLenum mode)指定正反面的colormaterial模式,即使用ambient, diffuse,原创 2010-05-15 23:04:00 · 2200 阅读 · 0 评论 -
3D引擎开发,慎用逆矩阵
这是irrlicht引擎的一个真实bug,他的粒子系统的boundingbox算的时候是世界空间的,但是由于irr的scene node有个统一的本地空间boundingbox,执行culling的时候再transform为absBoundingbox, 所以irr的粒子系统中先用粒子系统的逆矩阵将bounding box变换到本地,但是逆矩阵有时候不存在,得到一个0矩阵,然后就错了。。并且这样做要多执行一次矩阵求逆和两次矩阵乘法。固然统一的结构是好的,但是具体到可能出问题和影响效率的地方还是要注意的。改法原创 2010-07-14 16:16:00 · 2168 阅读 · 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 · 2570 阅读 · 1 评论 -
Irrlicht引擎:文件系统简介
整个文件io系统位于irr::io名字空间内,接口简洁明了,见下图 这个文件系统的一个特点是,可以将zip包,pak包(Quake2 pak格式)视作目录,包中的文件和磁盘目录的文件一样访问,直接指定文件路径即可。在IFileSystem的实现中,createAndOpenFile的过程是,先遍历所有的zip包(之前必须使用addZipFileArchive设定上),如果找到原创 2008-12-14 22:07:00 · 3296 阅读 · 0 评论