1、 绘制三维仿真魔方:绘制一个六面体,是一个3*3*3形式的魔方 魔方的整体的缩放与旋转:通过鼠标控制 魔方的旋转:通过鼠标点击按钮,控制其对应面的旋转 课题的性能需求 在电脑上最好能都简单的通过鼠标控制魔方游戏使其操作更简单。涉及的主要工作原理和关键技术介绍 三维图形绘制原理技术介绍 采用Visual C# 语言对DirectX进行三维图形开发,首先介绍一下Device类,Device类用于完成DirectX 里所有绘图操作,我们可以把这个类假想为图形卡,场景里所有其他图形对象都依赖于Device,计算机里可以有多个Device。通过 Direct3D 绘制的每个对象都是有三角形组成的,一个三
2、角形由三个点组成,而每个点都定义成一个向量来指定点的X、Y 和Z 坐标。DirectX 中有一种定义顶点的结构,那就是CustomVertex 类,只需要在渲染函数中添加绘制图形代码即可绘图。绘制图元(primitives)根据其绘制方式,Device类主要提供了如下四个方法, 本次课程设计主要采用了如下绘图方法:public void DrawUserPrimitives( PrimitiveType primitiveType, int primitiveCount, object vertexStreamZeroData);DrawUserPrimitives()方法通过读取系统内存中的
3、顶点数据来绘制图元。每次调用DrawUserPrimitives()方法时,顶点数据都是从系统内存中传递到显卡中,但通常对于大部分数据没有变换的情况下,采用这种方式绘制图元将导致每次渲染时都要从系统内存中调用重复的数据,当顶点数据量较大时,会导致程序运行速度非常慢。绘制分段直线采用PrimitiveType. LineList 类型。 魔方旋转原理技术介绍 魔方的旋转主要是通过算法记录旋转前各个小块的颜色,旋转后重新对其着色。对图形不停地进行渲染。 关键问题解决思路三维魔方的描述问题的解决方法 定义了一个Block类,用来表示一个小的六面体,以及它所在的位置的世界坐标,和给它的每个面着色。包括
4、旋转某个面后,被旋转小块的重新着色的实现。 魔方整体旋转问题的解决方法 通过鼠标点击拖动,控制魔方的整体旋转。 定义了一个鼠标监听函数,鼠标移动后,坐标的改变将引起视图显示的角度的变化,然后视觉上给人以不同的效果。 3.3.3 魔方每一层旋转和打乱问题的解决方法 每一层的旋转,定义了一个旋转函数,每次指定旋转层,根据其中心块的表面颜色,来执行旋转函数。旋转函数通过改变块的颜色,视觉上给人以旋转后的效果,即重新对魔方的部分要求被改变的小块进行着色。 打乱魔方则是通过随机指定旋转面,然后调用旋转函数。进行很多次的随机旋转后就会显现打乱后的魔方。系统设计 系统总体结构、模块或流程图一:系统的总体结构
5、根据礼品魔方的功能,主要分三个模块,三维魔方的显示,魔方的整体翻转,还有魔方的各层的旋转。 显示三维图形子模块的设计图二:显示三维图形 三维图形的绘制是通过DirectX中的device设备实现的,通过摄像机,将世界坐标系中的图形转换到视图矩阵,然后采用PositionColored形式来定义顶点格式结构 魔方的整体翻转子模块的设计图三:魔方的整体翻转 魔方的整体翻转:是通过鼠标监听函数接受鼠标输入来改变三维图形的显示角度,控制矩阵的偏移。 魔方的各层旋转子模块的设计图四:魔方各层旋转结构图 魔方各层的旋转:是通过记录改变各个小块的面的颜色情况来实现旋转的。 魔方的打乱 魔方的打乱只是多次随机
6、调用魔方的层旋转函数。系统实现在主菜单上选择“项目添加引用”,然后在.NET 中添加 和,如下图所示:打开窗体和类的代码,为其添加DirectX 引用,如下:using ;using partial class CubeUI : Form raw(x, y, z); = false;osition = new Vector3(x, y, z);osition = new Vector3(x, y, z + scale); vertices2.Position = new Vector3(x + scale, y, z + scale); vertices3.Position = new Vec
7、tor3(x + scale, y, z); vertices4.Position = new Vector3(x, y + scale, z); vertices5.Position = new Vector3(x, y + scale, z + scale); vertices6.Position = new Vector3(x + scale, y + scale, z + scale); vertices7.Position = new Vector3(x + scale, y + scale, z); 合软件运行的最低要求。测试环境首先要保证能支撑软件正常运行。2.选用比较普及的操作
8、系统和软件平台。本软件采用:Microsoft Windows XP Professional 版本2002 service pack 2 和Microsoft Visual Studio 2008 服务器上的第三方软件:VS自带的DirectX(主要用于图形游戏开发)3.营造相对简单、独立的测试环境。除了操作系统,测试机上只安装软件运行和测试必需的软件,以免不相关的软件影响测试实施。4.无毒的环境。利用有效的正版杀毒软件检测软件环境,保证测试环境中没有病毒。采用360检测。 测试记录项目名称:一个简单的礼品魔方功能:绘制一个虚拟的三维魔方,可以随机打乱魔方,且可以实现随意的转动。测试结果:开
9、始运行后:呈现出的三维魔方。附带一些操作旋转的按钮和说明。按住鼠标右键拖动鼠标实现魔方整体翻转。可以实现上下左右前后翻转。点击打乱按钮:实现打乱魔方魔方各个面的旋转:红色面:旋转前的情况点击红色按钮后,旋转90后的情况白色面:旋转前:旋转90度后的情况魔方旋转成功后如图。软件安装运行说明书程序的运行必须要安装Microsoft 开发的DirectX开发工具包SDK,并且添加其引用。下载地址:&FamilyID=3021d52b-514e-41d3-ad02-438a3ba730ba心得体会此次课程设计,主要历时一个月,但其从前期的确定指导老师,到选题,然后根据老师的指导,进行前期准备则不止一个
10、月。本人通过图书馆、网络等各种途径查询我此次所做课题的国内外研究情况,礼品魔方几乎没有过实现,各种魔方游戏倒是有不少,不过其实现方式都是依靠C+/C、OpenGL、GDI、Java、Flash、Flex、Silverlight、DirectX等对图形图像处理都非常强大的工具或者语言等开发包实现的。然而,由于本人学习的专业是方向的,只对C#和比较熟悉,才开始本打算用来实现成B/S结构的一个礼品魔方。但是这方面实现太过于困难,几乎很难找到实现三维开发的先例。最后把本人的情况和现今的市场开发情况相结合,选择了DirectX和C#的组合这个研究方向,花了无限的精力,实现了这样一个礼品魔方,现如今也只是
11、一个能玩的游戏。还远远没有达到老师所期望的高度,希望在后续的时间里,能对其进一步改进,完善某些功能。经过这次课程设计,我在查阅资料的同时几乎熟悉了如今软件行业,各种工具,语言的特点,他们的开发特点,他们开发上的利与蔽。知道了对于图形软件开发的困难度。对于今后在开发一个项目时,对于语言和工具的选择会有一个更好的拿捏。遗憾的是这个项目还有某些功能没有实现。不过对于以后的研究方向有了一定的规划。还有就是得感谢范伟老师给了这么一个选题,让我涉及到了以前几乎不了解的图形开发。相信对于我以后的发展会带来无尽的帮助,还有就是得感谢老师,给予的指导,才有可能个人完成这样一个项目。参考文献肖泽云.基于visual C#的DirectX开发实例【M】.三峡大学:三峡水利与环境学院刘先省&陈克坚&董淑娟等.Visual C# 程序设计教程【M】.北京:机械工业出版社,甘泉.PC游戏编程(DirectX8)【M】.重庆:重庆大学出版社.Microsoft.visual studio 2008 MSDN.MicrosoftXX谷歌
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1