《directX彩色图形绘制实验实验三报告》由会员分享,可在线阅读,更多相关《directX彩色图形绘制实验实验三报告(25页珍藏版)》请在金锄头文库上搜索。
1、实验三 DirectX彩色图形绘制实验实验报告项目1: DirectX彩色三角形渲染实验在例程ColorTriangle的基础上,完成以下步骤:1. 修改彩色顶点数据,实现三个不同的彩色三角形渲染。2. 修改三角形顶点的颜色值,使三个三角形分别为红、黄、兰三种不同的颜色。原代码图像更改左边三角型渲染模式得到的图像,将平面模式渲染三角形改为用 Gouraud模式渲染三角形Device-SetRenderState(D3DRS_SHADEMODE, D3DSHADE_FLAT);改为Device-SetRenderState(D3DRS_SHADEMODE, D3DSHADE_GOURAUD);改
2、变顶点颜色ColorVertex* v;原代码语句Triangle-Lock(0, 0, (void*)&v, 0);v0 = ColorVertex(-1.0f, 0.0f, 2.0f, D3DCOLOR_XRGB(255, 0, 0);v1 = ColorVertex( 0.0f, 1.0f, 2.0f, D3DCOLOR_XRGB(0, 255, 0);v2 = ColorVertex( 1.0f, 0.0f, 2.0f, D3DCOLOR_XRGB( 0, 0, 255);Triangle-Unlock();将v1 = ColorVertex( 0.0f, 1.0f, 2.0f, D3
3、DCOLOR_XRGB(0, 255, 0);改为v1 = ColorVertex( 0.0f, 1.0f, 2.0f, D3DCOLOR_XRGB(255 255, 0);得到三个顶点为红黄蓝的三角形项目2: DirectX彩色立方体渲染实验在例程Cub的基础上,完成以下步骤:a) 修改立方体顶点数据,将顶点数据格式从Vertex结构改为ColorVertex结构,顶点颜色都设为红色(D3DCOLOR_XRGB(255, 0, 0))。注意Device-CreateVertexBuffer()函数的参数设置,以及ColorVertex顶点数据的设置。b) 修改Display()函数中的Dev
4、ice-SetStreamSource()函数和Device-SetFVF()函数的参数设置,以及增加Device-SetRenderState(D3DRS_SHADEMODE, D3DSHADE_GOURAUD)的调用。实现彩色立方体的渲染。c) 列出彩色顶点数据的使用步骤,说明顶点数据结构的定义、缓冲区创建、顶点数据设置、缓冲区数据设置到渲染引擎,渲染状态设置为插值模式,渲染等各个步骤对应的语句。在例程Cub的基础上,完成以下步骤:d) 修改立方体顶点数据,将顶点数据格式从Vertex结构改为ColorVertex结构,顶点颜色都设为红色(D3DCOLOR_XRGB(255, 0, 0))
5、。注意Device-CreateVertexBuffer()函数的参数设置,以及ColorVertex顶点数据的设置。e) 修改Display()函数中的Device-SetStreamSource()函数和Device-SetFVF()函数的参数设置,以及增加Device-SetRenderState(D3DRS_SHADEMODE,D3DSHADE_GOURAUD)的调用。实现彩色立方体的渲染。f) 列出彩色顶点数据的使用步骤,说明顶点数据结构的定义、缓冲区创建、顶点数据设置、缓冲区数据设置到渲染引擎,渲染状态设置为插值模式,渲染等各个步骤对应的语句。顶点数据结构的定义struct Col
6、orVertexColorVertex()ColorVertex(float x, float y, float z,D3DCOLOR c)_x = x; _y = y; _z = z; _color = c;float _x, _y, _z;D3DCOLOR _color;static const DWORD FVF;const DWORD ColorVertex:FVF = D3DFVF_XYZ | D3DFVF_DIFFUSE;缓冲区创建Device-CreateVertexBuffer(8 * sizeof(ColorVertex), D3DUSAGE_WRITEONLY,ColorV
7、ertex:FVF,D3DPOOL_MANAGED,&VB,0);顶点数据设置ColorVertex* vertices;VB-Lock(0, 0, (void*)&vertices, 0);/ vertices of a unit cubevertices0 = ColorVertex(-1.0f, -1.0f, -1.0f, D3DCOLOR_XRGB(255, 0, 0);vertices1 = ColorVertex(-1.0f, 1.0f, -1.0f, D3DCOLOR_XRGB(255, 0, 0);vertices2 = ColorVertex( 1.0f, 1.0f, -1.
8、0f, D3DCOLOR_XRGB(255, 0, 0);vertices3 = ColorVertex( 1.0f, -1.0f, -1.0f, D3DCOLOR_XRGB(255, 0, 0);vertices4 = ColorVertex(-1.0f, -1.0f, 1.0f, D3DCOLOR_XRGB(255, 0, 0);vertices5 = ColorVertex(-1.0f, 1.0f, 1.0f, D3DCOLOR_XRGB(255, 0, 0);vertices6 = ColorVertex( 1.0f, 1.0f, 1.0f, D3DCOLOR_XRGB(255, 0,
9、 0);vertices7 = ColorVertex( 1.0f, -1.0f, 1.0f, D3DCOLOR_XRGB(255, 0, 0);VB-Unlock();缓冲区数据设置到渲染引擎,渲染状态设置为插值模式,渲染bool Display(float timeDelta)if( Device )/ spin the cube:/D3DXMATRIX Rx, Ry;/ rotate 45 degrees on x-axisD3DXMatrixRotationX(&Rx, 3.14f / 4.0f);/ incremement y-rotation angle each framesta
10、tic float y = 0.0f;D3DXMatrixRotationY(&Ry, y);y += timeDelta;/ reset angle to zero when angle reaches 2*PIif( y = 6.28f )y = 0.0f;/ combine x- and y-axis rotation transformations.D3DXMATRIX p = Rx * Ry;Device-SetTransform(D3DTS_WORLD, &p);/ draw the scene:/Device-Clear(0, 0, D3DCLEAR_TARGET | D3DCL
11、EAR_ZBUFFER, 0xffffffff, 1.0f, 0);Device-BeginScene();Device-SetStreamSource(0, VB, 0, sizeof(ColorVertex);Device-SetIndices(IB);Device-SetFVF(ColorVertex:FVF);/ Draw cube.Device-DrawIndexedPrimitive(D3DPT_TRIANGLELIST, 0, 0, 8, 0, 12);Device-SetRenderState(D3DRS_SHADEMODE,D3DSHADE_GOURAUD);Device-E
12、ndScene();Device-Present(0, 0, 0, 0);return true;项目3: 模型创建渲染实验在Cube程序的基础上,完成以下步骤:a) 创建立方体,茶壶,圆柱体,圆环,球体等5种内置模型;b) 将5个模型分别移动到不同的位置,按照不同的速度和方向进行旋转。c) 将5个模型分别用不同的材质渲染。d) 将5个模型分别进行不同比例的缩放。/ / File: cube.cpp/ / Author: Frank Luna (C) All Rights Reserved/ System: AMD Athlon 1800+ XP, 512 DDR, Geforce 3, Wi
13、ndows XP, MSVC+ 7.0 / Desc: Renders a spinning cube in wireframe mode. Demonstrates vertex and / index buffers, world and view transformations, render states and/ drawing commands./ /#include d3dUtility.h#include texcube.h/ Globals/IDirect3DDevice9* Device = 0; const int Width = 640;const int Height = 480;IDirect3DTexture9* Tex = 0;Cube* Box = 0;IDirect3DVertexBuffer9* VB = 0;IDirect3DIndexBuffer9* IB = 0;D3DXMATRIX WorldMatrix;ID3DXMesh* Objects5 = 0, 0, 0, 0,0;D3DMATERIAL9 Mtrls5;D3DXMATRIX Worlds5;D3DXMATRIX scales5;/ Classes and Structures/