基本上是《3D Game Engine Architecture》第3章的剩余内容,说实话我有点后悔看这个了,应该直接看《3D Game Engine Design 2nd》,不过好歹记录一下,有些“亮点”我第一次看到还是不错的。
1 wild magic3 render state
主要包括global state, lights, texture, effects
1) global state包括:
- alpha: 是否启用混合,srcblend, dstblend; 是否启用alpha test, test方法,test ref value
- cull: 是否启用culling, front face ccw or cw, cull face back or front
- dither:是否开启抖动
- fog: 是否启用fog, fog mode(linear,exp, exp_sqr), start,end, density, color, per_vertex/per_pixel
- material: 即光照材质,emissive, ambient, diffuse, specular和shininess
- shade:flat or smooth(Gouraud shading)
- wireframe: 是否启用线框模式
- zbuffer: 是否使用zbuffer, zwrite, z compare func
每种state都是集成自GlobalState的一个类,比如ZBufferState
每个Spatial拥有一个
global state列表,列表里每种global state只能有一个。Spatial的global
state列表不是直接用来渲染的,后面还要通过UpdateRS来沿着tree收集所有的global
state,最终给Geometry使用。Geometry类里面有一个global state数组,维数为global
state种类数目。(UpdateRS机制后面说)
2) light
Light
类继承自Spatial,没啥可说的,都是光源的属性。不过WM3中,AMBIENT也算是一种光源,和平行光,点光源等并列了,我们知道在OpenGL
中是可以设置一个场景的ambient的,WM3中的这种光源是否就是场景ambient,如果是,只能有一个吗?
和global state一样,每个Spatial也拥有一个Light列表,Geometry类有一个使用到的Light smart ptr数组,其实是指向挂在scene tree上的那些light的。
3) Texture
WM3的texture类中封装了如下内容:
- Image: 贴图(是个smart ptr)
- texture correction hint: 即是否使用透视纹理校正 ( perspective or affine)
- filter mode: nearest or linear
- mipmap mode: nearest , linear(这两个和filter mode里面其实是一样,就是不用mipmap了)
nearest_nearset, nearset_linear, linear_nearest, linear_linear(所谓的三线性过滤)
- u,v的clamp mode: clamp, repeat, clamp_border, clamp_edge (没有mirror), 以及border color
- tex gen: 支持environment map, projected_texture (不知道当硬件不支持时是否可以手动计算)
- apply mode和blend color:即opengl的tex env mode,包括:replace, decal, modulate, blend, add, combine
- multi-texture设置(针对apply mode为combine):combine func RGB/RGBA,
combine src RGB/Alpha 0,1,2; CombineOpRGB/Alpha 0,1,2; scaleRGB,
scaleAlpha
基本上他封装了所有纹理相关的内容了
4)Effect
这个Effect包含顶点色数组(RGB or RGBA),一组纹理的smart ptr, 一组uv坐标
2 wild magic3渲染状态更新体系
WM3
可以scene grapha的各个节点上挂接渲染状态和灯光(上面说的global
state和light),而只有叶子节点也就是Geometry使用渲染状态和灯光,通过UpdateRS,将每层挂接的global
state和light向下传递,对于同类型的global
state,子一层的设置会屏蔽上层的设置(每种state都有一个stack,遇到设置该state就push进去,最后使用的是pop出来的,也就是
最后一次push的,显然是最后一次设置的状态),到叶子节点也就是Geometry这儿,将各类状态stack的top
pop出来存放到Geometry的global state数组中,供渲染时使用。
这儿还有另外一个问题,引发UpdateRS的那个节点,需要向上直到ROOT收集渲染状态和灯光,而所有的状态都有一个默认值。这是通过PropagateStateFromRoot实现的。
所有这些状态和灯光都是shared ptr,所以WM3里面,只有状态被添加或移走时才需要更新RS。
关
于这些,我不想多写了,看代码一目了然,而且我想知道WM4里面是怎么弄的了。不过这种基于scene
grapha的渲染状态树我之前没见到过,irrlicht中,每个需要渲染的节点是自己设置这些状态的,driver层会设置默认状态。WM3这种机制
有什么好处还要看看~
3 scene渲染
1)首先camera会有个culling操作,基于bound volume,这儿有两个东西有点意思:
- camera有个32bit的标志,每个裁剪面占一位,执行culling时,由于是从上到下沿着树深度优先绘制的,所以父空间先检测,这个标志
位就是标志父空间是否完全在某个面的内部,如果是,那么子空间做检测时就不用检测这个面了。(当然反过来是不行的)这样效率确实要高些。
- camera支持手动push/pop culling面(不是clip plane).这些面只用来做culling检测,这对于portal系统很有用,WM3利用push/pop culling面实现了一套portal系统检测
2)scene渲染:这块儿没怎么看了,准备直接看WM4的,大概就是一个OnDraw和一个Draw,
onDraw里面检测culling,并且调用draw,
而draw对于spatial是一个纯虚函数,Node的draw会调用子节点的OnDraw形成递归,Geometry的draw直接调用
renderer的draw(Geometry*),这里面会设置当前使用的geometry和effect,调用DrawPrimitive去执行。当
然这儿还有一个所谓DrawDeferred,后面才讲不知道是什么。另外还有所谓global effect被设置时,node会直接调用draw。
DrawPrimitve里面就是:
- 设置渲染状态,
- 启用lighting,vertices,normals,vertex colors,texture units,
- 设置transformation matrix
- draw object
- restore transformation matrix
- 禁用texture units, vertex colors, normals, vertices, lighting
分享到:
相关推荐
5. **场景管理**:WildMagic4可能有场景图(Scene Graph)的实现,用于组织和管理游戏世界中的对象,提供层次化、可遍历的结构。 6. **文件格式支持**:源代码可能包含了读取和写入3D模型、纹理和其他资源文件的...
WildMagic4是一个强大的、基于可编程管线的3D图形引擎,相比之前的版本,它在功能和架构上有了显著的更新,以适应现代图形硬件的需求。 在3D游戏引擎设计中,可编程管线是核心概念之一。传统的固定功能管线在现代...
3. **渲染技术**:支持顶点着色器和像素着色器,可以进行光照、纹理映射等高级图形效果的编程。同时,引擎还提供了视锥体剔除、深度缓冲等功能,优化了渲染性能。 4. **动画系统**:支持骨骼动画和关键帧动画,允许...
3d 引擎 Wild Magic 5.5 3 of 3
WildMagic2p2 Engine是一款专为游戏开发设计的开源引擎,其核心是提供高效、可靠的图形渲染、物理模拟以及各种游戏开发所需的工具和库。这个引擎的源代码开放,允许开发者深入理解其工作原理,同时也方便自定义和...
总的来说,Wild Magic Version 4.8 的更新和安装手册是用户成功运用这款软件的重要参考。通过详细阅读和理解其中的知识点,用户不仅能确保软件的正确安装,还能充分利用其强大功能,提高计算和模拟工作的效率。因此...
1. **3D渲染**:WildMagic5.9提供了基础的图形渲染管线,包括顶点着色器、片段着色器以及光照模型。开发者可以学习如何利用这些功能创建复杂的3D场景,实现阴影、纹理映射、环境光遮蔽等视觉效果。 2. **数学库**:...
3d 引擎 Wild Magic 5.5 1 of 3
3d 引擎 Wild Magic 5.5 2 of 3
8. **多线程**:为了提高性能,游戏引擎可能利用多线程处理不同任务,如渲染和更新逻辑可以并行执行。 9. **调试工具**:为开发者提供的辅助工具,如控制台、性能分析器、日志记录等,帮助调试和优化代码。 10. **...
Wild Magic是一个强大几何库,包含了很多计算几何的经典算法。。最新版的wild magic5.13仅包含了vs10及以上的工程。作者自己最近需要在vs08上使用,就不得不自己重新编译。为了方便有需要的童鞋,在此贡献了自己编译...
3. **图形渲染**:WildMagic4可能包含了先进的图形渲染技术,如阴影投射、光照计算、纹理映射、法线贴图和后期处理效果,以实现逼真的视觉体验。 4. **空间分割**:GeometricTools可能提供了空间分割结构(如 ...
实时三维游戏引擎Wild Magic Game Engine v5.5 最新源代码(2011年03月发布) + 所有详细文档 + VS2010可编译工程 + 121个编译好的实例。 游戏引擎巨著《3D Game Engine Design》的作者编写。 得来非常不易, 现在免费...
实时三维游戏引擎Wild Magic Game Engine v5.5 最新源代码(2011年03月发布) + 所有详细文档 + VS2010可编译工程 + 121个编译好的实例。 游戏引擎巨著《3D Game Engine Design》的作者编写。 得来非常不易, 现在免费...
WildMagic引擎5.4版本源码,2010年最新版本
实时三维游戏引擎Wild Magic Game Engine v5.5 最新源代码(2011年03月发布) + 所有详细文档 + VS2010可编译工程 + 121个编译好的实例。 游戏引擎巨著《3D Game Engine Design》的作者编写。 得来非常不易, 现在免费...
实时三维游戏引擎Wild Magic Game Engine v5.5 最新源代码(2011年03月发布) + 所有详细文档 + VS2010可编译工程 + 121个编译好的实例。 游戏引擎巨著《3D Game Engine Design》的作者编写。 得来非常不易, 现在免费...
"Wild Magic Library数值计算源码"是一个专门为数值计算设计的软件库,它的核心功能是提供高效、精确的矩阵和向量运算。这个库对于需要进行大量科学计算、工程计算或者机器学习任务的开发者来说,是一个宝贵的资源。...
Wild Magic 4.2 and later is now Open Source, using the GNU Lesser General Public License (LGPL). The WildMagic4p8.zip file has the full distribution of version 4.8 of the engine. You should unzip this...
"Wild Magic 4"是一款专为3D游戏开发设计的高级引擎,以其全面支持shader技术而备受推崇。这款引擎的出现,为游戏开发者提供了一个强大的平台,让他们能够创建出更为逼真、更具视觉冲击力的3D游戏环境。在本文中,...