目前流行的3D开发环境有两种:OpenGL和Direct3DHAL/插件式软件驱动/参考光栅器硬件抽像层(Hardware Abstraction Layer, HAL)1、游戏检查HAL的能力(capability);2、游戏适当地开启或关闭某些特性;3、若某些特性被关闭,便会以一种低效的方法来实现,可能是模拟某个特性。
这通常会导致图像质量降低。
HAL有4种不同的顶点处理方法:SW VP(软件顶点处理)Mixed VP(混合顶点处理)HW VP(硬件顶点处理)Pure VP(纯顶点处理)插件式软件设备(Pluggable Software Device)参考光栅器(Reference Rasterizer):COM(组件对象模型):对一组特定功能的抽像集合,应用程序不能直接访问COM对象,而是必须通过对COM对象的接口(Interface)的指针执行COM对象的功能。
优点:COM接口永远不会改变; COM是独立于语言的(language-independent);只能访问一个COM组件的方法,而不是它的数据。
像素是指:图像在屏幕上显示的最小单元,即屏幕上的一个亮点。
它也指在frame buffer(颜色缓冲区)中的最小图形单元。
分辨率是指:显示设备所能显示的最大像素个数。
例如:一个分辨率为1024×768的显示屏能够显示水平方向1024个像素,垂直方向768个像素,满屏显示1024×768 =786432个像素。
顶点就是3D空间中的一个点,它定义了多边形的相交点。
Direct3D中能够渲染的所有物体都是由图元构成,而图元都是由顶点构成。
D3D中的颜色:像素和顶点的颜色使用RGB表示。
使用两种不同类型的结构来保存RGB数据:D3DCOLOR (值0到255)D3DCOLORV ALUE(值0到1,不能作为顶点颜色。
)为D3DCOLOR进行赋值:D3DCOLOR_ARGB宏D3DCOLOR_XRGB宏注意不能将D3DCOLORV ALUE类型的数据作为顶点颜色成员,因为D3D要求用32位的值来描述顶点颜色。
交换链和页翻动(page flipping)技术被用于提供帧之间的平滑动画。
颜色缓冲区(FrameBuffer):前台缓冲区(Front Buffer)和后台缓冲区(Back Buffer)。
交换链由两个表面组成:前台缓冲区和后台缓冲区渲染过程:1.渲染后台缓冲区;2.显示后台缓冲区;3.重新循环到1。
内存池(Memory Pools)主要有:D3DPOOL_DEFAULT:D3D的默认内存池D3DPOOL_MANAGED:在其中的资源由D3D进行管理D3DPOOL_SYSTEMMEM:资源被放入系统内存中D3DPOOL_SCRATCH:资源被放入到系统内存中,设备不能访问在该池中的资源,但是这些资源可以与其它内存池进行交换。
灵活顶点格式(Flexible Vertex Format (FVF))是用来描述顶点属性的一种格式格式化所有的顶点:位置(未转化或者已转化的x、y、z)——(浮点数)x坐标、y坐标、z坐标。
RHW(仅用于已经转化的顶点)——(浮点数)rhw(齐次w值的倒数)混合加权值——1∼5的浮点数。
顶点法线(仅用于未经转化的顶点)——(浮点数)x法线、y法线、z法线。
散射光颜色——(DWORD)扩散色,用RGBA表示。
反射光颜色——(DWORD)反射色,用RGBA表示。
纹理坐标集1∼8——(浮点数)纹理映射的u坐标,v坐标。
Direct3D定义的FVF的格式:D3DFVF_XYZ 包含未经转换的顶点坐标D3DFVF_XYZRHW 包含经过转换的顶点坐标D3DFVF_XYZW 包含经过转换和裁剪的顶点坐标D3DFVF_XYZB1………D3DFVF_XYZB5包含用于骨骼动画的顶点和顶点对骨骼的权重信息D3DFVF_NORMAL 包含法线信息D3DFVF_PSIZE 指明绘制点的大小D3DFVF_DIFFUSE 包含漫反射的信息D3DFVF_SPECULAR 包含镜面反射的信息D3DFVF_TEX1………D3DFVF_TEX8图元是由Direct3D定义的几种基本的图形表示,所有的复杂物体都是由这些基本图元来组合而成的。
在Direct3D中采用的是三角形网格的近似表示。
图元类型:点列,线列,线带,三角形列,三角形带和三角形扇点列D3DPT_POINTLIST 一组点的集合线列D3DPT_LINELIST 一组线段的集合线带D3DPT_LINESTRIP 首尾相连的线段的集合三角形列D3DPT_TRIANGLELIST 一组三角形的集合三角形带D3DPT_TRIANGLESTRIP 首尾相连的三角形,有两个顶点重合三角形扇D3DPT_TRIANGLEFAN 组成扇形的一组三角形设置背面裁减的函数:SetRenderState(D3DRS_CULLMODE, Value)D3DCULL_NONE:不裁剪D3DCULL_CW:裁剪顶点顺时针排列的三角形D3DCULL_CCW:裁剪顶点逆时针排列的三角形笛卡尔3D坐标系:Direct3D中使用的是左手坐标系3DMax等建模软件则使用的是右手坐标系。
D3D中的空间:本地空间,世界空间,视图空间,视口本地空间:本地空间(或者称为模型空间)指定义组成物体的三角形列表时所使用的坐标系统。
例如:本地空间中创建物体时,不需要考虑物体的位置、大小以及与世界空间中其他物体的关系。
世界空间:在完成各种模型的创建后,所有的物体都只在相应的本地空间中,需要把这些模型组合到一起,形成一个场景。
这个统一的坐标系统所决定的空间称为世界空间。
视图空间:Direct3D允许在场景中设置一个虚拟摄像机,决定我们看到的场景,由虚拟摄像机决定的空间称为视图空间。
视口:游戏中,视口经常是整个屏幕,但是视口也可以是屏幕上的矩形区域。
可能是屏幕的一部分或者是处于窗口模式下窗口的客户区。
视口与其所在的窗口相关并且通过所在窗口的相对坐标来进行描述,通常,视口坐标是按照像素的方式取值的。
渲染流水线:在使用Direct3D来进行转换坐标系时,用户只需要提供描述系统转换的完整转换矩阵,通过IDirect3DDevice->SetTransform方法来实现相应的变换。
渲染流水线的步骤:世界变换,视图变换,投影变换,视口变换,光栅化1.世界变换:2.视图变换:设置视图变换:3.投影变换:正交投影:透视投影:顶点从均匀化为非均匀。
4.视口变换:5.光栅化像素和分辨率的区别:像素:是构成影像的最小单位,在屏幕上通常是单个的染色点。
越高位的像素,其颜色越丰富。
分辨率:是指显示器显示像素的多少。
分辨率越大,显示的像素就越多,画面就越精细。
Com和Hal的区别:Com:组建对象模型。
一种面向对象的编程模式。
它定义了对象在单个应用程序内部或多个应用程序之间的行为方式。
Hal:是硬件抽象层。
主要是对一些硬件设施进行移植。
纹理位图:是一个二维数组,数组中的每一项都是一个颜色数值,又称为纹理元素(texel)。
Direct3D纹理就是位图,常见的后缀名为bmp,dds,dib,hdr,jpg,pfm,png,ppm,tga的图形文件都可以用作纹理位图。
纹理越小越好。
纹理映射:在3D图元上应用纹理时,需要首先将纹理元素地址转换为对象坐标,然后再将对象坐标转为屏幕坐标(像素位置)。
把纹理元素从纹理空间应用到物体上的过程就称为纹理映射。
标准纹理绘制过程分为五步:●载入纹理(创建文理)●分配纹理顶点坐标●设置当前渲染纹理●设置纹理渲染状态●渲染顶点缓冲区纹理过滤(Texture Filtering),是屏幕上的每一个像素从物体的多边形表面获得相应颜色值的过程。
常用的纹理过滤类型有:缩小过滤(MinFilter),放大过滤(MagFilter)和多纹理过滤(MipFilter)。
纹理过滤的方式有两种:在某个纹理级别内和在多个多纹理级别之间。
常用的采样方式有4种:最近点采样,线性纹理过滤,各向异性纹理过滤,多级渐进纹理过滤。
Direct3D定义了5种纹理寻址模式(Texture Address Mode): 包装纹理寻址(Wrap Texture Address Mode)镜像纹理寻址(Mirror Texture Address Mode)夹取纹理寻址(Clamp Texture Address Mode)边框颜色纹理寻址(Border Color Texture Address Mode) 一次镜像纹理寻址(D3DTADDRESS_MIRRORONCE)光照可以分为下列的模型:1.环境光(Ambient Light)2. 漫反射(Diffuse Reflection)3.镜面发射(Specular Reflection)光源类型:点光源(D3DLIGHT_POINT)聚光灯(D3DLIGHT_SPOT)方向光(D3DLIGHT_DIRECTIONAL)原色称为第一次色,即红、黄、蓝三色。
间色称为第二次颜色,即橙、绿、紫三色。
复色称为第三色,是由两个间色或三个原色混合而成。