前言

在上一篇OpenGL 环境搭建基础上修改main.cpp文件,完成使用OpenGL图片绘制和移动效果。

代码

详细代码已做注释:


#include "GLShaderManager.h"
#include "GLTools.h"
#include <GLUT/GLUT.h>//着色管理器
GLShaderManager shaderManager;//批次容器
GLBatch quadsBatch;//矩形坐标长度
GLfloat blockSize = 0.1f;//顶点坐标
GLfloat vVerts[] = {-blockSize,-blockSize,0.0f,blockSize,-blockSize,0.0f,blockSize,blockSize,0.0f,-blockSize,blockSize,0.0f
};//窗口大小修改回调
void changeSize(int w, int h) {glViewport(0, 0, w, h);
}//区域渲染
void renderScene(void) {//清除一个缓存区glClear(GL_COLOR_BUFFER_BIT);GLfloat vBlue[] = {0.0,0.0,1.0,1.0f};//使用着色器渲染shaderManager.UseStockShader(GLT_SHADER_IDENTITY,vBlue);quadsBatch.Draw();//后台缓冲区渲染完毕后交给前台显示glutSwapBuffers();}//初始化
void setupRC() {glClearColor(0.5f, 0.5f, 0.5f, 0.5f);shaderManager.InitializeStockShaders();quadsBatch.Begin(GL_QUADS, 4);quadsBatch.CopyVertexData3f(vVerts);quadsBatch.End();
}//处理键盘控制图形移动
void specialKeys(int key, int x, int y) {GLfloat stepSize = 0.01f;GLfloat blockX = vVerts[0];GLfloat blockY = vVerts[10];if (key == GLUT_KEY_UP) {blockY += stepSize;}if (key == GLUT_KEY_DOWN) {blockY -= stepSize;}if (key == GLUT_KEY_LEFT) {blockX -= stepSize;}if (key == GLUT_KEY_RIGHT) {blockX += stepSize;}if (blockX < -1.0f) {blockX = -1.0f;}if (blockX > (1.0 - blockSize * 2)) {blockX = 1.0f - blockSize * 2;}if (blockY < -1.0f + blockSize * 2 ) {blockY = -1.0f + blockSize * 2;}if (blockY > 1.0f) {blockY = 1.0f;}//处理顶点vVerts[0] = blockX;vVerts[1] = blockY - blockSize*2;vVerts[3] = blockX + blockSize*2;vVerts[4] = blockY - blockSize*2;vVerts[6] = blockX + blockSize*2;vVerts[7] = blockY;vVerts[9] = blockX;vVerts[10] = blockY;quadsBatch.CopyVertexData3f(vVerts);glutPostRedisplay();
}int main(int argc, char *argv[]) {//设置工作目录gltSetWorkingDirectory(argv[0]);//初始化glut库glutInit(&argc, argv);//初始化一个双缓冲区,离屏区渲染,窗口区显示glutInitDisplayMode(GLUT_DOUBLE);glutInitWindowSize(600, 600);glutCreateWindow("dowZhange");//注册重塑函数glutReshapeFunc(changeSize);//注册显示函数glutDisplayFunc(renderScene);glutSpecialFunc(specialKeys);//用于检查OpenGL API对程序可用GLenum status = glewInit();if (GLEW_OK != status) {return 1;}setupRC();glutMainLoop();return 0;
}复制代码

转载于:https://juejin.im/post/5ce11e0bf265da1ba647bcd6

OpenGL 绘图移动相关推荐

  1. OpenGL绘图过程简述

    OpenGL绘图的基本过程是:清除缓冲区,设置当前颜色,绘制几何图元,输出图形. 一.清除缓冲区 缓冲区是用来保存绘图过程中产生的图像数据的内存区域,OpenGL有颜色.深度.累积和模板等四种常用的缓 ...

  2. Android官方开发文档Training系列课程中文版:OpenGL绘图之图形绘制

    原文地址:http://android.xsoftlab.net/training/graphics/opengl/draw.html 如果你还不清楚如何定义图形及坐标系统,请移步:Android官方 ...

  3. opengl png图片 qt_QT中使用OpenGL绘图

    在之前说道过VS2010中配合OpenGL绘图的问题,这回是想要说说在QT中使用OpenGL,其实两者并无太大区别,因为都是基于C++语言的. 主要是想简要介绍下OpenGL在QT中的使用方法跟一些错 ...

  4. win32下的OpenGL绘图环境框架

    Win32下OpenGL入门 主要的步骤包括:添加opengl头文件,库文件,键盘鼠标响应,像素格式设置,opengl环境初始化,绘图变量设置,创建窗口,窗口大小改变时响应,绘制场景,源文件 1, 新 ...

  5. iPhone开发基础教程笔记(十二)--第十二章 使用Quartz和OpenGL绘图

    第十二章 使用Quartz和OpenGL绘图 有时应用程序需要能够自定义绘图.一个库是Quartz 2D,她是Core Graphics框架的一部分:另一个库是OpenGL ES,她是跨平台的图形库. ...

  6. Speedy Painter(OpenGL绘图工具) v3.6.2

    点击下载来源:Speedy Painter(OpenGL绘图工具) v3.6.2 Speedy Painter是一款基于OpenGL的非常轻量级的绘图软件,该软件界面看上去非常细腻,而让人感觉非常友好 ...

  7. 计算机图形学——实验一 VS+OpenGL绘图环境及基本图形绘制

    实验一 VS+OpenGL绘图环境及基本图形绘制 一.实验目的 熟悉OpenGL的主要功能: 掌握OpenGL的绘图流程和原理: 掌握OpenGL核心函数的使用: 熟悉OpenGL基本图形元素的绘制函 ...

  8. Quartz和OpenGL绘图基本概念

    有时应用程序需要能够进行自定义绘图.我们可以依靠两个不同的库来满足我们的绘图需要.一个库是Quartz 2D,它是Core Graphics框架的一部分:另一个库是OpenGL ES,它是跨平台的图形 ...

  9. C#结合OpenGL绘图之Tao库

    转自:http://www.cnblogs.com/wangshide/archive/2012/04/14/2447499.html OpenGL support libraries GLU – S ...

  10. Android官方开发文档Training系列课程中文版:OpenGL绘图之应用投影与相机视图

    原文地址:http://android.xsoftlab.net/training/graphics/opengl/projection.html##transform 在OpenGL ES环境中,投 ...

最新文章

  1. linux文本处理-grep
  2. matlab中imresize函数的用法,为何 MATLAB imresize 函数和 OpenCV resize 函数结果不同
  3. ValueError: Masked arrays must be 1-D
  4. Logger PatternLayout 格式
  5. mysql plugin filed_MySQL启动时报Plugin 'InnoDB' registration as a STORAGE ENGINE failed.错误
  6. Pytorch模型(.pth)转onnx模型(.onnx)
  7. 论文阅读:Spatial Transformer Networks
  8. 爬虫:利用cookie获取人人网登录后网页信息
  9. html word classid,html之object标签的classid收集
  10. SQL模糊查询特殊符号应用及详细案例说明
  11. linux yum 命令 详解
  12. Atitit ioc 之道 attilax著 第2章 装配Bean 33 2.1 Spring配置的可选方案 34 2.2 自动化装配bean 35 2.2.1 创建可被发现的bean 35 2.
  13. win10系统HP打印机驱动程序无法使用
  14. cad和html5哪个好,天正CAD和AutoCAD有什么区别,哪个好用?
  15. 跳槽理由—你的跳槽理由合理吗
  16. ubuntu 8.04下安装yEd
  17. 数据分析(2)——数据分析的流程 数据类型及数据收集和整理方法
  18. 在网页中创建自己的调试控制台
  19. kotlin发音!这份字节跳动历年校招Android面试真题解析,附架构师必备技术详解
  20. 运用JAVA基础阶段知识,模拟双色球机选抽奖过程

热门文章

  1. php self this parent
  2. CCF 201703-3 Markdown
  3. 17.4.28 清北第一天水题
  4. 关于子网划分—为什么全0全1子网号不能使用
  5. GMM高斯混合模型学习笔记(EM算法求解)
  6. Hibernate关联查询
  7. 升级GCC 4.6后的warning: ”variable set but not used“
  8. [导入]微软CSS,GCR半日游--学了一样东西,什么叫做灰头土脸
  9. Ubnutu虚拟机怎么修改开机密码?(在已知旧密码的情况下,开机后设置新的密码的方法)
  10. Codeforces Round #546 (Div. 2) B. Nastya Is Playing Computer Games