资源描述:
《游戏开发实验7》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、实验七:广告板技术一、实验目的掌握广告板技术的原理,熟悉广告板技术使用方法.二、实验仪器VisualStudio2005三、实验原理及过程//网上检索广告板技术相关知识Billboard理解与实现Billboard是一项使用非常普遍的技术,很多一些绚丽的特效可以使用它来实现,当然公告板、姓名板等是它较早的用途。Billboard的主要思想是在XY平面上建立一个绘图区域,在此区域上渲染一张贴图的一个区域,并且此平面要一直面向摄像机。Billboard的主要实现:1.Billboard的绘制区域是建立在自身坐标系的XY平面上,绘制区域的
2、正面朝向为自身坐标系的Z轴的方向。由于Billboard需要朝向摄像机,所以Billboard在构造渲染顶点数据的时候需要将原始的Billboard绘制区域的左右对调后再填充定点数据(即原来的区域left与right)。2.Billboard朝向问题:Billboard需要一直朝向摄像机,即通过YawPicthroll(由于旋转是相对于Billboard自身坐标系,所以YawPicthroll分别对应YXZ)三次旋转后达到billboard永远朝向摄像机的目的。一般程序实现分两种,固定Yaw轴(Billboard的上方向
3、不变)与不固定Yaw轴。固定Yaw轴的Billboard旋转的时候要使Yaw轴保持固定所以不能进行Picth和Roll旋转,只需要沿Yaw轴旋转。固定Yaw轴的Billboard需要三次旋转Billboard旋转D3D代码://由于Billboard的旋转是按自身坐标系旋转,所以up/right/foward分别对应Y/X/Z轴//首先得到billboard应该被设置成的朝向向量即摄像机的朝向向量的反方向D3DXVECTOR3lookAt(0.0f,0.0f,1.0f);lookAt=-pCam->GetDirection();//
4、再得到lookAt投影到XZ平面上的向量,用于计算Pitch值(相当于沿X方向旋转的角度)D3DXVECTOR3adjustLookAt=lookAt;adjustLookAt.y=0.0f;//必须要将向量变为单位向量D3DXVec3Normalize(&lookAt,&lookAt);D3DXVec3Normalize(&adjustLookAt,&adjustLookAt);D3DXMATRIXrm_x;//沿X轴的旋转矩阵D3DXMATRIXrm_z;//沿Y轴的旋转矩阵D3DXMatrixIdentity(&rm_z);/
5、/如果摄像机的上方向的Y值小于0则需要将Billboard的up方向向反方向调换一下if(pCam&&pCam->GetUp().y<0.0f)D3DXMatrixRotationAxis(&rm_z,&D3DXVECTOR3(0.0f,0.0f,1.0f),D3DX_PI);//Billboard朝向与XZ平面的夹角dot=D3DXVec3Dot(&adjustLookAt,&lookAt);//如果Billboard朝向是沿Y轴向下则绕X轴正向旋转,否则沿X轴反向旋转,//左手坐标系下的旋转符合左手定则,比划一下就能知道为什么i
6、f(lookAt.y<=0)D3DXMatrixRotationAxis(&rm_x,&D3DXVECTOR3(1.0f,0.0f,0.0f),acos(dot));elseD3DXMatrixRotationAxis(&rm_x,&D3DXVECTOR3(-1.0f,0.0f,0.0f),acos(dot));rm_x=rm_z*rm_x;D3DXMATRIXrm_y;//绕Y轴旋转的矩阵//旋转的角度为Billboard朝向与Billboard原始朝向的夹角dot=D3DXVec3Dot(&D3DXVECTOR3(0.0f,0.
7、0f,1.0f),&adjustLookAt);//根据Billboard朝向方向是偏X轴的正方向还是反方向决定绕Y轴的正方向或反方向//同样用左手比划一下就知道为什么if(adjustLookAt.x<=0)D3DXMatrixRotationAxis(&rm_y,&D3DXVECTOR3(0.0f,-1.0f,0.0f),acos(dot));elseD3DXMatrixRotationAxis(&rm_y,&D3DXVECTOR3(0.0f,1.0f,0.0f),acos(dot));3.Billboard渲染时需要根据使用情
8、况决定是否需要开启灯光渲染。Billboard的实现步骤:一:定义广告版矩形顶点结构和顶点格式二:创建广告版矩形和纹理对象三:接下来就是设置一些Alpha混合系数四:根据观察的方向来广告版矩阵,通过旋转矩阵对象使它面向观察者。//利用