#include <cmath>
#include "glut.h"
#include "iostream"
using namespace std; void init(void)
{
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
glClear(GL_COLOR_BUFFER_BIT);
cout << "init.." << endl;
glLineWidth(1.0f);
glColor3f(1.0, 0.0, 0.0);
glMatrixMode(GL_PROJECTION);//设置投影矩阵
glLoadIdentity();
gluOrtho2D(0.0, 600.0, 0.0, 600.0);//二维视景区域 左下角为原点 //glClear(GL_COLOR_BUFFER_BIT);
//glMatrixMode(GL_MODELVIEW);
//glLoadIdentity(); } int dir = 0;
int angle = 0;
// 绘制车轮
void DrawWheel(double x, double y, double r)
{
int sec = 10;
for (int i = 0; i <= sec; i++)
{
double delta = 3.1415926*2.0 / sec;
glBegin(GL_LINE_LOOP);
glVertex2f(x, y);
glVertex2f(x + r * cos(delta*i), y + r * sin(delta*i));
glVertex2f(x + r * cos(delta*(i + 1)), y + r * sin(delta*(i + 1)));
glEnd();
} } //绘制自行车
void DrawBike() {
glClear(GL_COLOR_BUFFER_BIT);//清除窗口显示内容
glColor3f(1.0f, 0.0f, 0); glPushMatrix();
glTranslatef(100+dir, 124, 0);
// 横车杆
glBegin(GL_LINES);
glVertex2f(0,0);
glVertex2f(100,0);
// 竖车杆
glVertex2f(70, 0);
glVertex2f(70, 30);
// 车把
glVertex2f(60, 30);
glVertex2f(80, 30);
glEnd();
glPopMatrix(); // 前车轮
glPushMatrix();
glTranslatef(100+dir, 100, 0);
glRotatef(angle, 0, 0, 1);
DrawWheel(0,0,25);
glPopMatrix(); // 后车轮
glPushMatrix();
glTranslatef(200+dir, 100, 0);
glRotatef(angle, 0, 0, 1);
DrawWheel(0, 0, 25);;
glPopMatrix(); glBegin(GL_LINES);
glVertex2f(0, 75);
glVertex2f(600, 75);
glEnd();
glutSwapBuffers();
} void keyboard(unsigned char key, int x, int y)
{
if (key == 'a')// 向左平移
{
cout << "左移" << endl;
dir -= 10;
angle += 10;
glutPostRedisplay();//重绘窗口
}
if (key == 'd')// 向右平移
{
cout << "右移" << endl;
dir += 10;
angle -= 10;
glutPostRedisplay();//重绘窗口
}
} void main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
glutInitWindowPosition(300, 100);
glutInitWindowSize(600, 600);
glutCreateWindow("lab5"); glutDisplayFunc(DrawBike);
init(); glutKeyboardFunc(keyboard);
glutMainLoop(); }

[opengl] 画一个可移动的自行车 二维几何变换(平移、旋转、缩放)的更多相关文章

  1. VS2008集成QT的OpenGL开发(实现二维图形的旋转)

    主要是利用Qt中的定时器实现了二维图形的旋转功能: #ifndef QGLTEST_H #define QGLTEST_H #include <QGLWidget> #include &l ...

  2. IT公司100题-35- 求一个矩阵中最大的二维矩阵(元素和最大)

    问题描述: 求一个矩阵中最大的二维矩阵(元素和最大).如: 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 中最大的是: 4 5 9 10   分析: 2*2子数组的最大和.遍历求和,时 ...

  3. Qt信号槽机制的实现(面试的感悟,猜测每一个类保存的一个信号和槽的二维表,实际使用函数指针 元对象 还有类型安全的检查设定等等)

    因为面试时问了我这道题,导致我想去了解信号槽到底是如何实现的,于是贴着顺序看了下源码,大致了解了整个框架.网上关于信号槽的文章也很多,但是大部分都是将如何应用的,这里我就写一下我所理解的如何实现吧, ...

  4. 《剑指Offer》第1题(Java实现):在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

    一.题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该 ...

  5. 功能要求:定义一个两行三列的二维数组 names 并赋值,使用二重循环输出二维数组中的元素。

    功能要求:定义一个两行三列的二维数组 names 并赋值,使用二重循环输出二维数组中的元素 names={{"tom","jack","mike&qu ...

  6. 剑指offer-特定二维数组中查找一个元素是否存在-二分搜索-二维数组

    int [][] array ={ {1,2,8,9}, {2,4,9,12}, {4,7,10,13}, {6,8,11,19} }; 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都 ...

  7. OpenGL——二维几何变换

    平移.旋转.缩放的实现 #include<iostream> #include <math.h> #include<Windows.h> #include < ...

  8. 【转载】ArcBall二维控制三维旋转

    原文:http://oviliazhang.diandian.com/post/2012-05-19/40027878859 由于目前大多的显示器是二维的,要控制三维物体的旋转就显得不那么直接了.Ar ...

  9. OpenGL 画出雷达动态扫描效果(二) 非底图

    OpenGL 画出雷达动态扫描效果(一)中给出了已一张图片作为底图的雷达扫面程序 如果有漂亮的雷达底图的话,效果应该非常不错的,另外也可以直接手绘雷达框架 效果如下 雷达主体代码 glLineWidt ...

随机推荐

  1. 使用百度网盘+Git,把版本控制托管到云端,附精彩评论

    http://www.cnblogs.com/vajoy/p/3929675.html 我试过多个这种双向同步的网盘,在网络状况不好.系统卡顿以及某些程序BUG的情况下,同步会有错乱现象,尤其是多个电 ...

  2. Nginx 部署 Ant Design pro

    利用Ant Design pro开发的项目,如何用Nginx部署呢? 第一步:把项目打包,打包命令如下: npm run build 运行完毕会在项目目录下生成dist文件夹. 第二步:想要测试打包好 ...

  3. Qt加载百度离线地图

    1.下载百度地图离线API 1.3 下载链接:http://download.csdn.NET/detail/caoshangpa/9476608,网上虽然出现了2.0版本离线API,但是经试用,存在 ...

  4. 第一式、单例模式-Singleton模式(创建型)

    一.简介 单例模式主要用的作用是用于保证程序运行中某个类只有一个实例,并提供一个全局入口点.单例模式(Singleton)为GOF阐述的标准24种设计模式中最简单的一个.但随着时间推移,GOF所阐述的 ...

  5. 解释为什么.net 第一次请求比较慢

    通过这个图可以很好的解释为什么第一次请求比较慢,为了提高访问速度,也便有了预编译. 关于ASP.NET网站:每个页面都编译成一个.dll文件 用Assembly.GetExecutingAssembl ...

  6. bootstrap模态框篇【遇到的问题】

    <div class="modal fade" tabindex="-1" role="dialog">  <div cl ...

  7. Java算法-求最大和的子数组序列

    问题:有一个连续数组,长度是确定的,它包含多个子数组,子数组中的内容必须是原数组内容中的一个连续片段,长度不唯一,子数组中每个元素相加的结果称为子数组的和,现要求找出和最大的一个子数组. 具体算法如下 ...

  8. win10 下的YOLOv3 训练 wider_face 数据集检测人脸

    1.数据集下载 (1)wider_face 数据集网址为 http://shuoyang1213.me/WIDERFACE/index.html 下载以上几项文件(这里推荐 google Drive ...

  9. feign之间传递oauth2-token的问题和解决

    在微服务架构里,服务与服务之间的调用一般用feign就可以实现,它是一种可视化的rpc,并且集成了ribbon的负载均衡能力,所以很受欢迎. 授权服务 在授权服务里,用户通过用户名密码,或者手机和验证 ...

  10. Django中间件加载原理

    假设我们有如下中间件: setting.py文件 MIDDLEWARE = [ 'django.middleware.A', 'django.middleware.B', 'django.middle ...