OpenGL之路(五)制作旋转飞机模型
- #include <gl/glut.h>
- #include <gl/GLU.h>
- #include <gl/GL.h>
- #pragma comment(lib, "opengl32.lib")
- #pragma comment(lib, "glut32.lib")
- #pragma comment(lib, "glu32.lib")
- #pragma comment(lib, "glut.lib")
- #include <math.h>
- void Cube() //正方体
- {
- glBegin(GL_QUAD_STRIP);//填充凸多边形
- glVertex3f(0.0f, 0.0f, 0.0f);
- glVertex3f(0.0f, 1.0f, 0.0f);
- glVertex3f(1.0f, 0.0f, 0.0f);
- glVertex3f(1.0f, 1.0f, 0.0f);
- glVertex3f(1.0f, 0.0f, -1.0f);
- glVertex3f(1.0f, 1.0f, -1.0f);
- glVertex3f(0.0f, 0.0f, -1.0f);
- glVertex3f(0.0f, 1.0f, -1.0f);
- glVertex3f(0.0f, 0.0f, 0.0f);
- glVertex3f(0.0f, 1.0f, 0.0f);
- glEnd();
- glBegin(GL_QUAD_STRIP);
- glVertex3f(0.0f, 0.0f, 0.0f);
- glVertex3f(1.0f, 0.0f, 0.0f);
- glVertex3f(0.0f, 0.0f, -1.0f);
- glVertex3f(1.0f, 0.0f, -1.0f);
- glVertex3f(0.0f, 1.0f, 0.0f);
- glVertex3f(1.0f, 1.0f, 0.0f);
- glVertex3f(0.0f, 1.0f, -1.0f);
- glVertex3f(1.0f, 1.0f, -1.0f);
- glEnd();
- }
- void Circle() //圆面
- {
- glBegin(GL_TRIANGLE_FAN);//扇形连续填充三角形串
- glVertex3f(0.0f, 0.0f, 0.0f);
- int i = 0;
- for (i = 0; i <= 375; i += 15)
- {
- float p = i * 3.14 / 180;
- glVertex3f(sin(p), cos(p), 0.0f);
- }
- glEnd();
- }
- void Cylinder() //圆柱
- {
- glBegin(GL_QUAD_STRIP);//连续填充四边形串
- int i = 0;
- for (i = 0; i <= 375; i += 15)
- {
- float p = i * 3.14 / 180;
- glVertex3f(sin(p), cos(p), 1.0f);
- glVertex3f(sin(p), cos(p), 0.0f);
- }
- glEnd();
- Circle();
- glTranslatef(0, 0, 1);
- Circle();
- }
- void Cone() //圆锥
- {
- glBegin(GL_QUAD_STRIP);//连续填充四边形串
- int i = 0;
- for (i = 0; i <= 390; i += 15)
- {
- float p = i * 3.14 / 180;
- glVertex3f(0, 0, 1.0f);
- glVertex3f(sin(p), cos(p), 0.0f);
- }
- glEnd();
- Circle();
- }
- void AirPlane(float x, float y, float z)
- {
- static float i = 0, f = 0;
- i += 0.1;
- f += 0.01;
- if (i > 360)
- i = 0;
- if (f > 360)
- f = 0;
- glPushMatrix();
- glTranslatef(x, y, z);
- glRotatef(f, 1, 1, 1);
- glPushMatrix();
- glColor3f(0.5, 1.5, 0.5);
- glRotatef(i, 0, 1, 0);
- glTranslatef(0, 0, 0.5);
- glScalef(0.1, 0.05, 1);
- Cube(); //螺旋桨
- glPopMatrix();
- glTranslatef(0, -0.1, 0);
- glScalef(0.1, 0.1, 0.1);
- Cube();
- glScalef(10, 10, 10);
- glColor3f(1, 0, 1);
- glTranslatef(0.04, -0.05, -0.9);
- glScalef(0.1, 0.1, 1.5);
- Cylinder();
- glColor3f(0, 1, 0);
- glScalef(1, 1, 0.2);
- Cone();
- glColor3f(0, 1, 1);
- glTranslatef(0, 0.7, -4.5);
- glScalef(0.2, 2, 1);
- Cube();
- glTranslatef(-13, 0.3, 0);
- glScalef(27, 0.1, 1);
- Cube();
- glPopMatrix();
- }
- void renderScene(void)
- {
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
- glLoadIdentity();
- AirPlane(0, 0, -3);
- glutSwapBuffers();
- }
- void changeSize(int w, int h) {
- // 防止除数即高度为0
- // (你能够设置窗体宽度为0).
- if (h == 0)
- h = 1;
- float ratio = 1.0* w / h;
- // 单位化投影矩阵。
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity();
- // 设置视口大小为整个窗体大小
- glViewport(0, 0, w, h);
- // 设置正确的投影矩阵
- gluPerspective(45, ratio, 1, 1000);
- //以下是设置模型视图矩阵
- glMatrixMode(GL_MODELVIEW);
- glLoadIdentity();
- gluLookAt(0.0, 0.0, 5.0, 0.0, 0.0, -1.0, 0.0f, 1.0f, 0.0f);//设置观測点
- }
- int main(int argc, char * argv[])
- {
- glutInit(&argc, argv);
- glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA);
- glutInitWindowPosition(100, 100);
- glutInitWindowSize(320, 320);
- glutCreateWindow("Hello OpenGL");
- glutDisplayFunc(renderScene);
- glutIdleFunc(renderScene); //指定程序空暇时调用函数
- glutReshapeFunc(changeSize); //指定窗体形状变化时的回调函数
- glEnable(GL_DEPTH_TEST);
- glutMainLoop();
- return 0;
- }
预览图
OpenGL之路(五)制作旋转飞机模型的更多相关文章
- 我的VSTO之路(五):Outlook初步开发之联系人扩展
原文:我的VSTO之路(五):Outlook初步开发之联系人扩展 上一讲我们完成对Word的介绍,文本开始,我将着重介绍Outlook.Outlook是微软Office中一个非常实用的工具,尤其在一个 ...
- css3制作旋转立方体相册
首先让我们来看一下最终效果图: 当鼠标放在图片上是介个样子滴: 是不是觉得很好看?那接下来就一起制作吧! 我个人觉得编程,首先是思路,然后是代码,一起分析一下这个效果的思路. 1.背景颜色,它属于一种 ...
- 用css3制作旋转加载动画的几种方法
以WebKit为核心的浏览器,例如Safari和Chrome,对html5有着很好的支持,在移动平台中这两个浏览器对应的就是IOS和Android.最近在开发一个移动平台的web app,那么就有机会 ...
- CSS3制作旋转导航
慕课网学习CSS3时,遇到个习题,觉得有必要总结学习下:CSS3制作旋转导航 慕课网习题地址:http://www.imooc.com/code/1883 示例及源码地址:http://codepen ...
- CSS3制作旋转的小风车
制作旋转小风车 一 我先搭建一个大盒子400x400px大盒子里面嵌套四个小盒子200x200px,放在一起肯定是四个排在一行,我想要的效果是上下各两个, css样式 *{ margin:0; pad ...
- 【Android 应用开发】OpenGL ES 2.0 -- 制作 3D 彩色旋转三角形 - 顶点着色器 片元着色器 使用详解
最近开始关注OpenGL ES 2.0 这是真正意义上的理解的第一个3D程序 , 从零开始学习 . 案例下载地址 : http://download.csdn.net/detail/han120201 ...
- OpenGL ES 2.0 -- 制作 3D 彩色旋转三角形 - 顶点着色器 片元着色器 使用详解
最近开始关注OpenGL ES 2.0 这是真正意义上的理解的第一个3D程序 , 从零开始学习 . 案例下载地址 : http://download.csdn.net/detail/han120201 ...
- SCARA——OpenGL入门学习五六(三维变换、动画)
OpenGL入门学习(五) 此课为三维变换的内容,比较枯燥.主要是因为很多函数在单独使用时都不好描述其效果, 在前面绘制几何图形的时候,大家是否觉得我们绘图的范围太狭隘了呢?坐标只能从-1到1,还只能 ...
- NeHe OpenGL教程 第五课:3D空间
转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...
随机推荐
- 多线程下,多次操作数据库报错,There is already an open DataReader associated with this Command which must be closed first.
原文:https://www.cnblogs.com/sdusrz/p/4433108.html 执行SqlDataReader.Read之后,如果还想用另一个SqlCommand执行Insert或者 ...
- ubuntu系统下如何禁用笔记本触摸板
命令行方式,得每次用终端输入命令行设置,不方便. sudo rmmod psmouse # 用来禁用触摸板 sudo modprobe psmouse # 用来启用触摸板 想 ...
- 编辑被标记为“只读”的Word文档
从邮件接收到的Word文档,打开时总是被标记为“只读”,在阅读时对其进行编辑,但不能保存,会提示文档为只读的.要想对其进行编辑并保存,需要进行一定的操作. 进入文件所在的目录,鼠标右键点击Word文档 ...
- mysql通过mysqldump实现备份,脚本编写
每日三点同步mysql备份任务 crontab -e 0 3 * * * sh /home/shell/mysql_bakup.sh >> /dev/null 2>&1 my ...
- 【Luogu】P1941飞扬的小鸟(DP)
我发现现在没了题解我做普及提高+的题也做不了 更不要说这些提高+难度的题 此题是一个二维DP.暴力是三重循环ijk,k枚举在i位置上的点击次数.即 for(int i=1;i<=n;++i) ...
- Codevs 1021 玛丽卡==洛谷 P1186
时间限制: 2 s 空间限制: 128000 KB 题目等级 : 大师 Master 题目描述 Description 麦克找了个新女朋友,玛丽卡对他非常恼火并伺机报复. 因为她和他们不住在同一个 ...
- Fabrice Bellard其人 ---- FFMPEG及其他……
有些计算机科学家的名字耳熟能详:阿兰·图灵(Alan Turing).高纳德(Donald Knuth).艾兹赫尔·戴克斯特拉(Edsger Dijkstra),这些人的名气甚至大于他们突破性的成就. ...
- HDU 5009 Paint Pearls(西安网络赛C题) dp+离散化+优化
转自:http://blog.csdn.net/accelerator_/article/details/39271751 吐血ac... 11668627 2014-09-16 22:15:24 A ...
- jquery实现表单验证,所以的验证通过后方可提交
<html> <head> <meta http-equiv="content-type" content="tex ...
- Redis数据结构之跳跃表
跳跃表是一种有序数据结构,它通过在每个节点中维持多个指向其他节点的指针,从而达到快速访问节点的目的. 一.跳跃表结构定义1. 跳跃表节点结构定义: 2. 跳跃表结构定义: 示例: 二.跳跃表节点中各种 ...