一些特殊函数的介绍

  1. glutWireSphere(r,s1,s2) 该函数用于渲染一个球体(由线条构成球体)。球体球心位于原点。在OpenGL中默认的原点就是窗口客户区的中心;
    r 是球的半径,s1是以Z轴上线段为直径分布的圆周线的条数,s2是围绕在Z轴周围的线的条数

  2. glRotatef(-80.0f,10.0f,1.0f,0.0f) 表示将当前图形沿方向向量(-10,1,0)顺时针旋转80度

  3. glTranslatef(0.0f,-20.0f,-40.0f) 表示将当前图形向x轴平移0,向y轴平移-20,向z轴平移-40

  4. 注意如果先旋转在绘制,则是表现为自转;而先绘制在旋转,再移动一定距离,是为了到达绘公转的地方

  5. 我们在变换坐标的时候,使用的是glTranslatef(),glRotaef()等函数来操作,操作的是什么呢?操作的是当前矩阵,我们也知道,这些坐标变换(翻转,旋转也好)都是通过操作矩阵来实现的,而矩阵相乘是会叠加的,当你用完一个变换函数后,当前操作的矩阵就被改变了,当你还停留在变换以前的思维,我在这个地方绘制恰好是我想要的时候,你会发现再绘制出来的不是在你想要的位置,因为你在操作变换的时候,当前矩阵被改变了。

    当你做了一些移动或旋转等变换后,使用glPushMatrix();OpenGL 会把这个变换后的位置和角度保存起来。然后你再随便做第二次移动或旋转变换,再用glPopMatrix();OpenGL 就把刚刚保存的那个位置和角度恢复。

实验截图

代码如下

#include "GL\glut.h"static int year = 0, day = 0;void display(void)
{glClear(GL_COLOR_BUFFER_BIT);  //清空颜色缓冲区glColor3f(1, 1, 1);   //重置颜色,白色glPushMatrix();  //压栈glutWireSphere(1, 20, 16);   //绘制太阳glRotatef((GLfloat)year, 0, 1, 0);  //沿y轴旋转 glTranslatef(3, 0, 0); //将场景中的物体沿x轴正方向移动2个单位长glRotatef((GLfloat)day, 0, 1, 0);  //沿y轴旋转glutWireSphere(0.2, 10, 8);   //绘制行星glPopMatrix(); //出栈glutSwapBuffers();glFlush();   //刷新窗口以显示当前绘制图形
}void init(void)
{glClearColor(0, 0, 0, 0);glShadeModel(GL_FLAT); //选择平面明暗模式或光滑明暗模式
}void reshape(int w, int h)
{glViewport(0, 0, (GLsizei)w, (GLsizei)h);   //设置机口glMatrixMode(GL_PROJECTION);  //指定哪一个矩阵是当前矩阵glLoadIdentity();gluPerspective(60, (GLfloat)w / (GLfloat)h, 1.0, 20);   //创建透视投影矩阵(fovy,aspect,zNear,zFar);glMatrixMode(GL_MODELVIEW);glLoadIdentity();gluLookAt(0, 5, 5, 0, 0, 0, 0, 1, 0);
}
void keyboard(unsigned char key, int x, int y)
{switch (key){case 'd':day = (day + 10) % 360;glutPostRedisplay();break;case 'D':day = (day - 10) % 360; // 大写情况下是逆向的glutPostRedisplay();break;case 'y':year = (year + 5) % 360;glutPostRedisplay();break;case 'Y':year = (year - 5) % 360;  // 大写情况下是逆向的glutPostRedisplay();break;default:break;}
}int main(int argc, char *argv[])
{glutInit(&argc, argv); //固定格式glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);   //缓存模式glutInitWindowSize(600, 600);    //显示框的大小glutInitWindowPosition(100, 100); //确定显示框左上角的位置glutCreateWindow("第三次作业");init(); // 初始化glutDisplayFunc(display); // 执行显示glutReshapeFunc(reshape);glutKeyboardFunc(keyboard);glutMainLoop(); //进人GLUT事件处理循环return 0;
}

总结

本次任务是对opengl中绘制的顺序和逻辑考察,参考了网上的一些好的代码,感觉学到了好多东西

OPengl实现小球围绕大球旋转的效果相关推荐

  1. java 运动的大球吃小球_大球吃小球

    Ball.java package day7; import java.awt.Color; import java.awt.Graphics; public class Ball { int x,y ...

  2. canvas小球绕大球转动动画

    <!DOCTYPE html> <html> <head> <title>html拖拽事件</title> <script src=' ...

  3. 案例06:大球自转+小球公转+移动

    OpenGL + OpenGL ES +Metal 系列文章汇总 这个案例是OpenGL中的一个比较经典的综合案例,结合了OpenGL中大部分知识点,下面就来了解下这个案例 先来看看最终的效果 整体的 ...

  4. unity3D台球游戏之球杆围着白球旋转瞄准目标

    有一个星期没写博客了,最近搬到同学的工作室来混了,上一个游戏是我用unity做的第一个游戏,变成web版和PC版很easy,但是变成android版的时候我就倒霉咯,我在虚拟机上和真机上都不能运行,设 ...

  5. unity3D台球游戏之球杆围着白球旋转瞄准目标 ***

    unity3D台球游戏之球杆围着白球旋转瞄准目标 有一个星期没写博客了,最近搬到同学的工作室来混了,上一个游戏是我用unity做的第一个游戏,变成web版和PC版很easy,但是变成android版的 ...

  6. 第十五篇:大球联赛与小球联赛

    关于大小球的研究,是一个资深玩家必须重视的课题,很多人研究赔率和让球盘口,而对庄家为每一场球设置的大小球盘与比赛走势之间的关联,知之甚少.其实,大小球盘,同样可以成为你分析比赛的一个重要辅助工具. 理 ...

  7. 大球吞小球html5游戏在线玩,大球吃小球大作战

    大球吃小球大作战是以大鱼吃小鱼这个定论做的一款休闲类游戏,游戏玩法如题,尽量多的吃掉比你小的,不要被比你大的吃掉了哟. 官方介绍 大球吃小球大作战是一款酷萌的休闲游戏,玩家在游戏中就要大球吃小球,努力 ...

  8. Python大球吃小球

    本小游戏采用了pygame模块 1.产生随机颜色的小球.2.小球具有移动.吃别的小球.绘制这3个方法.3.鼠标点击事件 上源码 // 大球吃小球 from enum import Enum, uniq ...

  9. 大球吃小球html5,怎么用html5制作简单的大球吃小球的游戏

    匿名用户 1级 2017-12-16 回答 <html> <head> <title> 大球吃小球by大奔 </title> <script ty ...

最新文章

  1. python accept解析_python中requests库使用方法详解
  2. 红绿灯问题(位运算)
  3. OpenCV图像数据访问,查询表和时间消耗测试
  4. 45度炸队Alpha冲刺博客集
  5. C# 数据结构--排序[下]
  6. 七种方式,教你在SpringBoot初始化时搞点事情!
  7. 小时光扫地机器人圆圆_小时光:圆圆录像功能已开启,无死角录制林一霸道总裁一面,超甜...
  8. MT7621搭载openwrt实现U盘等设备自动挂载
  9. 多个excel工作簿合并_无需VBA代码,1分钟合并多个工作簿至一个工作簿!
  10. 可以说是迄今为止最好用的右键菜单管理工具
  11. java 计算农历_java计算农历日期
  12. js多重循环遍历渲染
  13. 电影和电视Movies and TV
  14. 6、T5L DGUS ll 应用开发指南摘录(一)
  15. svn查看ip linux,查看svn服务器的ip地址
  16. 最小二乘法直线拟合及其Matlab实现
  17. Android系统自定义关机充电图标
  18. 识别win10和linux的MBR,Win10下安装ElementaryOS双系统:UEFI和Legacy引导
  19. 《软件测试》第十章 外国语言测试
  20. Android屏幕背光调整机制

热门文章

  1. php共享汽车怎么扫码开车,共享汽车套路真多!看完恍然大悟
  2. unity烘焙室外黑斑
  3. HDU 5015——233 Matrix
  4. 估值调整 - Quanto 调整
  5. 翻译连载 | JavaScript轻量级函数式编程-第4章:组合函数 |《你不知道的JS》姊妹篇... 1
  6. 基于计算机视觉的行人及非机动车规范系统
  7. PDF文件内部结构分析查看器-java
  8. 德国为新能源付出了哪些巨大的代价?
  9. 4G EPS 中的 Bearer
  10. LeetCode 558. 四叉树交集