哈工大计算机图形学大作业说明报告.docx

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
哈工大计算机图形学大作业说明报告

哈尔滨工业大学计算机图形学大作业(2016年度春季学期)姓名:学号X学院:计算机科学与技术学院教师:唐好选前言本次计算机图形学课程已经结束,本人掌握了一些基本的图形学相关知识,以及常用的一些图形学算法。为了检验自己对于计算机图形学知识的掌握程度,本次大作业将基于学习过的图形学相关知识编写一个简单的图形学相关的小游戏。本次作业编写使用的程序设计语言为一种新兴的图形艺术设计用的计算机语言Processing。Processing是一种具有革命前瞻性的新兴计算机语言,它的概念是在电子艺术的环境下介绍程序语言,并将电子艺术的概念介绍给程序设计师。它是 Java 语言的延伸,并支持许多现有的 Java 语言架构,不过在语法 (syntax) 上简易许多,并具有许多贴心及人性化的设计。Processing 可以在 Windows、MAC OS X、MAC OS 9 、Linux 等操作系统上使用。程序的运行需要Java环境和Processing环境,Processing环境可以在/download/下载,配置好Java环境后直接解压Processing文件包即可使用。程序概述本次大作业要实现的是一个简单的三维空间的射击游戏,需要运用的多种三维空间图形的算法和图形绘制算法。为了方便编写和提高运行效率,基本的图形绘制比如直线、矩形、圆的绘制直接采用内置函数。主要实体有:公用实体(战机、敌机、炮弹的父实体),战机(玩家控制的对象和敌机对象)、玩家、敌机、炮弹。主要难点:不同对象的移动(立体图形的坐标变换)、对象的绘制、击中判定。设计过程公用实体Chara公用实体是多个需要实现实体的父实体,需要满足其他一般实体的基本需求。基本属性位置(三维向量):pos移动速度(三维向量):vel生命值(玩家用):life移动矩阵(用于进行三维空间变换的矩阵,即三维齐次坐标矩阵):matrix分类(玩家控制战机、敌机还是炮弹):group初始化函数:Chara(float _x, float _y, float _z, float _radius, int _group) { pos.x = _x; pos.y = _y; pos.z = _z; //初始化位置radius = _radius; //初始化外观(立方体)边长life = 100.0; //初始化生命值group = _group;//初始化类型 }类内函数:updateMatrix()//更新变换矩阵void updateMatrix() {matrix.m03 = pos.x; //m03对应矩阵中的x轴偏移量,设置为pos.x,表示将对象移动到这里,matrix.m13 = pos.y; //m13对应矩阵中的y轴偏移量,设置为pos.y,表示将对象移动到这里,matrix.m23 = //m23对应矩阵中的z轴偏移量,设置为pos.z,表示将对象移动到这里,}update()//更新坐标void update() { pos.x += vel.x; //x轴坐标加上速度的x分量表示坐标变化,下同pos.y += vel.y; pos.z += vel.z; }isHit(Chara chara)//判断是否被击中boolean isHit(Chara chara) { if(group==chara.group) return false;//类型相同不进行判断 else return pos.dist(chara.pos) = radius + chara.radius;//距离小于边长之和判定为击中 }lookAt(PVector vz)//敌机使用,向玩家转移方向,输入是玩家指向敌机的向量void lookAt(PVector vz) { PVector vx = vz.cross(new PVector(0,1,0)); 做向量积求x方向分量 vx.normalize(); PVector vy = vz.cross(vx); //求y方向分量 vy.normalize(); matrix.set(vx.x, vy.x, vz.x, pos.x, vx.y, vy.y, vz.y, pos.y, vx.z, vy.z, vz.z, pos.z, 0, 0, 0, 1);//设置变换矩阵 }accel(float speed)//对象加速void accel(float speed) {//使得速度向量的各个分量的绝对值变大即可。 vel.x += matrix.m02 * -speed; vel.y += matrix.m12 * -speed; vel.z += matrix.m22 *

文档评论(0)

shuwkb + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档