绘制恒星行星卫星三星系统
来源:互联网 发布:sql server 声明变量 编辑:程序博客网 时间:2024/05/06 22:20
这次的博客略微有点偷懒了,主要利用上次博客的成果略微加了一点点东西形成的,因为网上流传着一份三星系统,我这次就是先制作了一个两星系统,其实也就是多加了一个函数void glTranslatef(
GLfloat x, GLfloat y, GLfloat z)
;
意思非常容易,就是往x,y,以及z方向上平移的向量
插一句,其实利用这个和之前的旋转,略微控制下旋转的速度就可以制作出三星系统,对了,为了表示的更加清楚我还专门用几种不同的颜色表示不同的星球
代码如下
#include<GL/GLUT.H> #include <windows.h> #include <math.h> #include <gl/GL.h> float pi = 3.1415927f;float r = 0.3f;//earthfloat r1 = 0.8f;//sunfloat r2 = 0.1f;//moonGLfloat ra = 45,rb=45,rc=45;//rotate anglevoid myDisplay(void){glClear(GL_COLOR_BUFFER_BIT);glMatrixMode(GL_PROJECTION);glLoadIdentity();gluPerspective(100.0f, 1.0f, 1.0f, 10.0f);glMatrixMode(GL_MODELVIEW);glLoadIdentity();gluLookAt(0.0, -3.0, 3.5, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);glColor3f(1.0, 0.0, 0.0);glRotatef(rb, 0, 0, 1);for (int j = 0; j < 20; ++j){glBegin(GL_LINE_STRIP);for (int i = 0; i <= 20; i++){glVertex3f(r1*sin(pi*j / 20)*cos(2 * pi*i / 20), r1*sin(pi*j / 20)*sin(2 * pi*i / 20), r1*cos(pi*j / 20));}glEnd();glBegin(GL_LINE_STRIP);for (int i = 0; i <= 20; i++){glVertex3f(r1*sin(pi*i / 20)*cos(2 * pi*j / 20), r1*sin(pi*i / 20)*sin(2 * pi*j / 20), r1*cos(pi*i / 20));}glEnd();}glColor3f(0,0,1);glRotatef(ra, 0, 0, 1);glTranslatef(2.5, 0, 0);for (int j = 0; j < 20; ++j){glBegin(GL_LINE_STRIP);for (int i = 0; i <= 20; i++){glVertex3f(r*sin(pi*j / 20)*cos(2 * pi*i / 20), r*sin(pi*j / 20)*sin(2 * pi*i / 20), r*cos(pi*j / 20));}glEnd();glBegin(GL_LINE_STRIP);for (int i = 0; i <= 20; i++){glVertex3f(r*sin(pi*i / 20)*cos(2 * pi*j / 20), r*sin(pi*i / 20)*sin(2 * pi*j / 20), r*cos(pi*i / 20));}glEnd();}glColor3f(1.0, 1.0, 0.0);glRotatef(rc, 0, 0, 1);glTranslatef(0.8, 0, 0);for (int j = 0; j < 20; ++j){glBegin(GL_LINE_STRIP);for (int i = 0; i <= 20; i++){glVertex3f(r2*sin(pi*j / 20)*cos(2 * pi*i / 20), r2*sin(pi*j / 20)*sin(2 * pi*i / 20), r2*cos(pi*j / 20));}glEnd();glBegin(GL_LINE_STRIP);for (int i = 0; i <= 20; i++){glVertex3f(r2*sin(pi*i / 20)*cos(2 * pi*j / 20), r2*sin(pi*i / 20)*sin(2 * pi*j / 20), r2*cos(pi*i / 20));}glEnd();}glutSwapBuffers(); //交换两个缓冲区}void myIdle(void){ra++;rb = rb + 2;rc = rc + 10;if (ra >= 360)ra = 0;if (rb >= 360)rb = 0;if (rc >= 360)rc = 0;//myDisplay(); glutPostRedisplay();}int main(int argc, char *argv[]){glutInit(&argc, argv);//glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE);glutInitWindowPosition(100, 100);glutInitWindowSize(400, 400);glutCreateWindow("opengl1");glutDisplayFunc(&myDisplay);glutIdleFunc(&myIdle);glutMainLoop();return 0;}这里想要说明的一点是各种变换的矩阵都会叠加在之前的变换上面,比如在地球围绕太阳旋转的时候用到的矩阵,在月亮旋转地球的时候依然是有效的
留个疑问,就是如何去掉上面一种变换的效果
好像要用到 glPopMatrix();函数,挖个坑
来来来,上图
下一步的目标是用面片绘制立体图形,并且进行颜色处理,貌似要进入正题了哟
2 0
- 绘制恒星行星卫星三星系统
- 恒星、行星、卫星
- OpenGL学习10_绘制行星系统
- OpenGL学习10_绘制行星系统
- 辨异 —— 行星 vs 恒星
- opengl 行星系统
- C++ 实现太阳系行星系统
- “伽利略”卫星定位系统
- OpenGL 实例化 初探 之 实例化绘制行星带
- 北斗卫星定位系统原理
- GLONASS全球导航卫星系统
- 索引的三星系统
- 三星液晶拼接系统
- 恒星设计室
- 恒星论坛
- 恒星笔记
- 恒星笔记
- 恒星笔记
- 单选按钮和标签组合点击
- Oracle查询练习1
- 单调队列
- iOS开发cocoaPod的使用
- Android 开源框架Universal-Image-Loader完全解析(二)--- 图片缓存策略详解
- 绘制恒星行星卫星三星系统
- c++作业4
- leetcode——145——Binary Tree Postorder Traversal
- opencv fatal error:模块计算机类型“X86”与目标计算机类型“x64”冲突
- 安卓自定义控件的外观
- 原来boolean不能初始化为空和对应于mysql数据库中类型与存取
- 计算机系统——8086处理器寻址方式总结
- 报错
- JavaScript Math(算数对象)