版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、实验六2D太阳系绘制一、实验目的1掌握2D太阳系绘制方法2、掌握矩阵堆栈流程3、进一步掌握复合2D图形变换二、实验环境硬件要求:PC机,主流配置,最好为独立显卡,显存 512M以上。软件环境:操作系统:Win dows XP语言开发工具:Microsoft Visual studio 2008,Visual C+。三、实验内容与要求要求:实验课上老师要求的效果截图、及其相应代码拷贝到实验报告文档里。 WOR文档命名方式:学号姓名-实验序号-实验名称。内容:1、已知太阳半径Rs,地球半径Re,月球半径Rm每个球都会自转,地球 绕太阳公转,月球绕地球公转。2、基本框架程序2DSunSystem0.
2、cpp3 、设计世界坐标系,设计裁剪窗口大小,编写2D太阳系代码。4 、效果截图Sil Eu<t at 1x14;liysleio图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"); / 设置字体定位首字位置写字“ Hello ,大家好”楷体 24 号字glRasterPos2f(250, 5
4、50); / 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 =
5、(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; stri!='0' +i
6、)if( IsDBCSLeadByte(stri) )+i; +len;/ 将混合字符转化为宽字符wstring = (wchar_t*)malloc(len+1) * sizeof(wchar_t);len);MultiByteToWideChar(CP_ACP, MB_PRECOMPOSsEtrD, , -1, wstring, wstringlen = L'0'/ 逐个输出字符 for(i=0; i<len; +i) wglUseFontBitmapsW(hDC, wstringi, 1, list); glCallList(list);/ 回收所有临时资源 fre
7、e(wstring);glDeleteLists(list, 1);4、圆的绘制1 )圆盘绘制方法 GLUquadricObj *disk; /定义二次曲面对象disk=gluNewQuadric(); /gluDisk(disk,0.8,1,50,50); /2) 球的绘制方法glutSolidSphere(1,80,80); /生成二次去面对像内径 0.8 ,外径 1,盘心在原点半径为 1 的球,球心在原点5、反走样代码glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glEnable(GL_BLEND);glEnable(GL_POIN
8、T_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() 是如何工作
9、的?试运用这两 个函数设计其他复合(或动画)图形。#include "stdafx.h"#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;voidDisplay (void );voidReshape( intw,inth);voidmytime ( intvalue);voidmyinit (void);voidsun();voi
10、d earth ();int APIENTRY_tWinMain ( HINSTANCEhInstance , HINSTANCEhPrevInstance , LPTSTR lpCmdLine , int nCmdShow)UNREFERENCED_PARAM(EhTPEreRvInstance ); UNREFERENCED_PARAM(ElpTCEmRdLine ); char * argv = "hello " , " " ;int argc = 2; / must/should match the number of strings in ar
11、gvglutlnit (&argc , argv); / 初始化 GLU库;glutInitWindowSize (700,700);/ 设置显示窗口大小glutlnitDisplayMode (GLUT_DOUBL|E GLUT_RG);B / 设置显示模式;(注意双缓冲) glutCreateWindow ("A Rotating Sun System" ); / 创建显示窗口glutDisplayFunc (Display );/ 注册显示回调函数glutReshapeFunc (Reshape);/ 注册窗口改变回调函数myinit ();glutTimer
12、Func (200, myt ime , 10); glutMainLoop ();/ 进入事件处理循环return 0;void myinit ()glPointSize(10);glLineWidth(8);glBlendFunc (GL_SRC_ALPH, AGL_ONE_MlNUS_SRC_AL)P; HAglEnable (GL_BLEN)D;glEnable (GL_POlNT_SMOO)T;HglHint (GL_POlNT_SMOOTH_H,lNTGL_NlCEST);glEnable (GL_LlNE_SMOOT);HglHint (GL_LlNE_SMOOTH_Hl,NTG
13、L_NlCEST);glEnable (GL_POLYGON_SMO)O; THglHint (GL_POLYGON_SMOOTH_,HlNGTL_NlCES)T;void Display (void )glClear (GL_COLOR_BUFFER_B);lTglMatrixMode (GL_MODELVlE);W / 设置矩阵模式为模型变换模式,表示在世界坐标系下 glLoadldentity ();/ 将当前矩阵设置为单位矩阵sun();earth ();glutSwapBuffers (); / 双缓冲的刷新模式; void sun()glRotatef ( as,0,0,1);gl
14、PushMatrix ();glPushMatrix ();glColor3f (1,0,0); glutWireSphere (rs ,40,40);glPopMatrix ();glColor3f (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
15、,- 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, mytime, 10);void Reshape( G
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年深圳益新中学选聘教师真题
- 2025年湘潭市韶山市卫健系统招聘专业技术人员真题
- 2025年广西事业单位招聘真题
- 教师教研成果考核实施细则
- 教师安全责任不实个人自查及整改措施
- 机关工作落实不力问题整改措施
- 航空航天高性能碳基复合材料产业基地环评报告表
- 广西柳州市2025-2026学年高一下学期期末考试语文试题含答案
- 电动升降杆技术与应用解析
- 客户满意度优化统计分析指南
- 2026年高铁广告媒体创新实践与市场洞察报告
- 2026年新版甘肃辅警考试题库必考题(含答案解析)
- 2026年小学语文教师高频面试题包含详细解答
- SYT 6649-2025《油气管道管体缺陷修复技术规范》
- 气瓶委托管理合同
- 2026年秋季新教材统编版九年级上册道德与法治全册知识点背诵提纲精简版
- 《全国病媒生物监测技术指南(2025年)》
- (2025年)宜昌市伍家岗区网格员考试题库(含答案)
- 2026舞台灯光音响行业市场规模深度研究与发展战略分析报告
- 2026年基层选调生遴选笔试试卷(附答案)
- 山地丘陵村镇水土环境协同修复技术指南编制说明
评论
0/150
提交评论