- 1、本文档共34页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
opengl实现太阳系天体运动
Opengl实现太阳系天体运动
本文主要讲OpenGL中的几何变换。
我们生活在一个三维的世界——如果要观察一个物体,我们可以:1、从不同的位置去观察它。(视点变换/视图变换,gluLookAt)2、移动或者旋转它,当然了,如果它只是计算机里面的物体,我们还可以放大或缩小它。(模型变换)3、如果把物体画下来,我们可以选择:是否需要一种“近大远小”的透视效果。另外,我们可能只希望看到物体的一部分,而不是全部(剪裁)。(投影变换)4、我们可能希望把整个看到的图形画下来,但它只占据纸张的一部分,而不是全部。(视口变换)这些,都可以在OpenGL中实现。
1、模型变换和视图变换从“相对移动”的观点来看,改变观察点的位置与方向和改变物体本身的位置与方向具有等效性。在OpenGL中,实现这两种功能甚至使用的是同样的函数。由于模型和视图的变换都通过矩阵运算来实现,在进行变换前,应先设置当前操作的矩阵为“模型视图矩阵”。设置的方法是以GL_MODELVIEW为参数调用glMatrixMode函数,像这样:glMatrixMode(GL_MODELVIEW);通常,我们需要在进行变换前把当前矩阵设置为单位矩阵。这也只需要一行代码:glLoadIdentity();
然后,就可以进行模型变换和视图变换了。进行模型和视图变换,主要涉及到三个函数:glTranslate*,把当前矩阵和一个表示移动物体的矩阵相乘。三个参数分别表示了在三个坐标上的位移值。glRotate*,把当前矩阵和一个表示旋转物体的矩阵相乘。物体将绕着(0,0,0)到(x,y,z)的直线以逆时针旋转,参数angle表示旋转的角度。glScale*,把当前矩阵和一个表示缩放物体的矩阵相乘。x,y,z分别表示在该方向上的缩放比例。
注意我都是说“与XX相乘”,而不是直接说“这个函数就是旋转”或者“这个函数就是移动”,这是有原因的,马上就会讲到。假设当前矩阵为单位矩阵,然后先乘以一个表示旋转的矩阵R,再乘以一个表示移动的矩阵T,最后得到的矩阵再乘上每一个顶点的坐标矩阵v。所以,经过变换得到的顶点坐标就是((RT)v)。由于矩阵乘法的结合率,((RT)v) = (R(Tv)),换句话说,实际上是先进行移动,然后进行旋转。即:实际变换的顺序与代码中写的顺序是相反的。由于“先移动后旋转”和“先旋转后移动”得到的结果很可能不同,初学的时候需要特别注意这一点。OpenGL之所以这样设计,是为了得到更高的效率。但在绘制复杂的三维图形时,如果每次都去考虑如何把变换倒过来,也是很痛苦的事情。这里介绍另一种思路,可以让代码看起来更自然(写出的代码其实完全一样,只是考虑问题时用的方法不同了)。让我们想象,坐标并不是固定不变的。旋转的时候,坐标系统随着物体旋转。移动的时候,坐标系统随着物体移动。如此一来,就不需要考虑代码的顺序反转的问题了。
运行结果:
#include gl/gl.h#include gl/glu.h#include gl/glut.h#include stdio.h#pragma comment(lib, OpenGL32.lib)#pragma comment(lib, glu32.lib)#pragma comment(lib, glut32.lib)void init(){glClearColor(0.0, 0.0, 0.0, 0.0);glShadeModel(GL_FLAT);}void drawsquare( int width ){glRecti( -width/2, -width/2, width/2, width/2 );}void display(){glClear(GL_COLOR_BUFFER_BIT);//draw axis{const float axislen = 300.0f;const float axislenh = axislen/2;glBegin(GL_LINES);glColor3f( 0.0f, 1.0f, 0.0f );//指定线的颜色,绿色// x-axisglVertex2f( -axislenh, 0.0f);glVertex2f( axislenh, 0.0f);// x-axis arrowglVertex2f( axislenh, 0.0f);glVertex2f( axislenh-7, 3.0f);glVertex2f( axislenh, 0.0f);glVertex2f( axislenh-7,-3.0f);glColor3f( 1.0f, 0.0f, 0.0f );//指定线的颜色,红色// y
您可能关注的文档
- 2010石景山中考一模英语试题.doc
- 法律英语背诵经典.doc
- 中秋的多种英语表达.docx
- 2012年职称英语考试新增文章-阅读理解和完型填空题(全)-卫生类(A级)..doc
- 安慰他人时 日常生活用语8000句.doc
- 2006英语四级.docx
- 各种心情表情英语表达.doc
- 闽教版三年级英语下册.doc
- 带听力上海黄浦二模卷带答案..doc
- 高级英语一只有答案.doc
- 建筑施工方案——湛江恒大绿洲施工临时用水用电施工方案(23P).pdf
- 建筑施工方案——咸宁碧桂园施工管理工作报告(41P) .docx
- 建筑施工方案——中国建筑脚手架方案(正式)(18P) .docx
- 建筑施工方案——郑州恒大绿洲交楼施工组织设计-(1)(29P).docx
- 建筑施工方案——许昌碧桂园安全文明施工组织设计(32P) .docx
- 建筑施工方案——襄阳恒大翡翠华庭施工组织设计(34P) .docx
- 建筑施工方案——中建八局新建堤防挡土墙专项施工方案(78P) .docx
- 建筑施工方案——万科玉泉钢筋施工方案(35P) .docx
- 建筑施工方案——中建八局三亚喜来登主体施工组织设计鲁班奖(157P) .docx
- 建筑施工方案——镇江恒大绿洲2号楼施工任务书(21P).docx
最近下载
- RBA6.0责任商业联盟行为准则管理体系全套程序文件汇编(含表格).pdf VIP
- 2024年时事政治知识点汇总.pdf VIP
- 预制舱安装方案.doc
- 三氯化铝(MSDS)安全技术说明书.pdf VIP
- 强责任转作风、严纪律、提效能活动心得体会范文(通用9篇).doc
- 肿瘤学复习重点总结.docx VIP
- 任务一:家庭垃圾我会分--垃圾分类我能行 (教案)浙教版劳动二年级上册.docx
- 第8单元 第24章 第1节 人口增长与环境保护2023-2024学年八年级下册生物同步教学设计(北师大版).docx
- 《HSK标准教程4上》第1课《简单的爱情》自用课件.pptx
- 2021最新苏教版科学(2017)六年级上册教学计划及教学进度表.docx
文档评论(0)