1 / 14
文档名称:

游戏开发实验7.doc

格式:doc   页数:14页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

游戏开发实验7.doc

上传人:yzhlyb 2016/7/4 文件大小:0 KB

下载得到文件列表

游戏开发实验7.doc

相关文档

文档介绍

文档介绍:实验七:广告板技术一、实验目的掌握广告板技术的原理, 熟悉广告板技术使用方法. 二、实验仪器 Visual Studio 2005 三、实验原理及过程// 网上检索广告板技术相关知识 Billboard 理解与实现 Billboard 是一项使用非常普遍的技术,很多一些绚丽的特效可以使用它来实现,当然公告板、姓名板等是它较早的用途。 Billboard 的主要思想是在 XY 平面上建立一个绘图区域,在此区域上渲染一张贴图的一个区域,并且此平面要一直面向摄像机。 Billboard 的主要实现: 的绘制区域是建立在自身坐标系的 XY平面上,绘制区域的正面朝向为自身坐标系的 Z 轴的方向。由于 Billboard 需要朝向摄像机,所以 Billboard 在构造渲染顶点数据的时候需要将原始的 Billboard 绘制区域的左右对调后再填充定点数据( 即原来的区域 left 与 right) 。 朝向问题: Billboard 需要一直朝向摄像机,即通过 Yaw\Picth\roll (由于旋转是相对于 Billboard 自身坐标系,所以 Yaw\Picth\roll 分别对应 Y\X\Z )三次旋转后达到 billboard 永远朝向摄像机的目的。一般程序实现分两种,固定 Yaw 轴(Billboard 的上方向不变)与不固定 Yaw 轴。固定 Yaw 轴的 Billboard 旋转的时候要使 Yaw 轴保持固定所以不能进行 Picth 和Roll 旋转, 只需要沿 Yaw 轴旋转。固定 Yaw 轴的 Billboard 需要三次旋转 Billboard 旋转 D3D 代码: //由于 Billboard 的旋转是按自身坐标系旋转,所以 up/right/foward 分别对应 Y/X/Z 轴//首先得到 billboard 应该被设置成的朝向向量即摄像机的朝向向量的反方向 D3DXVECTOR3 lookAt(, , ); lookAt =-pCam->GetDirection(); //再得到 lookAt 投影到 XZ平面上的向量,用于计算 Pitch 值(相当于沿 X方向旋转的角度) D3DXVECTOR3 adjustLookAt =lookAt; =; //必须要将向量变为单位向量 D3DXVec3Normalize(&lookAt, &lookAt); D3DXVec3Normalize(&adjustLookAt, &adjustLookAt); D3DXMATRIX rm_x;// 沿X轴的旋转矩阵 D3DXMATRIX rm_z;// 沿Y轴的旋转矩阵 D3DXMatrixIdentity(&rm_z); //如果摄像机的上方向的Y值小于0则需要将Billboar d的up方向向反方向调换一下 if(pCam &&pCam->GetUp().y <) D3DXMatrixRotationAxis(&rm_z, &D3DXVECTOR3(, , ), D3DX_PI); //Billboard 朝向与 XZ平面的夹角 dot =D3DXVec3Dot(&adjustLookAt, &lookAt); //如果 Billboard 朝向是沿 Y轴向下则绕 X轴正向旋转,否则沿 X轴反向旋转, //左手坐标系下的旋转符合左手定则,比划一下就能知道为什么 if( <=0) D3DXMatrixRotationAxis(&rm_x, &D3DXVECTOR3(, , ), acos(dot)); else D3DXMatrixRotationAxis(&rm_x, &D3DXVECTOR3(-, , ), acos(dot)); rm_x =rm_z *rm_x; D3DXMATRIX rm_y;// 绕Y轴旋转的矩阵//旋转的角度为 Billboard 朝向与 Billboard 原始朝向的夹角 dot =D3DXVec3Dot(&D3DXVECTOR3(, , ), &adjustLookAt); //根据Billboar d朝向方向是偏X轴的正方向还是反方向决定绕Y轴的正方向或反方向//同样用左手比划一下就知道为什么 if( <=0) D3DXMatrixRotationAxis(&rm_y, &D3DXVECTOR3(, -, ), acos(dot)); else D3DXMatrixRotationAxis(&rm_y, &D3D