版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026母婴用品行业渠道变革与品牌营销策略研究报告
- 20265G通信基础设施建设与商业化落地潜力研究
- 2026装配制造行业市场效率分析及自动化生产与精益化服务研究
- 2026年“十一三”建队日第二批新队员分批入队实施方案
- 2026人工智能技术在金融领域应用现状调查与风险管理策略研究
- 2026年银行客户经理业务知识等级考核题库及答案(共50题)
- 厂区叉车调度员岗位面试题及答案
- 2026年中小学保密宣传教育青少年简易知识测试题
- 医务人员职业暴露与预防培训考试题及答案
- 2026年员工关系专员校招综合能力测试卷及答案
- 初中物理八年级下册《摩擦力》教学设计
- 岳阳观盛投资发展有限公司招聘笔试题库2026
- 空调水管道试压冲洗专项方案
- 家用电器产品检测合同协议
- 2025年吉林省地理生物会考真题试卷+解析及答案
- 2026年辽宁省铁岭市西丰县第二中学中考二模数学试题(含答案)
- 2026年九省联考化学答案及试卷
- 2026全国高考体育单招考试语文试题试题(含答案)
- 2026年大学生人文知识竞赛题库及答案
- 2025年管理岗面试试题及答案
- 2025西藏拉萨市大学生村(居)科技专干、医务人员、农业农村工作专员和乡村幼教人员补聘141人笔试备考题库及答案解析
评论
0/150
提交评论