摘要: 原地址:http://www.cnblogs.com/winsonchen/archive/2008/09/06/1285515.html一、场景管理有很多种方法,如四叉树、八叉树、BSP、模糊K-D树、包围球层次结构等。室内环境主要是BSP为主,从quake3一直延续到现在主流的引擎都是以BSP为基础,BSP使用并不难,关键是数据的生成,这就牵涉到场景编辑器。 Quake3、Unreal:BSP,有自己的编辑器。 FarCry:场景分为室内和室外两部分,室内场景使用BSP, 室外不清楚但应该跟地形有很大关系,同时为了支持超远距离视距使用了地形Occlusion Culling,另外也可以手. 阅读全文
posted @ 2011-11-22 10:11 ☆A希亿 阅读(388) 评论(0) 推荐(0) 编辑
摘要: 在渲染多边形网格对象到场景中的时候,离观察者越远的对象应该越模糊,同时离观察者越近的物体应该越清楚,这就是深度排序(depth sorting)。深度排序有两种常用的方法。第一种方法称为画家算法(painter's algorithm)。这种方法将对象划分成不同的多边形,由后往前对这些多边形进行排序,再按照排好的顺序绘制出这些多边形。采用这种方法绘制多边形,能够确保前面的多边形总是在其后多边形之前进行绘制。深度排序的第二种方法称为z缓冲方法(z- buffer),它是图形硬件设备使用最多的方法。这种方法依赖于像素,每个像素都有一个z值(z值是像素距离观察者的距离)。当每个像素被写入时, 阅读全文
posted @ 2011-11-21 17:46 ☆A希亿 阅读(481) 评论(0) 推荐(1) 编辑
摘要: 缩放与视域角有关投影的过程就是xyz分量除以W的过程可知投影在了z=1,的平面上面的z是指乘以投影矩阵(剪裁矩阵)后的z 这里设上面这个DIP矩阵为A;经过计算可知:(在近裁剪面的点) (x,y,n,1)*A=(x*zoomx,y*zoomy,0,n)---->投影后为(x*zoomx/n,y*zoomy/n,0)(在远裁剪面的点) (x,y,f,1)*A=(x*zoomx,y*zoomy,f,f)---->投影后为(x*zoomx/f,y*zoomy/f,1)乘以矩阵后的点满足了0<=z<=w。而且是两个边界。这里的DIP矩阵就是投影矩阵。只不过投影过程要除以w分量来 阅读全文
posted @ 2011-11-19 10:49 ☆A希亿 阅读(2145) 评论(0) 推荐(1) 编辑
摘要: 呵呵,完全从书上扒下来的,写得很好,详细说明了视角变换矩阵的计算过程。 阅读全文
posted @ 2011-11-18 17:45 ☆A希亿 阅读(1835) 评论(0) 推荐(0) 编辑
摘要: 游戏程序员养成计划 (更新2010.11.6)原文地址:http://www.cnblogs.com/clayman/archive/2009/05/17/1459001.html#2241553仅供个人学习使用,请勿转载,勿用于任何商业用途。作者:Clayman 与玩游戏相比,写游戏要复杂上千万倍,除了需要掌握通用的编程技巧以外,还要有相当的图形学,物理,数学基础,特别是在国内,由于相关资料的缺乏,更是让初学者无从下手。下面总结了一些入门方法和比较容易入手的资料。 首先你要精通一门高级语言,比如C++或者C#,其次,要有良好的英文阅读能力。对游戏开发者来说英文阅读能力是最重要也是最基本的工具 阅读全文
posted @ 2011-11-17 21:17 ☆A希亿 阅读(569) 评论(0) 推荐(0) 编辑
摘要: 有点深意。。 阅读全文
posted @ 2011-11-12 22:35 ☆A希亿 阅读(227) 评论(0) 推荐(0) 编辑
摘要: 渲染流水线 对于Direct3D,上述过程通常被认为是一个渲染流水线。 未经转换和照明的顶点从一端进入,在内部这些顶点将完成几个连续操作。然后,经过转换和照明处理的顶点从另一端出来。 渲染流水线的大部分过程都是在进行坐标转换 ,将顶点从一个坐标系转换到别的坐标系。 在使用Direct3D来进行转换时,用户只需要提供描述系统转换的完整转换矩阵,通过IDirect3DDevice->SetTransform方法来实现相应的变换。HRESULT SetTransform( D3DTRANSFORMSTATETYPE State, //变换的类型 CONST D3DMATRIX *pMatrix 阅读全文
posted @ 2011-11-12 22:15 ☆A希亿 阅读(1375) 评论(2) 推荐(0) 编辑
摘要: 最近在看阿哲的《3D地形制作全攻略》,写得很好,但是好像网上找不到源码,本来想加QQ请教一下,不过貌似被拒绝了。。。按照书上的方法想做一个光晕效果,看着其实还是不难,但是动手实现的时候还是遇到了麻烦,特别是进行世界坐标->视角转换->投影转换->视口转换的时候,理解起来还是费了一番功夫。就此总结一下。首先说一下光晕实现的思路,就是在世界坐标系中确定太阳的位置,然后通过视角转换->投影转换->视口转换,变换到屏幕坐标,结算其与屏幕中心的连线,在这条直线上面贴上光晕的贴图,光晕的alpha值由太阳(屏幕坐标)到屏幕边界的距离决定,开启alpha融合渲染。基本思想并不难 阅读全文
posted @ 2011-11-12 21:24 ☆A希亿 阅读(1365) 评论(0) 推荐(0) 编辑
摘要: void dda(HDC hdc){ float dx,dy; int k; float x; float y; HPEN pen=NULL; pen = CreatePen(PS_SOLID,5,RGB(255,0,0)); SelectObject(hdc,pen); k=_abs(x2-x1); if(_abs(y2-y1)>k) k=_abs(y2-y1); dx=(x2-x1)/k; dy=(y2-y1)/k; x=x1; y=y1; for(int i=0;i<=k... 阅读全文
posted @ 2011-11-10 17:48 ☆A希亿 阅读(472) 评论(0) 推荐(0) 编辑
摘要: 在本章中,我将介绍窗口过程和基本的正文输出,并对一些较高级的题材,如键盘和鼠标,作一个简洁的介绍。消息系统完美的风格使得你可以相对完全地、及时地对这两个硬件设备进行控制。 现在,你可以开始输入并运行程序清单 5.1 上的程序。程序清单 5.1 KeyMouse 程序,用于追踪键盘和鼠标的输入///////////////////////////////////////// Program Name:KeyMouse.cpp// Programer: skyline// Description: Show how to trap keyboard and mouse input////////. 阅读全文
posted @ 2011-11-09 18:47 ☆A希亿 阅读(615) 评论(0) 推荐(0) 编辑