- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
《计算机图形学》课程报告
课题名称: Solar System
课题负责人名(学号):杨菡蕊(0743111310)
Solar System
软件工程 专业
学生 杨菡蕊 指导老师 李征
[摘要] 程序的框架使用了面向对象的设计思想,并使用windows API函数和OpenGL函数模拟太阳系,程序实现了各大行星的公转和自转,并且可以自由控制摄像机的观测位置来漫游太阳系。
关键词:太阳系、OpenGL
一.图形学基本原理
1. 几何变换相关原理
应用于对象几何描述并改变它的位置、方向或大小的操作称为几何变换。几何变换能用描述动画序列中对象在场景中可以怎样移动或者简单地从另一角度观察他们。
平移、旋转和缩放是所有图形软件包中都含有的几何变换函数.
三维平移:
在三维齐次坐标表示中,任意点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’=xsin+ycos
z’=z
相同的原理绕x,y轴与之类似。
一般三维旋转:
可以通过下列变换序列来得到所需的旋转矩阵:
平移对象使其旋转轴与平行与该轴的一个坐标轴重合;
对于该轴完成指定的旋转;
平移对象将其旋转轴移回到原来的位置。
若给定旋转轴和旋转角,我们可以按照5个步骤来完成所需的旋转:
平移对象,使得旋转轴通过坐标原点;
旋转对象使得旋转轴与某一坐标重合;
绕坐标轴完成指定的旋转;
利用逆旋转使得旋转轴回到其原始方向;
利用逆平移使旋转轴回到其原始位置。
三维缩放:
点P=(x,y,z)相对于坐标原点的三维缩放是二维缩放的简单扩充。只要在变换矩阵中引入z坐标缩放参数中:
我们可以使用下列变换序列进行相对于任意给定点(xf,yf,zf)的缩放变换:
平移给定点到原点;
使用上面的等式,相对于坐标原点所放对象;
平移给定点回到原始位置。
2. 几何图形像素化相关原理
“走样”的概念
答:光栅是由离散的点组成的,在光栅显示设备上表现直线、多边形等,必须在离散的位置采样,由于采样不充分重建后造成的信息失真,就是走样。
反走样方法
答:首先将象素均匀分割成n个子象素。则每个象素的面积为1/n。计算每个子象素对原象素的贡献,并保存在一张二维的加权表中。然后求出所有中心落于直线段内的子象素。最后计算所有这些子像素对原像素亮度贡献之和∑wi的值,该值乘以最大灰度值作为该象素的显示灰度值。
3.光照模型相关原理
光照模型,主要用于对象表面某光照位置的颜色计算
任一发出辐射能量的对象称为光源,辐射光线从一点光源出发并在空间传播,光线将会衰减,假设距离为d1。可使用下列公式来表现光源强度:
Fradatten(d1)=1/(a0+a1d1+a2d12)
用户可以调整a0,a1,a2的值得到不同的光照效果。
光照模型使用为表面设定的各种光学特性来计算表面光照效果。这些特性包括透明度 、颜色、反射系数以及各种表面纹理参数。
场景中的背景光或环境光是光照模型中必须考虑的另一因素。
二.系统界面与操作说明
(1)系统界面与图形显示示例
(2)操作说明
Up:向前走
Down:向后退
Left:向左转
Right:向右转
PgUp:抬头
PgDown:低头
三.源程序
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)
using namespace std;
//DataType.h
#pragma once
/*-------------
类型定义
--------------*/
// 纹理图像结构
struct TEXTUREIMAGE
{
int imgWidth; // 纹理宽度
int imgHeight; // 纹理高度
unsigned char byteCount; // 每个象素对应的字节数,:位图,:带alpha通道的位图
unsigned char *data; // 纹理数据
};
// BMP文件头
#pragma pack(2)
struct BMPFILEHEADER
{
un
文档评论(0)