Direct3D编程基础期末考试模拟试卷_第1页
Direct3D编程基础期末考试模拟试卷_第2页
Direct3D编程基础期末考试模拟试卷_第3页
Direct3D编程基础期末考试模拟试卷_第4页
Direct3D编程基础期末考试模拟试卷_第5页
已阅读5页,还剩1页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Direct3D编基础期末考试模拟试卷新一个的目,在项目中添加一.h文,在头文件中包含所需要的头文件和库文件分)在目中添加一个文cpp文首先要包含上一步的h文件,然后在cpp文件中添加一个Win32的函数。分在函数中创建一个窗体,并显示窗体的消息循环和消息处理函数(5分修相应的项目属性设置,能够成功运行并显示窗体分5.定义于Direct3D渲的对象和设备,并实现创建它们(10分在息循环的中实现渲。分定Direct3D的点结构体和格式(5分定用于保存顶点数据的顶点缓冲区和纹理对象,并初始化它们(10分实顶点和纹理的渲染(5分10.定义矩阵实本地坐标到世界坐标系转换,再到观察坐标系转换,最后实现投转换。(15分以上流程代码从文档下方的程序段中复制。11.修改顶点坐设计出如下一个形状(5分12.将给定图片中的纹理贴到到三个面上(513.使用如下给函数,实现该形状沿Z轴不停的旋转,并且在旋转过程中能慢慢缩小,当缩小到原来大小1/2时,再慢慢放大到原来大小,如此复缩放(20分D3DXMatrixRotationZ//沿Z轴转D3DXMatrixScaling//缩放矩阵14.最终程序可运行,并达到题目要求(10分提供如下程序段:程序段#pragma#include<windows.h>//windows扩库数的头文件#include<windowsx.h>//D3D的文件#include<d3d9.h>#include<d3dx9.h>//引D3D的文件#pragmacomment(lib,"d3d9.lib")#pragmacomment(lib,"d3dx9.lib")#pragmacomment(lib,"winmm.lib")//释对象的宏#defineSAFE_DELETE(p){if{deletep;p=NULL;}}//释设备对象的宏#defineSAFE_RELEASE(p){if(p)p->Release();p=NULL;}}//按状态检测的宏#defineKEYDOWN(vk_code)((GetAsyncKeyState(vk_code)&0x8000)?1:0)

#define((GetAsyncKeyState(vk_code)&0x8000)?0:程序段LPDIRECT3D9m_pD3D;//Direct3D对指针LPDIRECT3DDEVICE9m_pD3DDevice;//Direct3D的设备程序段LPDIRECT3DVERTEXBUFFER9m_pVB;//D3D顶缓冲LPDIRECT3DTEXTURE9m_pTexture;//D3D纹程序段LRESULTCALLBACK回调函数自调用的函数WinProc(HWND//窗体的柄UINTmessage,消的类型WPARAMwParam,LPARAMlParam消息的参数){switch(message){case窗关闭PostQuitMessage(0);程结束break;case按消息switch(wParam){caseVK_ESCAPE:当下ESC键时候触发关闭窗口的消息PostMessage(hWnd,WM_CLOSE,0,0);break;}break;}returnDefWindowProc(hWnd,message,wParam,lParam);}程序段//--创D3D象=Direct3DCreate9(D3D_SDK_VERSION);D3DDISPLAYMODEd3ddm;//--定一个保存当前适配器属性的结构//--获当前适配器的显示模式m_pD3D->GetAdapterDisplayMode(D3DADAPTER_DEFAULT,&d3ddm);//--设传递给LPDIRECT3D9::CreateDevice的参数D3DPRESENT_PARAMETERSd3dpp;ZeroMemory(&d3dpp,sizeof(d3dpp));//--把构体清空//d3dpp.Windowed=FALSE;指不是窗口模而全局独占模式d3dpp.WindowedTRUE;d3dpp.SwapEffect=D3DSWAPEFFECT_DISCARD;//--设换页效果为丢弃后台缓存

d3dpp.BackBufferFormat=d3ddm.Format;色深度为桌面的色彩深度d3dpp.BackBufferWidth=d3ddm.Width;//--后冲宽度d3dpp.BackBufferHeight=d3ddm.Height;//--后缓冲高度d3dpp.FullScreen_RefreshRateInHz=D3DPRESENT_RATE_DEFAULT;幕刷新率d3dpp.PresentationInterval=D3DPRESENT_INTERVAL_ONE;翻模d3dpp.AutoDepthStencilFormatD3DFMT_D16;d3dpp.EnableAutoDepthStenciltrue;m_pD3D->CreateDevice(D3DADAPTER_DEFAULT,//--使用当前显作注设备D3DDEVTYPE_HAL,//--硬抽象层设备hWnd,//--窗句柄D3DCREATE_SOFTWARE_VERTEXPROCESSING,//--用件的方法处理//--顶数据参数若为则使用硬件&d3dpp,&m_pD3DDevice);程序段//定用于观察世界坐系转换的矩阵变量worldMatrix;//生平移矩阵D3DXMatrixTranslation(&worldMatrix,0.0f0.0f0.0f);//世坐标系转换矩阵效m_pD3DDevice->SetTransform(D3DTS_WORLD,&worldMatrix);//定用于定位虚拟摄机的向量D3DXVECTOR3position(0.0f,0.0f,-2.0f);摄像机位置D3DXVECTOR3targetPoint(0.0f,0.0f,-1.0f);//摄机视口位置D3DXVECTOR3upway(0.0f,1.0f,0.0f);//摄机向上的方//定用于观察坐标系换的矩阵变量viewMatrix;//根摄像机位置生成阵的值D3DXMatrixLookAtLH(&viewMatrix,&position&targetPoint,&upway);//让察矩阵生效m_pD3DDevice->SetTransform(D3DTS_VIEW,&viewMatrix);//定用于投影坐标系换的矩阵变量projMatrix;//根参数生成矩阵的D3DXMatrixPerspectiveFovLH(&projMatrix,生的投影矩阵D3DX_PI*0.25f,//视角的弧度800.0f/600.0f,//幕的宽高比例0.1f,要投影的最近距离1000.0f);//要投影的最远距离//让影矩阵生效m_pD3DDevice->SetTransform(D3DTS_PROJECTION,&projMatrix);投影矩阵生效//关灯光m_pD3DDevice->SetRenderState(D3DRS_LIGHTING,FALSE);//关背景消隐

m_pD3DDevice->SetRenderState(D3DRS_CULLMODE,D3DCULL_NONE);程序段//win32的函数intWINAPIWinMain(HINSTANCEhInstance,HINSTANCEhPrevInstance,LPSTRlpCmLine,intnCmdShow){return}程序段wc;//定窗口信的结构体//初化窗体信息的结wc.cbClsExtra=0;附内存空间wc.cbWndExtra0;//附加内存空间wc.hbrBackground=(HBRUSH)GetStockObject(BLACK_BRUSH);背景刷wc.hCursor//设置窗口鼠标的状wc.hIcon//窗口的图标wc.hInstancehInstance;窗口的实例化句柄//wc.lpfnWndProc=DefWindowProc;//默的消息处理函数wc.lpfnWndProc=WinProc;wc.lpszClassName="mywindow";窗名称它名必须和下面的窗类名一模一样wc.lpszMenuName=//窗菜单wc.style=|;支持水平和垂直重绘RegisterClass(&wc);//注册窗口HWNDhWnd;//窗体句intposy;posx=(GetSystemMetrics(SM_CXSCREEN)-800)/2;屏宽度posy(GetSystemMetrics(SM_CYSCREEN)-600)/2;屏高度=CreateWindow("mywindow",//窗口类名必和上面的窗体名称一模一样"windowtile",//口的标题//窗的风格posx,窗体左上角相对于屏幕的X坐posy,窗体左上角相对于屏幕的Y坐标800,600,窗体的宽度和高度NULL,//父口句柄NULL,//窗菜单句柄hInstance,实例句柄NULL);附加信息ShowWindow(hWnd,SW_SHOWNORMAL);正常显示窗口//窗的消息循环MSGmsg;while(true){

if(PeekMessage(&msg,NULL,0U,0U,PM_REMOVE))//接系统信(为类的信息结构体是窗口句柄,,是表示接受所有窗口的消息{if(msg.messagebreak;TranslateMessage(&msg);把盘等码转换为系统识别的虚拟键码信息DispatchMessage(&msg);//转消息的回调函数处理消息}}程序段//定四个顶点TexVertexv[]={{-0.5f,0.5f,0.0f,0.0f,0.0f},{0.5f,0.5f,0.0f,1.0f,0.0f},{-0.5f,-0.5f,0.0f,0.0f,1.0f},{0.5f,-0.5f,0.0f,1.0f,1.0f},};//创顶点缓冲区m_pD3DDevice->CreateVertexBuffer(sizeof(v)////缓冲区大小,D3DUSAGE_WRITEONLY//使用标志,TexVertexFVF//顶格内管理方式,&m_pVB顶缓冲区,0);//将点数据存入顶点冲区中TexVertex*pTemp;//锁顶点m_pVB->Lock(0,0,(void**)&pTemp,0);//复数据memcpy(pTemp,v,sizeof(v));//解m_pVB->Unlock();//读纹理D3DXCreateTextureFromFile(m_pD3DDevice,"pic/pic.jpg",&m_pTexture);程序段10//定顶点结构体structTexVertex{floatx,y,z;//顶坐标floatu,v;//纹理坐标};//定顶点格式说明的

#defineTexVertexFVFD3DFVF_XYZ|D3DFVF_TEX1程序段11m_pD3DDevice->SetFVF(TexVertexFVF);//置顶点格式//设顶点来源m_pD3DDevice->SetStreamSource(0,m_pVB//顶点缓冲区,0顶格大小//设纹理m_pD3DDevice->SetTexture(0,m_pTexture);//画m_pD3DDevice->DrawPrimitiv

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论