- 1、本文档共46页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
《计算机图形学》课程报告
课题名称: SolarSystem
课题负责人名(学号):杨菡蕊(0743111310)同组成员名单(角色):
指导教师: 李征 评阅成绩:
评阅意见:
提交报告时间: 2010 年12月14日
课程名称:学生姓名:学生学号:
课程名称:
学生姓名:
学生学号:
-
-
SolarSystem
软件工程专业
学生 杨菡蕊 指导老师 李征
[摘要]程序的框架使用了面向对象的设计思想,并使用windowsAPI函数和OpenGL函数模拟太阳系,程序实现了各大行星的公转和自转,并且可以自由控制摄像机的观测位置来漫游太阳系。
关键词:太阳系、OpenGL
一.图形学基本原理
几何变换相关原理
应用于对象几何描述并改变它的位置、方向或大小的操作称为几何变换。几何变换能用描述动画序列中对象在场景中可以怎样移动或者简单地从另一角度观察他们。
平移、旋转和缩放是所有图形软件包中都含有的几何变换函数 .
三维平移:
在三维齐次坐标表示中,任意点 P=(x,y,z)通过将平移距离tx,ty,tz加到P
的坐标上而平移到位置 P’=(x’y’z’):x’=x+tx,y’=y+ty,z’=z+tz.
三维旋转:
绕z轴旋转的二维旋转很容易推广到三维:
x’=xcos -ysin
y’=xsinz’=z
+ycos
相同的原理绕x,y轴与之类似。
一般三维旋转:
可以通过下列变换序列来得到所需的旋转矩阵:
平移对象使其旋转轴与平行与该轴的一个坐标轴重合;
对于该轴完成指定的旋转;
平移对象将其旋转轴移回到原来的位置。
若给定旋转轴和旋转角,我们可以按照 5个步骤来完成所需的旋转:
平移对象,使得旋转轴通过坐标原点;
旋转对象使得旋转轴与某一坐标重合;
绕坐标轴完成指定的旋转;
利用逆旋转使得旋转轴回到其原始方向;
利用逆平移使旋转轴回到其原始位置。
三维缩放:
点P=(x,y,z)相对于坐标原点的三维缩放是二维缩放的简单扩充。 只要在变换矩阵中引入z坐标缩放参数中:
我们可以使用下列变换序列进行相对于任意给定点 (xf,yf,zf)的缩放变换:
平移给定点到原点;
使用上面的等式,相对于坐标原点所放对象;
平移给定点回到原始位置。
2.几何图形像素化相关原理
“走样”的概念
答:光栅是由离散的点组成的,在光栅显示设备上表现直线、多边形等,必须在离散的位置采样,由于采样不充分重建后造成的信息失真,就是走样。
反走样方法
答:首先将象素均匀分割成 n个子象素。则每个象素的面积为 1/n。计算每个子象素对原象素的贡献,并保存在一张二维的加权表中。然后求出所有中心落
于直线段内的子象素。最后计算所有这些子像素对原像素亮度贡献之和∑ wi的值,该值乘以最大灰度值作为该象素的显示灰度值。
光照模型相关原理
光照模型,主要用于对象表面某光照位置的颜色计算
任一发出辐射能量的对象称为光源,辐射光线从一点光源出发并在空间传播,光线将会衰减,假设距离为 d1。可使用下列公式来表现光源强度:
Fradatten(d1)=1/(a0+a1d1+a2d12)
用户可以调整a0,a1,a2的值得到不同的光照效果。
光照模型使用为表面设定的各种光学特性来计算表面光照效果。这些特性包括透明度、颜色、反射系数以及各种表面纹理参数。
场景中的背景光或环境光是光照模型中必须考虑的另一因素。
二.系统界面与操作说明
系统界面与图形显示示例
课程名称:学生姓名:学生学号:
课程名称:
学生姓名:
学生学号:
操作说明
Up:向前走
Down:向后退
-5-
-5-
课程名称:学生姓名:学生学号:
课程名称:
学生姓名:
学生学号:
Left:向左转
Right:向右转
-6-
-6-
课程名称:学生姓名:学生学号:
课程名称:
学生姓名:
学生学号:
PgUp:抬头
PgDown:低头
-7-
-7-
课程名称:学生姓名:学生学号:
课程名称:
学生姓名:
学生学号:
-
-
三.源程序
1.系统总体框架
2..源程序与注释
//Stdafx.h#pragma once
#include Windows.h#include iostream#include gl/glut.h#include cmath
#define NUM_TEXTURES 11
#define DEG_TO_RAD 0.017453
#define KEY_DOWN(vk_code)((GetAsyncKeyState(vk_code)0x8000)?1:0)usingnamespace std;
//DataType.h#pragm
文档评论(0)