OpenGL

您所在的位置:网站首页 opengl画地球 OpenGL

OpenGL

2023-10-28 20:59| 来源: 网络整理| 查看: 265

学习于OpenGL入门、OpenGL编程指南、gluPerspective

#include "pch.h" #include #include #include #include const GLdouble Pi = 3.1415926536; /* 太阳半径69600km 地球半径6378km 月球半径1739km 地球到太阳的距离约为1.5亿km=150000000km 月亮到地球的距离约为 380000km */ /*修改不至于比例差距太大 太阳半径69600000km(放大100倍) 地球半径15945000km(放大 2500 倍) 月球半径4345000km (放大 2500 倍) 地球到太阳的距离约为1.5亿km=150000000km(保持不变) 月亮到地球的距离约为 38000000km(放大 100 倍) */ /* 假设三个天体都是球体,都处于同一平面 假设每个月都是30天,一年12个月,共有360天 太阳中心为原点,天体轨迹所在的平面表示了 X 轴与 Y 轴决定的平面, 且每年第一天,地球在 X 轴正方向上,月亮在地球的正 X 轴方向。 */ static int day = 200; double CalFrequency() { static int count; static double save; static clock_t last, current; double timegap; ++count; if (count /* 新的函数,在空闲时调用,作用是把日期往后移动一天并重新绘制,达到动画效果 */ ++day; if (day >= 360) day = 0; myDisplay(); } int main(int argc, char *argv[]) { glutInit(&argc, argv); /*glutInit,对 GLUT 进行初始化,这个函数必须在其它的 GLUT 使用之前调用一次。 */ glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE); // 设置显示方式,使用RGB颜色 GLUT_DOUBLE 双缓冲 glutInitWindowPosition(100, 100); /*设置窗口在屏幕中的位置*/ glutInitWindowSize(400, 400); /*设置窗口的大小*/ glutCreateWindow("太阳,地球和月亮"); // 改了窗口标题 glutDisplayFunc(&myDisplay); glutIdleFunc(&myIdle); glutMainLoop(); /*进行一个消息循环*/ return 0; }

void gluPerspective( GLdouble fovy, //角度 GLdouble aspect,//视景体的宽高比 GLdouble zNear,//沿z轴方向的两裁面之间的距离的近处 GLdouble zFar //沿z轴方向的两裁面之间的距离的远处 ) 这个函数指定了观察的视景体(frustum为锥台的意思,通常译为视景体)在世界坐标系中的具体大小。

(1)参数fovy,指定视景体的视野的角度,以度数为单位,y轴的上下方向(Specifies the field of view angle, in degrees, in the y direction.)

(2)参数aspect,应该与窗口的宽高比大小相同。比如说,aspect=2.0表示在观察者的角度中物体的宽度是高度的两倍,在视口中宽度也是高度的两倍,这样显示出的物体才不会被扭曲。(Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height).)

(3)参数zNear,指定观察者到视景体的最近的裁剪面的距离(必须为正数) (Specifies the distance from the viewer to the near clipping plane (always positive).)

(4)参数zFar,指定观察者到视景体的最远的裁剪面的距离(必须为正数) (Specifies the distance from the viewer to the far clipping plane (always positive).)

由gluPerspective产生的矩阵是与当前矩阵与指定的矩阵相乘得到的,就好像是调用glMatrix()产生的矩阵一样。为了使透视矩阵替代当前矩阵,在调用gluPerspective之前要先调用glLoadidentity()这个函数(就是把当前矩阵s设置为单位矩阵)。 在这里插入图片描述



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3