OpenGL
来源:互联网 发布:linux书籍推荐 知乎 编辑:程序博客网 时间:2024/06/01 09:35
鼠标左键加速旋转,右键减速。
代码如下:
#include<gl/glut.h>#include<math.h>#include<windows.h>#include<algorithm>using namespace std;float angle = 0;float speed = 0.1;void myDisplay(){ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); //清除颜色缓存和深度缓存 glLoadIdentity(); //初始化坐标位置 /* glTranslatef(); //平移 glScaled(); //缩放 glRotatef(); //旋转 */ glTranslated(0, 0, -6); glRotatef(angle, 0, 1, 0); glBegin(GL_TRIANGLES); glColor3f(1.0f, 0.0f, 0.0f); glVertex3f(0.0f, 1.0f, 0.0f); glColor3f(0.0f, 1.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 1.0f); glColor3f(0.0f, 0.0f, 1.0f); glVertex3f(1.0f, -1.0f, 1.0f); glColor3f(1.0f, 0.0f, 0.0f); glVertex3f(0.0f, 1.0f, 0.0f); glColor3f(0.0f, 0.0f, 1.0f); glVertex3f(1.0f, -1.0f, 1.0f); glColor3f(0.0f, 1.0f, 0.0f); glVertex3f(1.0f, -1.0f, -1.0f); glColor3f(1.0f, 0.0f, 0.0f); glVertex3f(0.0f, 1.0f, 0.0f); glColor3f(0.0f, 1.0f, 0.0f); glVertex3f(1.0f, -1.0f, -1.0f); glColor3f(0.0f, 0.0f, 1.0f); glVertex3f(-1.0f, -1.0f, -1.0f); glColor3f(1.0f, 0.0f, 0.0f); glVertex3f(0.0f, 1.0f, 0.0f); glColor3f(0.0f, 0.0f, 1.0f); glVertex3f(-1.0f, -1.0f, -1.0f); glColor3f(0.0f, 1.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 1.0f); glEnd(); angle += speed; if (angle > 360) angle -= 360.0; glutSwapBuffers();}void mouse(int button, int state, int x, int y) //监听鼠标动作{ if (button == GLUT_LEFT_BUTTON && state == GLUT_UP) { speed = min(1.0, speed + 0.01); } else if (button == GLUT_RIGHT_BUTTON && state == GLUT_UP) { speed = max(0.01, speed - 0.01); }}void Reshape(int w, int h) //两个参数:窗口被移动后大小{ glViewport(0, 0, w, h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(45.0f, (GLfloat)w / (GLfloat)h, 0.1f, 100.0f); glMatrixMode(GL_MODELVIEW); glLoadIdentity();}void initWindow(int &argc, char *argv[], int width, int height, char *title) //初始化并显示到屏幕中央{ glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB|GLUT_DEPTH); //使用双缓存模式和深度缓存 glutInitWindowPosition((GetSystemMetrics(SM_CXSCREEN) - width) >> 1, (GetSystemMetrics(SM_CYSCREEN) - height) >> 1); //指定窗口位置 glutInitWindowSize(width, height); //指定窗口大小 glutCreateWindow(title); glClearColor(0, 0, 0, 0.0); glShadeModel(GL_SMOOTH); glEnable(GL_DEPTH_TEST);//激活深度测试}int main(int argc, char *argv[]){ initWindow(argc, argv, 500, 500, "Hermite"); puts("左键加速,右键减速"); glutDisplayFunc(myDisplay); glutReshapeFunc(Reshape); glutMouseFunc(mouse); glutIdleFunc(myDisplay); glutMainLoop(); return 0;}
阅读全文
0 0
- OPENGL
- opengl
- OpenGL
- OpenGL
- OPENGL
- OpenGL
- OpenGL
- OpenGL
- opengl
- opengl
- opengl
- OPENGL
- OpenGL
- opengl
- Opengl
- opengl
- Opengl
- opengl
- 一款开源Android在线音乐播放器
- [BZOJ]1799: [Ahoi2009]self 同类分布 数位DP
- 第三方高德开放平台高德地图定位
- Netty4 学习笔记之三:粘包和拆包
- 在MacOS Sierra上安装OpenCV
- OpenGL
- c++中四种强制类型转换(const_cast、static_cast应用最多)
- DNS配置和redhat的python2.6的升级
- 解读DES和SM4、RSA和SM2及SM3
- Spring项目简单配置(一)
- openmp常用指令(fortran版)(2)
- rosb笔记:bug时间:环境变量设置问题——“解决 roscd beginner_tutorials 没有此文件的问题”
- strtus2文件上传与下载
- 【Git】多人协作之建立分支