首页 三维编程实验十三、公转和自转

三维编程实验十三、公转和自转

举报
开通vip

三维编程实验十三、公转和自转实验十二、圆柱体和球的创建 1、 实验目的 1、 掌握D3D的圆柱体和球的创建 2、 实验步骤 1、 打开vs.net2005,打开ftp上的3Ddemo11项目,执行并观看结果。 2、 修改纹理指针和材质结构以及世界变换结构体变量定义,改成数组定义 LPDIRECT3DTEXTURE9 g_pTexture[10]; D3DMATERIAL9 matMaterial[10]; OBJREC objRec[10]; 3、 在InitD3D函数中添加对纹理和材质的初始化,以及调用设置函数。 ...

三维编程实验十三、公转和自转
实验十二、圆柱体和球的创建 1、 实验目的 1、 掌握D3D的圆柱体和球的创建 2、 实验步骤 1、 打开vs.net2005,打开ftp上的3Ddemo11项目,执行并观看结果。 2、 修改纹理指针和材质结构以及世界变换结构体变量定义,改成数组定义 LPDIRECT3DTEXTURE9 g_pTexture[10]; D3DMATERIAL9 matMaterial[10]; OBJREC objRec[10]; 3、 在InitD3D函数中添加对纹理和材质的初始化,以及调用设置函数。 for(int i=0;i<10;i++) { g_pTexture[i]=NULL; ZeroMemory(&matMaterial[i],sizeof(matMaterial[i])); ZeroMemory(&objRec[i], sizeof(objRec[i])); objRec[i].fScale = 1.0f; } if(FAILED(SetTexture(TEXT("sp.bmp"),0))) { return E_FAIL; } if(FAILED(SetTexture(TEXT("wall.bmp"),1))) { return E_FAIL; } if(FAILED(InitLight())) { return E_FAIL; } 4、 InitMaterial(); 5、 修改设置纹理函数,记得也修改声明 HRESULT SetTexture(TCHAR *pszTexturePath,int num) { if (FAILED(D3DXCreateTextureFromFile(g_pD3DDevice,pszTexturePath,&g_pTexture[num]))) { return E_FAIL; } return S_OK; } 6、 修改世界变换函数,记得修改相应的函数声明 void SetupRotation(int num) { D3DXMATRIX matTrans,matWorld; D3DXMATRIX matRotateX,matRotateY,matRotateZ; D3DXMATRIX matScale; D3DXMatrixRotationX(&matRotateX,objRec[num].fXAngle); D3DXMatrixRotationY(&matRotateY,objRec[num].fYAngle); D3DXMatrixRotationZ(&matRotateZ, objRec[num].fZAngle); D3DXMatrixMultiply(&matWorld, &matRotateX, &matRotateY); D3DXMatrixMultiply(&matWorld, &matWorld, &matRotateZ); D3DXMatrixScaling(&matScale,objRec[num].fScale ,objRec[num].fScale ,objRec[num].fScale); D3DXMatrixMultiply(&matWorld, &matWorld, &matScale); D3DXMatrixTranslation(&matTrans,objRec[num].x,objRec[num].y,objRec[num].z); D3DXMatrixMultiply(&matWorld, &matTrans,&matWorld); g_pD3DDevice->SetTransform(D3DTS_WORLD,&matWorld); } 7、 修改材质函数 void InitMaterial() { matMaterial[0].Diffuse = D3DXCOLOR(1.0,1.0,1.0,1.0);//rgbaDiffuse; matMaterial[0].Ambient = D3DXCOLOR(1.0,1.0,1.0,1.0);//rgbaAmbient; matMaterial[0].Specular =D3DXCOLOR(0.0,0.0,0.0,1.0);// rgbaSpecular; matMaterial[0].Power = 100.0f;//高光点的锐度 matMaterial[0].Emissive = D3DXCOLOR(1.0,1.0,1.0,1.0);//rgbaEmissive; matMaterial[1].Diffuse = D3DXCOLOR(1.0,1.0,1.0,1.0); matMaterial[1].Ambient = D3DXCOLOR(1.0,1.0,1.0,1.0); matMaterial[1].Specular = D3DXCOLOR(0.0,0.0,0.0,1.0); matMaterial[1].Power = 100.0f;//高光点的锐度 matMaterial[1].Emissive = D3DXCOLOR(0.0,0.0,0.0,1.0); } 8、 修改渲染函数 void Render() { if(g_pD3DDevice) { //清屏 g_pD3DDevice->Clear(0,NULL,D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB(255,120,0), 1.0f, 0); //开始场景渲染 if (SUCCEEDED(g_pD3DDevice->BeginScene())) { SetupPerspective(main_hwnd); SetupViewer(); g_pD3DDevice->SetFVF(D3DFVF_CUSTOMVERTEX); g_pD3DDevice->SetStreamSource(0, g_pVBSphere,0, sizeof(CUSTOMVERTEX)); objRec[0].x=0; objRec[0].fYAngle +=0.01; objRec[0].fScale =2; SetupRotation(0); g_pD3DDevice->SetTexture(0,g_pTexture[0]); g_pD3DDevice->SetMaterial(&matMaterial[0]); g_pD3DDevice->DrawPrimitive(D3DPT_TRIANGLESTRIP, 0, iSpherePointNums-2); objRec[1].x=-15; objRec[1].fScale =0.5; objRec[1].fYAngle +=0.05; SetupRotation(1); g_pD3DDevice->SetTexture(0,g_pTexture[1]); g_pD3DDevice->SetMaterial(&matMaterial[1]); g_pD3DDevice->DrawPrimitive(D3DPT_TRIANGLESTRIP, 0, iSpherePointNums-2); //结束场景渲染 g_pD3DDevice->EndScene(); } //后备表面呈现出来 g_pD3DDevice->Present(NULL, NULL, NULL, NULL); } } 9、 修改摄像机的位置 void SetupViewer() { D3DXMATRIX matView; D3DXMatrixLookAtLH(&matView, &D3DXVECTOR3(0.0f, 5.0f,-18.0f), //Camera Position &D3DXVECTOR3(0.0f, 0.0f, 0.0f), //Look At Position &D3DXVECTOR3(0.0f, 1.0f, 0.0f)); //Up Direction g_pD3DDevice->SetTransform(D3DTS_VIEW, &matView); } 10、 消息处理函数的鼠标消息不要 //case WM_LBUTTONDOWN: // ptOld.x = LOWORD(lParam); // ptOld.y = HIWORD(lParam); // return 0; //case WM_MOUSEMOVE: // if (MK_RBUTTON == wParam) // { // POINT pt; // RECT rect; // // pt.x = LOWORD(lParam); // pt.y = HIWORD(lParam); // GetWindowRect(hWnd,&rect); // objRec.fXAngle -= 10*(float)(pt.y - ptOld.y ) / (float)(rect.bottom - rect.top ); // objRec.fYAngle -= 10*(float)(pt.x - ptOld.x ) / (float)(rect.right - rect.left ); // ptOld = pt; // } // break; 10、修改退出函数 void CleanUp() { for(int i=0;i<10;i++) { if(g_pTexture[i]) { g_pTexture[i]->Release(); g_pTexture[i]=NULL; } } if(g_pD3DDevice) { g_pD3DDevice->Release(); g_pD3DDevice=NULL; } if(g_pD3D) { g_pD3D->Release(); g_pD3D=NULL; } } --------------------------------------------------------------------------------------- 绕任意轴旋转矩阵的创建(例如) D3DXMatrixRotationAxis(&matRotate,&D3DXVECTOR3(-1.0,1.0,0.0),objRec[num].fAngle);
本文档为【三维编程实验十三、公转和自转】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_008332
暂无简介~
格式:doc
大小:34KB
软件:Word
页数:5
分类:互联网
上传时间:2018-09-11
浏览量:11