OpenGL画图旋转
#include<gl/glut.h>
#include<gl/GL.h>
#include<gl/GLU.h>
#include<math.h>
#include<iostream>
#define R 100
#define r 50
#define PI 3.1415926
double a1[5], b1[5], a2[5], b2[5];
double Height = 320;
double Width = 400;
void Calculate() {
int angle = 70;
for (int i = 0; i < 5; i++) {
a1[i] = R*cos(angle*PI / 180);
b1[i] = R*sin(angle*PI / 180);
a2[i] = r*cos(PI / 5 + angle*PI / 180);
b2[i] = r*sin(PI / 5 + angle*PI / 180);
angle += 72;
}
}
void Init() {
Calculate();
}
double target = 0.00;
double theta = 0.00;
bool right = true;
bool left = true;
bool top = true;
bool bottom = true;
int count = 0;
double sc = 1;
bool scflg1 =true;
bool scflg2 = true;
void draw() {
glClear(GL_COLOR_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glClearColor(0, 0, 0, 0);
gluOrtho2D(-450, 450, -300, 300);//左右下上
//glPushMatrix();
/*
glTranslatef(0.0f,-20.0f,-40.0f)表示将当前图形向x轴平移0,向y轴平移-20,向z轴平移-40
glScaled(10.0f,10.0f,10.0f)表示将当前图形沿x,y,z轴分别放大为原来的10倍
glRotatef(-80.0f,10.0f,1.0f,0.0f)表示将当前图形沿方向向量(-10,1,0)顺时针旋转80度。
*/
//glPopMatrix();
//glPushMatrix();
if (target < Width-60 && right&&target<Height-100) {//平移到最右边
target += 0.5;
}
else if(target>-Width+160 && left&&Height>-Height+150) {//到最右边返回到最左边
right = false;
target -= 0.5;
}
else {
right = true;
}
glTranslated(target, target, 0);
glRotated(theta, 0, 0, 1);
theta += 0.2;
if ( count <= 150 && scflg1) {
scflg2 = false;
sc += 0.001;
count++;
if (count == 151) {
scflg2 = true;
}
std::cout << sc << " " << count << std::endl;
}
else if (scflg2) {
scflg1 = false;
sc -= 0.001;
count--;
if (count == -151) {
scflg1 = true;
}
}
glScalef(sc, sc, 1);
glBegin(GL_LINE_LOOP);
for (int i = 0;i < 5;i++) {
glVertex2d(a1[i], b1[i]);
glVertex2d(a2[i], b2[i]);
}
glEnd();
//glPopMatrix();
//glFlush();
//glutSwapBuffers();
//glLoadIdentity();
glColor3d(1, 1, 0);
glFlush();
glutSwapBuffers();//调换前后缓存
}
void DisPlay()
{ glClearColor(1.0, 1.0, 1.0, 0.0);
glClear(GL_COLOR_BUFFER_BIT);//白色背景
draw();
}
void main()
{
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE);
glutInitWindowSize(900, 600);
glutCreateWindow("第四次作业");
Init();
glutDisplayFunc(DisPlay);
glutIdleFunc(DisPlay);
glutMainLoop();
system("pause");
}
OpenGL画图旋转的更多相关文章
- OpenGL中旋转平移缩放等变换的顺序对模型的影响
l 前提: 0x01. 假设绘制顶点的语句为Draw Array,变换的语句(旋转.平移.缩放)为M,而 M0; M1; M2; Draw Array; 则称对Array先进行M2再进行M1.M0 0 ...
- opengl笔记——旋转,一段代码的理解
重看:opengl笔记——OpenGL好资料备忘 在找到这段代码,对理解opengl旋转很有帮助 ... glPushMatrix(); // initialze ModelView matrix g ...
- OPENGL画图类库
链接 https://www.opengl.org/wiki/Language_bindings http://blog.csdn.net/luozhuang/article/details/421 ...
- OpenGL 3D旋转的木箱
学习自: https://learnopengl-cn.github.io/01%20Getting%20started/08%20Coordinate%20Systems/#3d 0,首先添加glm ...
- Android平台下OpenGL初步
Android OpenGL ES 开发教程 从入门到精通 http://blog.csdn.net/zhoudailiang/article/details/50176143 http://blog ...
- Android平台下OpenGL图形编程
ref: Jayway Team Blog中OpenGL ES简明开发教程https://blog.jayway.com/tag/opengl-es/ OpenGL ES 开发教程http://www ...
- [转帖]Android平台下OpenGL初步
原文请看 Android平台下OpenGL初步 本文只关注于如何一步步实现在Android平台下运用OpenGl. 1.GLSurfaceView GLSurfaceView是Android应用程序中 ...
- [置顶] 使用Android OpenGL ES 2.0绘图之五:添加运动
传送门 ☞ 系统架构设计 ☞ 转载请注明 ☞ http://blog.csdn.net/leverage_1229 传送门 ☞ GoF23种设计模式 ☞ 转载请注明 ☞ http://blog.csd ...
- HTML5 canvas画图
HTML5 canvas画图 HTML5 <canvas> 标签用于绘制图像(通过脚本,通常是 JavaScript).不过,<canvas> 元素本身并没有绘制能力(它仅仅是 ...
随机推荐
- C#中实现邮件发送功能
public static int sendmail(string to, string body,string subject) { try { int nContain = 0; ///添加发件人 ...
- 网络流(最大流) HDU 1565 方格取数(1) HDU 1569 方格取数(2)
HDU 1565 方格取数(1) 给你一个n*n的格子的棋盘,每个格子里面有一个非负数.从中取出若干个数,使得任意的两个数所在的格子没有公共边,就是说所取的数所在的2个格子不能相邻,并且取出的数的 ...
- 网络流(最小费用最大流):POJ 2135 Farm Tour
Farm Tour Time Limit: 1000ms Memory Limit: 65536KB This problem will be judged on PKU. Original ID: ...
- 浅谈数据库系统中的cache
Cache和Buffer是两个不同的概念,简单的说,Cache是加速“读”,而buffer是缓冲“写”,前者解决读的问题,保存从磁盘上读出的数据,后者是解决写的问题,保存即将要写入到磁盘上的数据.在很 ...
- L - Subway - POJ 2502
题意:在一个城市里,分布着若干条地铁线路,每条地铁线路有若干个站点,所有地铁的速度均为40km/h.现在你知道了出发地和终点的坐标,以及这些地铁 线路每个站点的坐标,你的步行速度为10km/h,且你到 ...
- UIView和CALayer有什么关系
view是对layer的一种封装,你对view的很多操作事实上是对layer的操作,之所以会出现这两个东西是因为1.view支持很多手势的交互,你所操作iphone的各种点击,拖动等等.2.layer ...
- SAP-MM:收货转储时提示 M7053“只能在公司代码 **** 的期间 2014/04 和 2014/03 中记账”
错误信息 消息号M7053 解决方法 Step 1.使用MMPV进入"关闭账期"界面. Step 2.输入"公司代码"."期间".& ...
- 谈论C++当然结果
C++编程课程的考试已经结束.这是第一次OJCBT.摸着石头过河,考试没有给学生理解的说法.现在尘埃落定.一些交代. 先说大的成就的治疗原则.事实上,有很多的纠结. 按理说,合格的太,无法挂.但实际情 ...
- OpenStack Cinder源代码流程简析
版权声明:本博客欢迎转载,转载时请以超链接形式标明文章原始出处!谢谢! 博客地址:http://blog.csdn.net/i_chips 一.概况 OpenStack的各个模块都有对应的client ...
- 数据存储简单了解(NSUserDefaults)
数据存储-使用NSUserDefaults 两个类介绍: NSUserDefaults适合存储轻量级的本地数据,比如要保存一个登陆界面的数据,用户名.密码之类的,个人觉得使用NSUserDefault ...