下载

1下载券

加入VIP
  • 专属下载特权
  • 现金文档折扣购买
  • VIP免费专区
  • 千万文档免费下载

上传资料

关闭

关闭

关闭

封号提示

内容

首页 三维编程实验三、d3d几何流水线

三维编程实验三、d3d几何流水线.doc

三维编程实验三、d3d几何流水线

hlphlp
2018-09-11 0人阅读 举报 0 0 暂无简介

简介:本文档为《三维编程实验三、d3d几何流水线doc》,可适用于IT/计算机领域

实验三、DD几何流水线、实验目的、掌握DD的几何流水线、熟悉DD的矩阵运算、掌握DD几何体。、实验步骤、打开vsnet打开ftp上的Ddemo项目。、在项目的链接库中加入ddxlib和winmmlib、在包含头文件ddxh和mmsystemh、本实验顶点均为未转换顶点把顶点格式定义改为(把红色的rhw删掉)structCUSTOMVERTEX{FLOATx,y,z,rhw已变换的顶点DWORDcolour顶点颜色}#defineDDFVFCUSTOMVERTEX(DDFVFXYZRHW|DDFVFDIFFUSE)顶点格式、在源文件代码的初始化顶点函数修改顶点数据代码:HRESULTInitVertexBuffer(){VOID*pVertices设置三角形的顶点CUSTOMVERTEXcvVertices={TopFace{f,f,f,DDCOLORXRGB(,,)},VertexBlue{f,f,f,DDCOLORXRGB(,,)},VertexRed{f,f,f,DDCOLORXRGB(,,)},VertexRed{f,f,f,DDCOLORXRGB(,,)},VertexGreenFace{f,f,f,DDCOLORXRGB(,,)},VertexRed{f,f,f,DDCOLORXRGB(,,)},VertexBlue{f,f,f,DDCOLORXRGB(,,)},VertexGreen{f,f,f,DDCOLORXRGB(,,)},VertexRedFace{f,f,f,DDCOLORXRGB(,,)},VertexBlue{f,f,f,DDCOLORXRGB(,,)},VertexGreenFace{f,f,f,DDCOLORXRGB(,,)},VertexGreen{f,f,f,DDCOLORXRGB(,,)},VertexRedFace{f,f,f,DDCOLORXRGB(,,)},VertexRed{f,f,f,DDCOLORXRGB(,,)},VertexBlueBottomFace{f,f,f,DDCOLORXRGB(,,)},VertexGreen{f,f,f,DDCOLORXRGB(,,)},VertexBlue{f,f,f,DDCOLORXRGB(,,)},VertexRed{f,f,f,DDCOLORXRGB(,,)},VertexGreen}为DD设备创建顶点缓冲if(FAILED(gpDDDevice>CreateVertexBuffer(*sizeof(CUSTOMVERTEX),,DDFVFCUSTOMVERTEX,DDPOOLDEFAULT,gpVertexBuffer,))){returnEFAIL}获得指向顶点缓冲的指针并且锁定准备写入数据if(FAILED(gpVertexBuffer>Lock(,sizeof(cvVertices),pVertices,))){returnEFAIL}把设定好的顶点数据复制入顶点缓冲的地址memcpy(pVertices,cvVertices,sizeof(cvVertices))解锁gpVertexBuffer>Unlock()returnSOK}、修改渲染函数添加以下斜体的代码。voidRender(){if(gpDDDevice){清屏gpDDDevice>Clear(,,DDCLEARTARGET,DDCOLORXRGB(,,),f,)开始场景渲染if(SUCCEEDED(gpDDDevice>BeginScene())){渲染三角形gpDDDevice>SetStreamSource(,gpVertexBuffer,,sizeof(CUSTOMVERTEX))gpDDDevice>SetFVF(DDFVFCUSTOMVERTEX)*************原来的一条渲染语句改成三条************gpDDDevice>DrawPrimitive(DDPTTRIANGLELIST,,)gpDDDevice>DrawPrimitive(DDPTTRIANGLESTRIP,,)TopgpDDDevice>DrawPrimitive(DDPTTRIANGLESTRIP,,)SidesgpDDDevice>DrawPrimitive(DDPTTRIANGLESTRIP,,)Bottom结束场景渲染gpDDDevice>EndScene()}后备表面呈现出来gpDDDevice>Present(,,,)}}、添加三个变换函数的定义。世界变换实际上是个旋转变换voidSetupRotation(){DDXMATRIXmatWorld,matWorldX,matWorldY,matWorldZ创建三个分别绕xyz轴变换矩阵DDXMatrixRotationX(matWorldX,timeGetTime()f)DDXMatrixRotationY(matWorldY,timeGetTime()f)DDXMatrixRotationZ(matWorldZ,timeGetTime()f)三个矩阵相乘得到最终的旋转矩阵DDXMatrixMultiply(matWorld,matWorldX,matWorldY)DDXMatrixMultiply(matWorld,matWorld,matWorldZ)应用变换gpDDDevice>SetTransform(DDTSWORLD,matWorld)}投影变换voidSetupPerspective(HWNDhWnd){doubledxdoubledyRECTrectdoubledAspectGetWindowRect(hWnd,rect)纵横比dAspect=(double)(rectrightrectleft)(double)(rectbottomrecttop)DDXMATRIXmatProjDDXMatrixPerspectiveFovLH(matProj,DDXPI,dAspect,f,f)gpDDDevice>SetTransform(DDTSPROJECTION,matProj)}观察变换voidSetupViewer(){DDXMATRIXmatViewDDXMatrixLookAtLH(matView,DDXVECTOR(f,f,f),观察点DDXVECTOR(f,f,f),视线点DDXVECTOR(f,f,f))观察上方向gpDDDevice>SetTransform(DDTSVIEW,matView)}、在初始化DD函数中设置渲染参数创建一个设备if(FAILED(gpDD>CreateDevice(DDADAPTERDEFAULT,DDDEVTYPEHAL,hWnd,vp,ddpp,gpDDDevice))){returnEFAIL}gpDDDevice>SetRenderState(DDRSCULLMODE,DDCULLCCW)gpDDDevice>SetRenderState(DDRSLIGHTING,FALSE)returnSOK、分别在相应流程调用三个变换函数。、试验成功观察结果发现立方体旋转有什么问题思考如何解决。、本实验结果请参照源码dDemo。

用户评价(0)

关闭

新课改视野下建构高中语文教学实验成果报告(32KB)

抱歉,积分不足下载失败,请稍后再试!

提示

试读已结束,如需要继续阅读或者下载,敬请购买!

文档小程序码

使用微信“扫一扫”扫码寻找文档

1

打开微信

2

扫描小程序码

3

发布寻找信息

4

等待寻找结果

我知道了
评分:

/5

三维编程实验三、d3d几何流水线

VIP

在线
客服

免费
邮箱

爱问共享资料服务号

扫描关注领取更多福利