- 博客(29)
- 资源 (4)
- 收藏
- 关注
转载 OGRE中的消息传递机制
原文出处:http://www.windameister.org/blog/2008/12/21/ogre-message-exchange-with-low-coupling/综述:这篇文章分析了ogre中类间的消息传递机制:listener()的实现原理。假设 A为消息发
2011-08-18 20:57:37
1151
转载 OGRE中的任意类型Any
原文出处:http://www.windameister.org/blog/2008/12/21/ogre-any-type/这篇文章分析了ogre中Any类型的实现原理。该类基于Boost:any。可以存放任意类型的数据,Any实际上是在内部嵌套了一个模板容器类,所以才
2011-08-18 19:45:48
1753
1
原创 OGRE的学习计划
上学期看完《3D游戏引擎设计》后,本来想系统的阅读Wild Magic的源码,后来经过比较思考,选择了OGRE,正如网友们所建议的:起点高,用的公司多。但长期以来一直苦于手头缺少合适的入门资料,虽然网上有ogre的使用教程,却没有一本教程系统的分析ogre的源代码,讲解其结构和设
2011-08-12 19:03:47
1382
1
原创 游戏动画中欧拉角与万向锁的理解
我在2009年5月份左右拜读了《3D数学基础:图形与游戏开发》,当时对欧拉角中万向锁的概念一直是百思不得其解,我只知道万向锁是一个弊端,但到底是什么一种情形一直不理解,也从未遇到过这种情况。书上有这样一句话:“如果您从来没有遇到过万向锁情况,你可能会对此感到困惑,而且不幸的是,很难在本书中讲清楚这个问题,你需要亲身经历才能明白。”今天我用3个多小时的时间再次回想了一下这个问题,总算想明白了,现在把思考的结果分享给大家~我会尽量说详细点,让大家感觉是亲身经历。 下面我想说明四个问题:1,什
2011-05-31 23:21:00
30817
26
原创 Chapte6 Spatial Sorting
<br /><br />第六章 Spatial Sorting<br />Spatial Sorting的两个目的:<br />(1) 便于不透明物体从前往后的绘制,半透明物体从后往前的绘制。<br />(2) 按Render State相似性排序,以减少RenderState改变的次数。<br /> <br />一,BSP树<br />该法用于粗略的空间排序。<br />BSP类基于Node类,有3个子节点:positive,negative,和middl
2010-10-27 22:42:00
1154
原创 18.5 reference counter
<br /><br />一.作用:共享类时,用于标记类被共享的次数。每被一个类共享,rc++;每有一个类结束共享,rc--;当rc=0时,被共享的类才被销毁。这避免了:<br />1. 某类已无共享,但仍留在内存中。<br />2. 某类仍被其他类共享,却被提前销毁。<br />模型,render state 均可被共享。<br />一般通过智能指针来管理rc。<br />Object 类的两个内容:1。Run time typeinformation;(用于存储类的类型)<br />
2010-10-27 22:41:00
781
原创 4.7 Scene Graph Compilers
<br /><br />说明:Scene Graph最终是以数据结构的形式呈现的,此种数据结构是为了方便场景的管理,即为了方便从3D建模工具导出这样的结构,以方便游戏的开发。但有得必有失,管理的方便使得这种数据结构并不适合计算机的图形系统,如内存上的分散,不能很好的支持chche等。因此有必要使用一些工具对数据结构进行优化以适应各种各样的要求。这些工具统称<br />Scene graph compilers。<br /> <br /> <br />Compiler有多种用途,现简述如下:<br />(
2010-10-27 22:40:00
667
原创 4.6the Drawing Pass
<br /><br />一些疑问:为什么在对RenderState进行更新时,不对EFFECT进行更新?<br /> 为什么不把Global Effect直接存在Geometry中而是存在索引表中?<br />该部分没有什么可讲的,前面几章已有所渗透,现简要概括大致框架。<br /> 创建Culler<br /> ↓<br /> 创建Cam
2010-10-27 22:39:00
609
原创 4.3RenderState及其更新
<br /><br />主要的RenderState分为global state,lights和effects。<br />一,抽象基类GlobalState<br /> 该类为一个抽象基类,所有的全局状态类型如alpha blending,triangle culling,material,polygon offset,stenciling,wireframe,depth buffering等都要基于该类创建。Node,Geometry均有相关接口用于global state的存储,加载和移除。
2010-10-27 22:36:00
1696
原创 4.5the Culing Pass
<br /><br />在WM4中,culling pass和 drawing pass是分开的,负责该流程的三个核心类是VisibleObject,VisibleSet,Culler。下面一一详述。<br />一,VisibleObject<br />该类实际上是一个结构类,有两个public成员:Spatial*Object和Effect*GlobalEffect<br />前者用于存储单个的潜在可见的物体,后者用于存储与Node节点相关联的globaleffect。(在绘制中大有作为)。<
2010-10-27 22:36:00
664
原创 4.2 Geometric State及其更新
<br /><br />与此相关的四个基本类是 vertexbuffer,index buffer,transformations和boundingvolumes。<br />一, VB 和IB<br /> VB包含了position,color,texture coordinates,normals,IB包含了点的邻接信息。VB和IB共同组成geometric primitive,它可以是点集,多边形,和三角网格等。Geometry类便是其容器。<br />二, Transfor
2010-10-27 22:34:00
583
原创 4.1 scene graph构建的基本问题
<br /><br />一,概述<br />Scene graph的目的是组织物体。<br />两个原则:1。空间从属关系(树)<br /> 2.Render State的相似性。<br />原则一是为了快速剔除大批不可见物体。<br />原则二是为了减少RenderState的频繁改变。<br />二者均可使游戏速度大大提高。<br />原则一通过空间划分实现(boundingvolumes),原则通过排序实现。<br />然而两个原则是互不兼容的。若按RS排序,物体必然会分
2010-10-27 22:32:00
921
原创 chapter2图形系统2.4标准物体和基于包围体的剔除
<br /><br />注:标准物体为第十章内容。<br /> <br /> <br />剔除是指去掉完全位于视景体之外的物体。<br />剔除分为背面剔除和物体剔除。<br />标准物体包括线(直线,射线,线段),面,AABB,OBB,椭球体,圆柱体,圆锥体,球移动体。<br />一,背面剔除。<br />这里的面指的是单侧面,即只有朝外的面可见,另一面朝向物体内侧(不透明物体),不可见。<br />1.基本思路。<br />假设平面的方程为,视点的世界坐标为E。则当平面法向量指离观察者时,点E位于平
2010-10-27 22:29:00
880
原创 chpter2图形系统2.3摄像机及几何管线
<br /><br />概述:<br />摄像机模型实际上是一个金字塔形的视景体,有近,远,左,右,上,下六个面。<br />几何管线是图形管线的一个部分,它的主要任务是变换,裁减和剔除。<br />变换包括世界变换,视点变换,裁减变换,透视除法,视口变换,窗口变换。<br />裁减是指对于与视景体相交的物体,计算物体与平面的交点,并返回新的物体点集。<br />剔除是指去掉完全位于视景体之外的物体以及背面剔除。<br /><br />一,摄像机模型。<br />此为俯视图:<br /><br /><br
2010-07-21 23:43:00
929
原创 chapter2 图形系统 2.2变换
说明:本书中遵循的一些书写习惯为列向量,左乘,逆时针旋转为正方向(符合右手定则)。变换分为线性变换,仿射变换和投影变换。这三种变换表达式不同,但都可以形如Y=MX的式子表达,其中Y,X是齐次坐标,M是4阶方阵。一,线性变换符合线性规则的变换就叫线性变换。已知变换Y=L(X),若L(cU+V)=cL(U)+L(V),则称变换Y=L(X)为线性变换。线性变换的矩阵表达形式为Y=MX,显然,M(cU+V)=cMU+cV,符合显性规则。常见的显性变换有旋转(绕原点),对映,缩放和切变。1,旋转。二维空间中旋转矩阵R
2010-07-19 18:49:00
1066
1
原创 chapter2 图形系统 2.1基础理论
<br />一,坐标系统。<br />常见的有笛卡尔坐标系,世界坐标系,物体坐标系,眼坐标系,裁减坐标系,和窗口坐标系。<br />后五个坐标系全部基于笛卡尔坐标系建立,该笛卡尔坐标就好像是一个绝对坐标系,所有其他坐标系的基向量都通过这个坐标系来定位,而没有比它更大的坐标系。<br /> 不同的引擎或图形API所采用的坐标系的坐标轴的朝向可能有所不同。有的坐标系X轴沿屏幕水平向右,Y轴向上,Z轴垂直指向屏幕内,有的则是前两者相同,而Z轴垂直指向屏幕外。<br /> 因此,在刚接触一款新的引擎时,我们
2010-07-19 00:35:00
812
原创 Chapter 1 本书简介
本书的重点是Scene Graph Management System 以及所包含的各个渲染组件和相关的数学理论。概括性介绍了物理,碰撞检测,软件工程,内存管理等知识。因此本书更适合的名字是“3D 游戏图形引擎设计".具体的讲,本书分为六大板块:第一,图形系统。第二章详细介绍图形渲染管线和相关的基础理论。第三章讲述图形系统接口。第二,场景图。第四章讲述Scene Grapha Management。第五六七章分别讲述了Scene Grapha 的子系统。如动画,spatial sorting 和 L
2010-07-17 11:17:00
870
1
原创 前言
<br />本书所用引擎为Wild Magic 4.0。图形系统基于shaer,Cg语言。VS2.0版本<br />跨平台。支持Microsoft,Linux和Macintosh。有Opengl和D3D版本。<br />支持VC++6,7,和8(VC++2005)
2010-07-17 10:43:00
551
原创 移位贴图 Displacement Mapping
说明:该技术需要VS3.0的支持!!!一,移位贴图类似于地形渲染。不过由于移位纹理可以做成动态的,因此,该技术可以用来模拟波涛滚滚,起伏不平的海面。二,类似于法线贴图,移位贴图的每一个纹素中存储了一个向量,这个向量代表了对应顶点的位移。注意,此处的纹素并不是与像素一一对应,而是与顶点一一对应,因此,纹理的纹素个数与网格的顶点个数是相等的。在VS阶段,
2010-06-06 11:24:00
3724
原创 法线贴图
一,法线贴图实际上是一张纹理图,但纹理中存储的并不是颜色值,而是法向量坐标。这项技术的主要目的是实现物体表面的粗糙细节。二,法向量在纹理中的存储形式。对于24位纹理格式,r g b 三个元素中分别存储了法向量的三个坐标值。然而,法向量三个坐标值 的取值范围均为(-1.1),而纹理格式中rgb分量的范围是(0,255),因此我们必须做相应的变换。变换方程如下:f(x)=(0.5x+0.5)*255当我们从纹理文件中读取纹素值后,我们便需要将其从(0,255)转换成(-1,1)。由于tex2D函数返回值范围是(
2010-06-05 23:59:00
5290
原创 立方图纹理与环境贴图
一,立方图纹理。立方图纹理是一种三维纹理。其纹理坐标是3D的。该坐标的实质是一个由立方体中心发出的向量。该向量会与四周的六个贴图之一相交,交点即为对应的纹素。从本质上讲,立方图纹理是6个2D纹理,具体地讲,对于坐标(-3,-2,1),由于x坐标绝对值最大,因此向量指向-x方向的那个贴图。y和z坐标转换到(0,1)后,即是-x方向上的2D纹理的坐标值。立方图纹理的操作与2D纹理基本相同,唯一的区别是tex2D改为texCUBE。二,环境贴图。立方图纹理的主要作用之一是环境贴图。许多物体都具有部分的镜面效果,如
2010-06-04 23:41:00
4035
原创 混合 blending
一,默认的混合方程。outpixelcolor=sourcepixelcolor⊕sourceblendfactor+destpixelcolor⊕destblendfactor;其中,⊕代表对应元素分别相乘。source代表正在渲染的片元,dest代表后台缓存中的片元。sourceblendfactor越大,物体透明度越小。二,使用混合时必须遵守的规则。先画不透明物体,再画透明物体。多个透明物体按照离视点由远及近的顺序渲染。可通过视空间中的z值排列顺序。三,默认情况下混合是关闭的,因为其计算开销比较大。因
2010-05-31 23:15:00
867
原创 hlsl语法规则小结
<br />1.static的用法<br />在shader中使用static前缀和C++中是有区别的。在shader中,若在全局变量的前面加static修饰,说明该变量只能在shader中可见,在程序中是不可见的,并且这个变量可以在shader中进行更改。若在函数内的变量前面加static修饰,用法跟c++相同。<br />2.关于变量的初始化和赋值。<br />这个与c++不同,shader中变量的初始化和赋值,需要用构造函数,形式上为类型名();<br />例如:float2 tex=float2(0
2010-05-31 14:04:00
1132
原创 纹理映射(1)
一,纹理坐标系统。 坐标的范围为[0,1] u坐标水平向右,v坐标水平向下。二,纹理过滤。分三种模式:nearest point sampling 取最近的纹素颜色值。linear filtering 取屏幕像素周围的2*2个纹素求得颜色值。anisotropic filtering 效果最好,也最耗性能,使用该法需指定MAXANISOTROPY的值,值越大效果越好。
2010-05-28 23:44:00
1251
原创 一个未解决的HLSH编译错误,等待解决。(已解决:))
最简单的shader了,模拟水面的波动,不过总出现一条奇怪的错误,“NaN and infinity not allowed in shader model".调试了好几天也没解决,先放下,继续往后看,等待以后解决了。龙书。第九章课后习题六。补充:总算找到错误了,原来是变量初始化的时候没有用构造函数。
2010-05-28 19:56:00
930
转载 一个平庸程序员的反思:你到底想干什么
前天晚上,老婆和我偎在床上说悄悄话,大致的意思是所有她的同学都有房子了,有些还当上了管理人员,并带着少许调侃说我以后也就这样了,1年10多万,失业就会掉头发。 我今年28,一个C++/Java程序员,跟大多数人一样,天资平平,虽然爱学习,但没有上一个好大学,工作这么几年也没有混上一个管理人员,有时候在自己看来,稍稍有些可悲。因为官本位的残留+农耕文化,在中国搞技术历来就是一个吃力不讨好的
2009-12-09 21:18:00
755
原创 写给未来的自己——好歌词
敬启,这封信给十五岁的你敬启此刻正在阅读这封信的你身在何方,在做些什么十五岁的我怀揣着无法向任何人诉说的烦恼的种子倘若是写给未来的自己的信是否就能将一切诚实的袒露?此刻,好像就快输掉,好像就快哭出来好像就快要消失的我到底应该相信谁
2009-12-05 16:30:00
3087
原创 基于MFC的OpenGL shader编程--我的第一个shader
一.环境配置由于微软公司为了推销自己的产品DirectX,击败OpenGL,因此现在的windows操作系统只支持OpenGL1.1版本,而现在的OpengGL版本已经发展到了3.1,并且只有2.0以上的版本才支持GLSL语言,所以我们必须对操作系统上的OpenGL进行升级,那么应该如何升级呢?实际上,下载OpenGL2.0以上的开发库是没用的,因为windows只支持1.1版本。所以
2009-12-03 17:07:00
5976
2
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人