




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、武汉纺织大学Direct3D图形编程上机实验报告题目:模板(2)成 绩:学号:1604240705姓名:胡莲班级:计算机11603指导教师:李敏报告日期:2019年4月26日一、 实验1(1)题目绘制一个正方形,用ice.bmp对正方形做纹理映射;在正方形前绘制一个黄色茶壶并绘制茶壶在正方形中的镜像;通过模板缓存控制茶壶镜像只出现在镜子区域内;通过VK_LEFT , VK_RIGHT , VK_UP和VK_DOWN按键来调整茶壶在 X轴和Y轴的位置,具体如下:1 VK_LEFT : x轴上的值减少;2 VK_RIGHT : x轴上的值增加;3 VK_UP : y轴上的值增加;4 VK_DOWN
2、 : y轴上的值减少。(2)实现代码在d3dmit程序框架上修改代码:1)全局变量:IDirect3DDevice9* Device = 0;IDirect3DVertexBuffer9 * VB=0;IDirect3DTexture9 * Tex=0;D3DMATERIAL9 mtrl;ID3DXMesh* Teapot=0;D3DMATERIAL9 TeapotMtrl;D3DXVECTOR3 TeapotPos(0.0f, 0.0f, -5.0f);2)定义灵活顶点格式:struct VertexVertex()Vertex( float x, float y, float z, flo
3、at nx, float ny, float nz, float u, float v)_x = x; _y = y; _z = z; _nx = nx; _ny = ny; _nz = nz; _u = u; _v = v;float _x, _y, _z;float nx, ny, nz;float u,v;static const DWORD FVF;const DWORD Vertex:FVF = D3DFVF_XYZ | D3DFVF_NORMAL | D3DFVF_TEX1;3) Setup()函数:Device->CreateVertexBuffer(6 * sizeof
4、(Vertex),D3DUSAGE_WRITEONLY,Vertex:FVF,D3DPOOL_MANAGED,&VB,0);Vertex* v;VB->Lock(0,0,( void *)&v,0);v0 = Vertex(-10.0f,-10.0f,0.0f,0.0f,0.0f,-1.0f,0.0f,1.0f);v1 = Vertex(-10.0f,10.0f,0.0f,0.0f,0.0f,-1.0f,0.0f,0.0f);v2 = Vertex(10.0f,10.0f,0.0f,0.0f,0.0f,-1.0f,1.0f,0.0f);v3 = Vertex(-10.0f
5、,-10.0f,0.0f,0.0f,0.0f,-1.0f,0.0f,1.0f);v4 = Vertex(10.0f,10.0f,0.0f,0.0f,0.0f,-1.0f,1.0f,0.0f);v5 = Vertex(10.0f,-10.0f,0.0f,0.0f,0.0f,-1.0f,1.0f,1.0f);VB->Unlock();mtrl = d3d:WHITE_MTRL;TeapotMtrl = d3d:YELLOW_MTRL;D3DXCreateTeapot(Device,&Teapot,0);D3DLIGHT9 dir;二ZeroMemory(&dir,sizeof
6、 (dir);dir.Type= D3DLIGHT DIRECTIONAL;dir.Diffuse = d3d:WHITE;dir.Specular = d3d:WHITE * 0.2f;dir.Ambient = d3d:WHITE * 0.6f;dir.Direction = D3DXVECTOR3(0.707f, 0.0f, 0.707f);Device->SetLight(0, &dir);Device->LightEnable(0, true );Device->SetRenderState(D3DRS_NORMALIZENORMALS,ue );D3DXC
7、reateTextureFromFile(Device,"ice.bmp",&Tex);Device->SetSamplerState(0,D3DSAMP MAGFILTER,D3DTEXF LINEAR);Device->SetSamplerState(0,D3DSAMP MINFILTER,D3DTEXF LINEAR);Device->SetSamplerState(0,D3DSAMP_MIPFILTER,D3DTEXF_POINT);D3DXMATRIX proj;D3DXMatrixPerspectiveFovLH(&proj,D
8、3DX_PI * 0.5f,(float )Width / ( float )Height,1.0f,1000.0f);Device -> SetTransform(D3DTS_PROJECTION, &proj);return true ;4) Cleanup。函数:d3d:Release<IDirect3DVertexBuffer9*>(VB);d3d:Release<IDirect3DTexture9*>(Tex);d3d:Release<ID3DXMesh*>(Teapot);5) Display。函数:Device->Clear
9、(0, 0, D3DCLEAR_TARGED3DCLEAR_ZBUFFER|D3DCLEAR_STENCIIflLffff,1.0f,0);Device->BeginScene();Device->SetRenderState(D3DRS_STENCILENABLEtrue );Device->SetRenderState(D3DRS_STENCILFUNC,D3DCMP_ALWAYS);Device->SetRenderState(D3DRS_STENCILREF,0x1);Device->SetRenderState(D3DRS_STENCILZFAIL,D3
10、DSTENCILOP_KEEP);Device->SetRenderState(D3DRS_STENCILFAIL,D3DSTENCILOP_KEEP);Device->SetRenderState(D3DRS_STENCILPASS,D3DSTENCILOP_REPLACE);D3DXMATRIX W;D3DXMatrixTranslation(&W,0.0f,0.0f,0.0f);Device->SetTransform(D3DTS_WORLD,&W);Device->SetStreamSource(0,VB,0, sizeof (Vertex);D
11、evice->SetFVF(Vertex:FVF);Device->SetMaterial(&mtrl);Device->SetTexture(0, tex);Device->DrawPrimitive(D3DPT_TRIANGLELIST,0,2);Device->SetRenderState(D3DRS_STENCILFUNC,D3DCMP_EQUAL);Device->SetRenderState(D3DRS_STENCILPASS,D3DSTENCILOP_KEEP);D3DXMatrixTranslation(&W,TeapotPo
12、s.x,TeapotPos.y,TeapotPos.z);D3DXMATRIX R,p;D3DXPLANE plane(0.0f,0.0f,1.0f,0.0f);D3DXMatrixReflect(&R,&plane);p = W * R;Device->SetTransform(D3DTS_WORLD,&p);Device->SetMaterial(&TeapotMtrl);Device->SetTexture(0, 0);Device->Clear(0,0,D3DCLEAR_ZBUFFER,0,1.0f,0);Device->S
13、etRenderState(D3DRS_ALPHABLENDENABLtEru,e );Device->SetRenderState(D3DRS_SRCBLEND,D3DBLEND_DESTCOLOR);Device->SetRenderState(D3DRS_DESTBLEND,D3DBLEND_ZERO);Device->SetRenderState(D3DRS_CULLMODE,D3DCULL_CW);Teapot->DrawSubset(0);Device->SetRenderState(D3DRS_ALPHABLENDENABLfEa,lse );Dev
14、ice->SetRenderState(D3DRS_STENCILENABLEf,alse );Device->SetRenderState(D3DRS_CULLMODE,D3DCULL_CCW);D3DXMatrixTranslation(&W,TeapotPos.x,TeapotPos.y,TeapotPos.z);Device->SetTransform(D3DTS_WORLD,&W);Device->SetMaterial(&TeapotMtrl);Device->SetTexture(0, 0);Teapot->DrawSu
15、bset(0);Device->EndScene();Device->Present(0, 0, 0, 0);6) WndProc()函数:case WM_KEYDOWN:if ( wParam = VK_ESCAPE ) 二DestroyWindow(hwnd);if ( wParam = VK_LEFT ) TeapotPos.x -= 0.1f;if ( wParam = VK_RIGHT )TeapotPos.x += 0.1f;if ( wParam = VK_UP )TeapotPos.y += 0.1f;if ( wParam = VK_DOWN ) TeapotPo
16、s.y -= 0.1f;break;(3)程序运行结果1)初始画面2)按下VK_LEFTt的画面3)按下VK_RIGHTf的画面4)按下VK_UPt的画面5)按下VK_DOW'/N的画面二、总结(1)问题:看不到茶壶镜像。解决方法:开启模板的代码要放在绘制镜子前,且模板的 比较代码要放在绘制镜子后、绘制镜像前。三、实验2(1)题目绘制一个正方体,用red.jpg, green.jpg和blue.jpg三个纹理文件对正方体的6个面做纹理映射,具体为:前面/后面(red),左面/右 面(green),上面/下面(blue);并且使得正方体绕Y轴连续旋转。(2)实现代码在d3dmit程序框架
17、上修改代码:1)全局变量:IDirect3DDevice9* Device = 0;IDirect3DVertexBuffer9* VB = 0;IDirect3DTexture9* tex1 = 0;IDirect3DTexture9* tex2 = 0;IDirect3DTexture9* tex3 = 0;2)定义灵活顶点格式:struct VertexVertex()Vertex( float x, float y, float z, float nx, float ny, float nz, float u, float v) _x = x; _y = y; _z = z; _nx
18、= nx; _ny = ny; _nz = nz; _u = u; _v = v;float _x, _y, _z;float nx, ny, nz;float _u,_v;static const DWORD FVF;const DWORD Vertex:FVF = D3DFVF_XYZ | D3DFVF_NORMAL | D3DFVF_TEX1;3) Setup()函数:Device->CreateVertexBuffer(36 * sizeof (Vertex),D3DUSAGE_WRITEONLY,Vertex:FVF,D3DPOOL_MANAGED,&VB,0);Ver
19、tex* v;VB->Lock(0,0,( void *)&v,0);/V0(-1,0,-1) V1(-1,0,1) V2(1,0,1) V3(1,0,-1)/V4(-1,1,-1) V5(-1,1,1) V6(1,1,1) V7(1,1,-1)v0 = Vertex(-1.0f,0.0f,-1.0f,0.0f,0.0f,-1.0f,0.0f,1.0f);v1 = Vertex(-1.0f,2.0f,-1.0f,0.0f,0.0f,-1.0f,0.0f,0.0f);v2 = Vertex(1.0f, 2.0f, -1.0f,0.0f,0.0f,-1.0f,1.0f,0.0f);v
20、3 = Vertex(-1.0f,0.0f,-1.0f,0.0f,0.0f,-1.0f,0.0f,1.0f);v4 = Vertex(1.0f, 2.0f, -1.0f,0.0f,0.0f,-1.0f,1.0f,0.0f);v5 = Vertex(1.0f,0.0f,-1.0f,0.0f,0.0f,-1.0f,1.0f,1.0f);v6 = Vertex(-1.0f,0.0f,1.0f,0.0f,0.0f,1.0f,0.0f,1.0f);v7 = Vertex(1.0f,2.0f,1.0f,0.0f,0.0f,1.0f,1.0f,0.0f);/ 前面 V0 V4 V7/V0 V7 V3/ 背面
21、 V1 V6 V5v8 = Vertex(-1.0f,2.0f,1.0f,0.0f,0.0f,1.0f,0.0f,0.0f);v9 = Vertex(-1.0f,0.0f,1.0f,0.0f,0.0f,1.0f,0.0f,1.0f);v10 = Vertex(1.0f,0.0f,1.0f,0.0f,0.0f,1.0f,1.0f,1.0f);v11 = Vertex(1.0f,2.0f,1.0f,0.0f,0.0f,1.0f,1.0f,0.0f);v12 = Vertex(1.0f,0.0f,-1.0f,1.0f,0.0f,0.0f,0.0f,1.0f);v13 = Vertex(1.0f,2.
22、0f, -1.0f,1.0f,0.0f,0.0f,0.0f,0.0f);v14 = Vertex(1.0f,2.0f,1.0f,1.0f,0.0f,0.0f,1.0f,0.0f);v15 = Vertex(1.0f,0.0f,-1.0f,1.0f,0.0f,0.0f,0.0f,1.0f);v16 = Vertex(1.0f,2.0f,1.0f,1.0f,0.0f,0.0f,1.0f,0.0f);v17 = Vertex(1.0f,0.0f,1.0f,1.0f,0.0f,0.0f,1.0f,1.0f);v18 = Vertex(-1.0f,0.0f,-1.0f,-1.0f,0.0f,0.0f,0
23、.0f,1.0f);v19 = Vertex(-1.0f,2.0f,1.0f,-1.0f,0.0f,0.0f,1.0f,0.0f);v20 = Vertex(-1.0f,2.0f,-1.0f,-1.0f,0.0f,0.0f,0.0f,0.0f);v21 = Vertex(-1.0f,0.0f,-1.0f,-1.0f,0.0f,0.0f,0.0f,1.0f);v22 = Vertex(-1.0f,0.0f,1.0f,-1.0f,0.0f,0.0f,1.0f,1.0f);v23 = Vertex(-1.0f,2.0f,1.0f,-1.0f,0.0f,0.0f,1.0f,0.0f);v24 = Ve
24、rtex(-1.0f,2.0f,-1.0f,0.0f,1.0f,0.0f,0.0f,1.0f);v25 = Vertex(-1.0f,2.0f,1.0f,0.0f,1.0f,0.0f,0.0f,0.0f);v26 = Vertex(1.0f,2.0f,1.0f,0.0f,1.0f,0.0f,1.0f,0.0f);v27 = Vertex(-1.0f,2.0f,-1.0f,0.0f,1.0f,0.0f,0.0f,1.0f);v28 = Vertex(1.0f,2.0f,1.0f,0.0f,1.0f,0.0f,1.0f,0.0f);v29 = Vertex(1.0f,2.0f, -1.0f,0.0
25、f,1.0f,0.0f,1.0f,1.0f);v30 = Vertex(-1.0f,0.0f,-1.0f,0.0f,-1.0f,0.0f,0.0f,1.0f);v31 = Vertex(1.0f,0.0f,1.0f,0.0f,-1.0f,0.0f,1.0f,0.0f);v32 = Vertex(-1.0f,0.0f,1.0f,0.0f,-1.0f,0.0f,0.0f,0.0f);v33 = Vertex(-1.0f,0.0f,-1.0f,0.0f,-1.0f,0.0f,0.0f,1.0f);v34 = Vertex(1.0f,0.0f,-1.0f,0.0f,-1.0f,0.0f,1.0f,1.
26、0f);v35 = Vertex(1.0f,0.0f,1.0f,0.0f,-1.0f,0.0f,1.0f,0.0f);VB->Unlock();Device->SetRenderState(D3DRS_NORMALIZENORMALStr,ue );Device->SetRenderState(D3DRS_SPECULARENABLEf,alse );/V1 V2 V6/ 右面 V3 V7 V6/V3 V6 V2/ 左面 V0 V5 V4/V0 V1 V5/ 顶面 V4 V5 V6/V4 V6 V7/ 底面 V0 V2 V1/V0 V3 V2D3DXCreateTexture
27、FromFile(Device, "red.jpg" , &tex1);D3DXCreateTextureFromFile(Device, "green.jpg" , &tex2);D3DXCreateTextureFromFile(Device, "blue.jpg" , &tex3);Device->SetSamplerState(0, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR);Device->SetSamplerState(0, D3DSAMP_MINFILTER,
28、 D3DTEXF_LINEAR);Device->SetSamplerState(0, D3DSAMP_MIPFILTER, D3DTEXF_LINEAR);D3DXVECTOR3 position(0.0f, 0.0f, -5.0f);D3DXVECTOR3 target(0.0f, 0.0f, 0.0f);D3DXVECTOR3 up(0.0f, 1.0f, 0.0f);D3DXMATRIX V;D3DXMatrixLookAtLH(&V, &position, &target, &up);Device -> SetTransform(D3DTS_VIEW, &V);D3DXMATRIX proj;D3DXMatrixPerspectiveFovLH(&proj,D3DX_PI * 0.5f,(float )Width / ( float )Height,1.0f,1000.0f);Device -> SetTransform(D3DTS_PROJECTION, &proj);Device->SetRender
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 武汉市房屋合同协议
- 母婴店开店合同协议模板
- 员工贡献及激励合同协议
- 武汉家电运输合同协议
- 欠款用货物抵押合同协议
- 商品售后合同协议
- 快递点合同协议
- 快递外卖服务协议书范本
- 商户商场租赁合同协议
- 毛石供应运输合同协议
- 2024年风力发电运维值班员(技师)技能鉴定考试题库-下(判断题)
- DL∕T 1709.3-2017 智能电网调度控制系统技术规范 第3部分:基础平台
- 考核办法和考核方案
- 化妆品生产OEM合同书
- 海上CANTITRAVEL平台桩基施工关键技术应用v7
- 2024年4月自考08229计算机统计分析方法试题
- 有色金属冶金概论课程教案
- 华为MA5800配置及调试手册
- 中国生产安全行业市场运行动态及投资发展潜力分析报告
- 【真题】2023年镇江市中考化学试卷(含答案解析)
- 2023-2024年电子物证专业考试复习题库(含答案)
评论
0/150
提交评论