DX复习文档
2011年12月19日
[b]1>线性代数基础[/b]
1)坐标系:Direct 3D中的默认坐标系是“左手坐标系”,而3DMax中是右手坐标系。
2)向量:(方向+长度(模),矢量)
(1):特殊向量---零向量(起点跟终点重合的向量,所以它的方向不确定)
(2):向量运算:
单位向量:模为1的向量。常常在一个向量符号上加一个“^”来表示单位向量。
向量加法:相加的两个向量必须要有相同的维数。
向量减法:相减的两个向量必须要有相同的维数。u - v:返回一个从向量v的头部到向量u的头部
的向量。
向量数乘:ku(k为标量) k>0,ku与u同向;k0,两向量之间夹角小于90度;
u。v右下)元素全为1,其余全为0.
(3):矩阵运算:
矩阵相等:两个矩阵具有相同维数且元素都相等。具有相同维数的矩阵称为同型矩阵。
矩阵加法:两个相同维数的矩阵之间进行,等位元素相加。
矩阵减法:两个相同维数的矩阵之间进行,等位元素相减。
矩阵数乘:矩阵中每个元素都乘标量。
矩阵乘法:AB,矩阵A的列数必须跟矩阵B的行数相等,如:A是一个m x n的矩阵,
B是一个n x p的矩阵,则得到一个m x p的新矩阵。
注:矩阵乘法通常不满足交换律(一个方形矩阵(行数、列数相等)跟它的通行矩阵就满足)
矩阵转置:交换矩阵的行和列。
逆矩阵:矩阵没法除法,但可以有逆操作。
注:只有方形矩阵有逆矩阵(并不是所有的方形矩阵都有逆矩阵);
一个矩阵与它的逆矩阵相乘结果是一个单位矩阵。
4)复数(i;i的平方 = -1) z = a+b*i; a:实部,b:虚部
5)四元数:一个实部,3个虚部的复数。 q = q0+q1*i + q2*j + q3*k; i = (1,0,0) j = (0,1,0,) k = (0,0,1)
2>DX基础
1)COM(组件对象模型) 优点:
(1)跨平台,与编程语言无关。
(2)COM只能通过接口来访问,不能直接访问数据成员,保证安全性。
(3)COM接口永远不会改变。
2)COM的创建:
Com对象接口跟C++类对象的很大区别在于它们生存周期不同,C++类对象由new、delete来决定,
Com对象接口通过控制它的引用计数器来决定。
3)HAL与REF
HAL:硬件抽象层,使DX开发独立于硬件设备;REF;:参考光栅器,为了在不支持DX的硬件设备上测试DX函数,提供REF设备来进行软件模拟。缺点:运行速度慢,REF设备除了测试没别的用。
4)图形渲染管线(大部分时间就是在进行坐标转换)
一条渲染管线大致分为两个阶段:
1):坐标变换和光照(T&L),在此阶段,每个对象的坐标将变换到基于像素的屏幕空间
流程图:非T&L顶点-->本地空间--->世界空间---->视图空间--->拣选--->光照-->裁剪-->投影变换-->
视口变换-->T&L顶点
2):光栅化阶段:将渲染结果显示到屏幕上。
一条渲染管线具体包括:应用程序阶段(碰撞检测、加速算法...)+几何阶段(逐顶点、逐像素渲染)
+光栅化阶段(目的:每个像素正确配色以便正确渲染画面)
5)主要的空间转换定义及作用:
(1)世界变换(渲染管线的第一步就是将物体从本地空间变换到世界空间);作用:主要完成模型的平移、缩放、旋转... g_pDevice->SetTransform(D3DTS_WORLD,&matWorld);
(2)视图变换(将摄像机平移到世界空间坐标系原点并把正方向跟Z轴正方向相同,此时世界空间中的所有物体都将随着摄像机的变换做相同变换)
(3)投影变换(将摄像机观察到的三维景象显示在二维平面上,这种三维到二维的变换就是投影变换),包含正交平行投影和透视投影。
(4)视口投影(通过定义屏幕显示区域的实际宽、高等参数,将顶点从投影坐标变换为最终显示的以像素为单位的屏幕坐标)
6)纹理过滤和纹理采样
纹理过滤:放大过滤(当较小纹理映射到较大的平面上时,纹理元素被放大,像素块化,采用放大过滤
可以稍作改善)。
缩小过滤(当较大的纹理映射到较小的平面上时,纹理元素被缩小,纹理变模糊,采用缩小过滤
可以稍作改善)。
多纹理过滤(利用多种纹理级别来提高图形质量) 注:DX最多支持8层多重纹理贴图(0---7)。
纹理采样:(决定在纹理映射时,某个像素点从纹理元素中获取信息的方式)
最近点采样、线性纹理过滤(目前应用最广泛)、各向异性过滤、多级渐进纹理过滤
7)纹理寻址和纹理包装
纹理寻址:(纹理坐标一般是(0--1),除了这个范围的部分,就需要纹理寻址),5种纹理寻址模式:
1:包装纹理寻址(dx默认的纹理寻址模式),在每个整数连接点处重复纹理操作,(0.0,0.0),
(0.0,3.0),(3.0,,3.0),(3.0,0.0) D3DTADDRESS_WARP
2:镜像纹理寻址:对每个整数连接点处得纹理进行了镜像处理,也就是对纹理自动复制
并翻转。D3DTADDRESS_MIRROR
3:夹取纹理寻址:将纹理边缘的颜色像素进行延伸 D3DTADDRESS_CLAMP
4:边框颜色纹理寻址:用设置的边框颜色填充超出部分 D3DTADDRESS_BORDERCOLOR
5:一次镜像纹理寻址.纹理取值在-1.0 -- 1.0范围内的做镜像,该范围外的使用夹取
模式 D3DTADDRESS_MIRRORONCE
纹理包装:如何在纹理坐标之间做插值运算。使用纹理包装之后,纹理坐标被限定在(0.0 --- 1.0)之间,
超出范围的部分视为无效值,因此纹理包装跟纹理寻址不能同时使用。
8)摄像机基础:
(1):静态摄像机 D3DXMatrixLookAtLH用来生成摄像机的视图变换矩阵,
函数D3DXMatrixPerspectiveFovLH用来生成摄像机的投影变换矩阵。
(2):平移变换 :将摄像机的位置移到世界空间的坐标原点;
旋转变换:摄像机视点朝向跟世界坐标系Z轴正方向重合,摄像机正方向跟世界坐标系的y轴
正方向重合,摄像机的右方向跟世界坐标系的x轴正方向重合。
注:求摄像机的旋转矩阵即求摄像机的逆矩阵。
(3):视图矩阵:将摄像机平移矩阵跟旋转矩阵进行矩阵乘法就得到视图矩阵。
(4):投影变换:正交平行投影和透视投影。
9)场景管理:
(1):室内场景管理
BSP(通过将场景中的物体有序化,从观察点出发检索BSP,获取以Z坐标为关键码的三角形存储表)
Portal
(2):室外场景管理
四叉树LOD技术:利用四叉树对二维地平面进行分割,每次将正方形分割为4个等分的正方形,
直至分割的正方形大小达到某个预定值,才对每个正方形进行三角形剖分渲染。在渲染时
通过视域评价系数,剔除一些三角形,从而减少场景中待渲染的三角形,提高渲染效率。
ROAM技术(二叉三角形树BTT):BTT的核心几何图元是三角形,而四叉树处理的是矩形。
2011年12月19日
[b]1>线性代数基础[/b]
1)坐标系:Direct 3D中的默认坐标系是“左手坐标系”,而3DMax中是右手坐标系。
2)向量:(方向+长度(模),矢量)
(1):特殊向量---零向量(起点跟终点重合的向量,所以它的方向不确定)
(2):向量运算:
单位向量:模为1的向量。常常在一个向量符号上加一个“^”来表示单位向量。
向量加法:相加的两个向量必须要有相同的维数。
向量减法:相减的两个向量必须要有相同的维数。u - v:返回一个从向量v的头部到向量u的头部
的向量。
向量数乘:ku(k为标量) k>0,ku与u同向;k0,两向量之间夹角小于90度;
u。v右下)元素全为1,其余全为0.
(3):矩阵运算:
矩阵相等:两个矩阵具有相同维数且元素都相等。具有相同维数的矩阵称为同型矩阵。
矩阵加法:两个相同维数的矩阵之间进行,等位元素相加。
矩阵减法:两个相同维数的矩阵之间进行,等位元素相减。
矩阵数乘:矩阵中每个元素都乘标量。
矩阵乘法:AB,矩阵A的列数必须跟矩阵B的行数相等,如:A是一个m x n的矩阵,
B是一个n x p的矩阵,则得到一个m x p的新矩阵。
注:矩阵乘法通常不满足交换律(一个方形矩阵(行数、列数相等)跟它的通行矩阵就满足)
矩阵转置:交换矩阵的行和列。
逆矩阵:矩阵没法除法,但可以有逆操作。
注:只有方形矩阵有逆矩阵(并不是所有的方形矩阵都有逆矩阵);
一个矩阵与它的逆矩阵相乘结果是一个单位矩阵。
4)复数(i;i的平方 = -1) z = a+b*i; a:实部,b:虚部
5)四元数:一个实部,3个虚部的复数。 q = q0+q1*i + q2*j + q3*k; i = (1,0,0) j = (0,1,0,) k = (0,0,1)
2>DX基础
1)COM(组件对象模型) 优点:
(1)跨平台,与编程语言无关。
(2)COM只能通过接口来访问,不能直接访问数据成员,保证安全性。
(3)COM接口永远不会改变。
2)COM的创建:
Com对象接口跟C++类对象的很大区别在于它们生存周期不同,C++类对象由new、delete来决定,
Com对象接口通过控制它的引用计数器来决定。
3)HAL与REF
HAL:硬件抽象层,使DX开发独立于硬件设备;REF;:参考光栅器,为了在不支持DX的硬件设备上测试DX函数,提供REF设备来进行软件模拟。缺点:运行速度慢,REF设备除了测试没别的用。
4)图形渲染管线(大部分时间就是在进行坐标转换)
一条渲染管线大致分为两个阶段:
1):坐标变换和光照(T&L),在此阶段,每个对象的坐标将变换到基于像素的屏幕空间
流程图:非T&L顶点-->本地空间--->世界空间---->视图空间--->拣选--->光照-->裁剪-->投影变换-->
视口变换-->T&L顶点
2):光栅化阶段:将渲染结果显示到屏幕上。
一条渲染管线具体包括:应用程序阶段(碰撞检测、加速算法...)+几何阶段(逐顶点、逐像素渲染)
+光栅化阶段(目的:每个像素正确配色以便正确渲染画面)
5)主要的空间转换定义及作用:
(1)世界变换(渲染管线的第一步就是将物体从本地空间变换到世界空间);作用:主要完成模型的平移、缩放、旋转... g_pDevice->SetTransform(D3DTS_WORLD,&matWorld);
(2)视图变换(将摄像机平移到世界空间坐标系原点并把正方向跟Z轴正方向相同,此时世界空间中的所有物体都将随着摄像机的变换做相同变换)
(3)投影变换(将摄像机观察到的三维景象显示在二维平面上,这种三维到二维的变换就是投影变换),包含正交平行投影和透视投影。
(4)视口投影(通过定义屏幕显示区域的实际宽、高等参数,将顶点从投影坐标变换为最终显示的以像素为单位的屏幕坐标)
6)纹理过滤和纹理采样
纹理过滤:放大过滤(当较小纹理映射到较大的平面上时,纹理元素被放大,像素块化,采用放大过滤
可以稍作改善)。
缩小过滤(当较大的纹理映射到较小的平面上时,纹理元素被缩小,纹理变模糊,采用缩小过滤
可以稍作改善)。
多纹理过滤(利用多种纹理级别来提高图形质量) 注:DX最多支持8层多重纹理贴图(0---7)。
纹理采样:(决定在纹理映射时,某个像素点从纹理元素中获取信息的方式)
最近点采样、线性纹理过滤(目前应用最广泛)、各向异性过滤、多级渐进纹理过滤
7)纹理寻址和纹理包装
纹理寻址:(纹理坐标一般是(0--1),除了这个范围的部分,就需要纹理寻址),5种纹理寻址模式:
1:包装纹理寻址(dx默认的纹理寻址模式),在每个整数连接点处重复纹理操作,(0.0,0.0),
(0.0,3.0),(3.0,,3.0),(3.0,0.0) D3DTADDRESS_WARP
2:镜像纹理寻址:对每个整数连接点处得纹理进行了镜像处理,也就是对纹理自动复制
并翻转。D3DTADDRESS_MIRROR
3:夹取纹理寻址:将纹理边缘的颜色像素进行延伸 D3DTADDRESS_CLAMP
4:边框颜色纹理寻址:用设置的边框颜色填充超出部分 D3DTADDRESS_BORDERCOLOR
5:一次镜像纹理寻址.纹理取值在-1.0 -- 1.0范围内的做镜像,该范围外的使用夹取
模式 D3DTADDRESS_MIRRORONCE
纹理包装:如何在纹理坐标之间做插值运算。使用纹理包装之后,纹理坐标被限定在(0.0 --- 1.0)之间,
超出范围的部分视为无效值,因此纹理包装跟纹理寻址不能同时使用。
8)摄像机基础:
(1):静态摄像机 D3DXMatrixLookAtLH用来生成摄像机的视图变换矩阵,
函数D3DXMatrixPerspectiveFovLH用来生成摄像机的投影变换矩阵。
(2):平移变换 :将摄像机的位置移到世界空间的坐标原点;
旋转变换:摄像机视点朝向跟世界坐标系Z轴正方向重合,摄像机正方向跟世界坐标系的y轴
正方向重合,摄像机的右方向跟世界坐标系的x轴正方向重合。
注:求摄像机的旋转矩阵即求摄像机的逆矩阵。
(3):视图矩阵:将摄像机平移矩阵跟旋转矩阵进行矩阵乘法就得到视图矩阵。
(4):投影变换:正交平行投影和透视投影。
9)场景管理:
(1):室内场景管理
BSP(通过将场景中的物体有序化,从观察点出发检索BSP,获取以Z坐标为关键码的三角形存储表)
Portal
(2):室外场景管理
四叉树LOD技术:利用四叉树对二维地平面进行分割,每次将正方形分割为4个等分的正方形,
直至分割的正方形大小达到某个预定值,才对每个正方形进行三角形剖分渲染。在渲染时
通过视域评价系数,剔除一些三角形,从而减少场景中待渲染的三角形,提高渲染效率。
ROAM技术(二叉三角形树BTT):BTT的核心几何图元是三角形,而四叉树处理的是矩形。