版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、实验六 2D太阳系绘制一、实验目的1、掌握2D太阳系绘制方法2、掌握矩阵堆栈流程3、进一步掌握复合2D图形变换二、实验环境 硬件要求:PC机,主流配置,最好为独立显卡,显存512M以上。 软件环境:操作系统:Windows XP。语言开发工具:Microsoft Visual studio 2008,Visual C+。三、实验内容与要求要求: 实验课上老师要求的效果截图、及其相应代码 拷贝到实验报告文档里。 WORD文档命名方式:学号姓名-实验序号-实验名称。 内容:1、 已知太阳半径Rs,地球半径Re,月球半径Rm,每个球都会自转,地球绕太阳公转,月球绕地球公转。2、 基本框架程序2DSu
2、nSystem0.cpp 3、设计世界坐标系,设计裁剪窗口大小,编写2D太阳系代码。 4、效果截图 图6-1 2D太阳系效果 5、分别在太阳、地球、月球位置添加中文字体“太阳”、“地球”、“月球”6、在修改的代码上加上自己的一些点缀修饰性图形 四、 参考函数: 1、 void glPushMatrix(void) 功能:把当前操作矩阵压入矩阵堆栈,记住当前所在的位置。 复制活动栈顶的当前矩阵并将其存入第二个栈位置 2、void glPopMatrix(void) 功能:当前操作矩阵出栈,它下面的矩阵作为当前矩阵,返回到以前所在的位置。 破坏栈顶矩阵,栈的第二个矩阵成为当前矩阵。如果要弹出栈顶,
3、栈内至少要有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,大家好"
4、); /写字“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
5、(), 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; stri!='0' +i)if( IsDBCSLeadByte(stri) )+i;+len;/ 将混合字
6、符转化为宽字符wstring = (wchar_t*)malloc(len+1) * sizeof(wchar_t);MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, str, -1, wstring, len);wstringlen = L'0'/ 逐个输出字符for(i=0; i<len; +i)wglUseFontBitmapsW(hDC, wstringi, 1, list);glCallList(list);/ 回收所有临时资源free(wstring);glDeleteLists(list, 1);4、圆的绘制 1)圆盘绘
7、制方法 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_NICE
8、ST); 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 "stdafx.h&quo
9、t;#include <glut.h>#include <math.h>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();void earth();int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE
10、hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) UNREFERENCED_PARAMETER(hPrevInstance); UNREFERENCED_PARAMETER(lpCmdLine); char *argv = "hello ", " " int argc = 2; / must/should match the number of strings in argv glutInit(&argc, argv); /初始化GLUT库; glutInitWindowSize(700,700); /
11、设置显示窗口大小 glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB); /设置显示模式;(注意双缓冲) glutCreateWindow("A Rotating Sun System"); / 创建显示窗口 glutDisplayFunc(Display); /注册显示回调函数 glutReshapeFunc(Reshape); /注册窗口改变回调函数 myinit(); glutTimerFunc(200, mytime, 10); glutMainLoop(); /进入事件处理循环 return 0;void myinit()glPo
12、intSize(10);glLineWidth(8);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);void
13、 Display(void) glClear(GL_COLOR_BUFFER_BIT); glMatrixMode(GL_MODELVIEW); /设置矩阵模式为模型变换模式,表示在世界坐标系下 glLoadIdentity(); /将当前矩阵设置为单位矩阵 sun(); earth(); glutSwapBuffers(); /双缓冲的刷新模式;void sun()glRotatef(as,0,0,1);glPushMatrix(); glPushMatrix();glColor3f(1,0,0);glutWireSphere(rs,40,40); glPopMatrix(); glColo
14、r3f(1,1,0);glBegin(GL_POINTS);glVertex2f(xs+rs,ys);glEnd();glPopMatrix();void earth()glPushMatrix();glRotatef(aes,0,0,1);glTranslatef(xe,ye,0);glRotatef(ae,0,0,1);glTranslatef(-xe,-ye,0);glPushMatrix();glPushMatrix();glColor3f(0,0,1);glutWireSphere(re,40,40);glPopMatrix();glColor3f(1,1,0);glBegin(GL_POINTS);glVertex2f(xs+rs,ys);glEnd();glPopMatrix();glPopMatrix();void mytime(int value)as+=1;ae+=1;aes+=1; glutPostRedisplay(); /重画,相当于重新调用Display(),改编后的变量得以传给绘制函数 glutTimerFunc(200, myti
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026山西省中西医结合医院招聘博士研究生20人备考题库附答案详解(能力提升)
- 2026年防洪工程地质勘察案例研究
- 2023年天津市轨道交通集团有限公司校园招聘考试题库及答案解析
- 2026春贵州贵阳市观山湖区第七中学招临聘教师6人备考题库完整答案详解
- 2026一季度重庆市属事业单位公开遴选28人备考题库及完整答案详解一套
- 2026年海安市部分事业单位公开选调工作人员5人备考题库附答案详解(满分必刷)
- 四川省资阳市2026届生物高一第一学期期末教学质量检测试题含解析
- 2026年工程地质勘察报告撰写技巧
- 妇幼保健员常识强化考核试卷含答案
- 炉内器件高纯处理工岗前技术评优考核试卷含答案
- 银行消保投诉分析培训
- 2020春人教版部编本三年级下册语文全册课文原文
- 《微生物与杀菌原理》课件
- 医疗机构药事管理规定版
- 北京市历年中考语文现代文之议论文阅读30篇(含答案)(2003-2023)
- 档案学概论-冯惠玲-笔记
- 全国民用建筑工程设计技术措施-结构
- (正式版)YST 1693-2024 铜冶炼企业节能诊断技术规范
- 1999年劳动合同范本【不同附录版】
- 全国优质课一等奖职业学校教师信息化大赛《语文》(基础模块)《我愿意是急流》说课课件
- 初三寒假家长会ppt课件全面版
评论
0/150
提交评论