77范文网 - 专业文章范例文档资料分享平台

2D太阳系绘制

来源:网络收集 时间:2020-04-20 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

实验六 2D太阳系绘制

一、实验目的

1、掌握2D太阳系绘制方法 2、掌握矩阵堆栈流程

3、进一步掌握复合2D图形变换

二、实验环境

硬件要求:

PC机,主流配置,最好为独立显卡,显存512M以上。 软件环境:

操作系统:Windows XP。

语言开发工具:Microsoft Visual studio 2008,Visual C++。

三、实验内容与要求

要求: 实验课上老师要求的效果截图、及其相应代码 拷贝到实验报告文档里。 WORD文档命名方式:学号姓名-实验序号-实验名称。

内容:

1、已知太阳半径Rs,地球半径Re,月球半径Rm,每个球都会自转,地球

绕太阳公转,月球绕地球公转。 2、基本框架程序2DSunSystem0.cpp

3、设计世界坐标系,设计裁剪窗口大小,编写2D太阳系代码。

4、效果截图

图6-1 2D太阳系效果

5、分别在太阳、地球、月球位置添加中文字体“太阳”、“地球”、“月球”

6、在修改的代码上加上自己的一些点缀修饰性图形

四、 参考函数:

1、 void glPushMatrix(void)

功能:把当前操作矩阵压入矩阵堆栈,记住当前所在的位置。 复制活动栈顶的当前矩阵并将其存入第二个栈位置

2、void glPopMatrix(void)

功能:当前操作矩阵出栈,它下面的矩阵作为当前矩阵,返回到以前所在的位置。

破坏栈顶矩阵,栈的第二个矩阵成为当前矩阵。如果要弹出栈顶,栈内至少要有2个矩阵,否则就会出错。

3、中文字体绘制

在程序头部声明所用到的字体函数

void selectFont(int size, int charset, const char* face); //选择字体

void drawCNString(const char* str); //生成中文字体函数

//在绘制部分调用字体函数,写中文字

selectFont(48, GB2312_CHARSET, \楷体_GB2312\设置字体楷体24号字

glRasterPos2f(250, 550); //定位首字位置

drawCNString(\,大家好\写字“Hello,大家好”

/************************************************************************/ /* 选择字体函数 */

/************************************************************************/

void selectFont(int size, int charset, const char* face) {

HFONT hFont = CreateFontA(size, 0, 0, 0, FW_MEDIUM, 0, 0, 0, charset, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_SWISS, face);

HFONT hOldFont = (HFONT)SelectObject(wglGetCurrentDC(), hFont); DeleteObject(hOldFont); }

/*****************************************************************

*******/ /* 生成中文字体函数 */

/************************************************************************/

void drawCNString(const char* str) {

int len, i;

wchar_t* wstring;

HDC hDC = wglGetCurrentDC(); GLuint list = glGenLists(1);

// 计算字符的个数

// 如果是双字节字符的(比如中文字符),两个字节才算一个字符 // 否则一个字节算一个字符 len = 0;

for(i=0; str[i]!='\\0'; ++i) { if( IsDBCSLeadByte(str[i]) ) ++i; ++len; }

// 将混合字符转化为宽字符

wstring = (wchar_t*)malloc((len+1) * sizeof(wchar_t)); MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, str, -1, wstring, len); wstring[len] = L'\\0';

// 逐个输出字符

for(i=0; i

// 回收所有临时资源 free(wstring);

glDeleteLists(list, 1); }

4、圆的绘制

1)圆盘绘制方法

GLUquadricObj *disk; //定义二次曲面对象

disk=gluNewQuadric(); //生成二次去面对像

gluDisk(disk,0.8,1,50,50); //内径0.8,外径1,盘心在原点

2)球的绘制方法

glutSolidSphere(1,80,80); //半径为1的球,球心在原点

5、反走样代码

glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

glEnable(GL_BLEND);

glEnable(GL_POINT_SMOOTH);

glHint(GL_POINT_SMOOTH_HINT, GL_NICEST); glEnable(GL_LINE_SMOOTH);

glHint(GL_LINE_SMOOTH_HINT, GL_NICEST); glEnable(GL_POLYGON_SMOOTH);

glHint(GL_POLYGON_SMOOTH_HINT, GL_NICEST);

四、思考题

1、如果太阳在平面任意位置,程序应该如何修改 ?

2、OpenGL图形变换靠什么来完成?在OpenGL中完成矩阵操作,需要注意哪些问题?

3、glPushMatrix(), glPopMatrix()是如何工作的?试运用这两个函数设计其他复合(或动画)图形。

#include \#include #include

float rs=50,re=30,rm=10;

float xs=0,ys=0,xe=150,ye=0,xm=200,ym=0; float as,ae,am,aes,ame;

void Display(void); void Reshape(int w, int h); void mytime(int value); void myinit(void); void sun();

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库2D太阳系绘制在线全文阅读。

2D太阳系绘制.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/zonghe/999893.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: