OpenGL 绘图移动
前言
在上一篇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 绘图移动相关推荐
- OpenGL绘图过程简述
OpenGL绘图的基本过程是:清除缓冲区,设置当前颜色,绘制几何图元,输出图形. 一.清除缓冲区 缓冲区是用来保存绘图过程中产生的图像数据的内存区域,OpenGL有颜色.深度.累积和模板等四种常用的缓 ...
- Android官方开发文档Training系列课程中文版:OpenGL绘图之图形绘制
原文地址:http://android.xsoftlab.net/training/graphics/opengl/draw.html 如果你还不清楚如何定义图形及坐标系统,请移步:Android官方 ...
- opengl png图片 qt_QT中使用OpenGL绘图
在之前说道过VS2010中配合OpenGL绘图的问题,这回是想要说说在QT中使用OpenGL,其实两者并无太大区别,因为都是基于C++语言的. 主要是想简要介绍下OpenGL在QT中的使用方法跟一些错 ...
- win32下的OpenGL绘图环境框架
Win32下OpenGL入门 主要的步骤包括:添加opengl头文件,库文件,键盘鼠标响应,像素格式设置,opengl环境初始化,绘图变量设置,创建窗口,窗口大小改变时响应,绘制场景,源文件 1, 新 ...
- iPhone开发基础教程笔记(十二)--第十二章 使用Quartz和OpenGL绘图
第十二章 使用Quartz和OpenGL绘图 有时应用程序需要能够自定义绘图.一个库是Quartz 2D,她是Core Graphics框架的一部分:另一个库是OpenGL ES,她是跨平台的图形库. ...
- Speedy Painter(OpenGL绘图工具) v3.6.2
点击下载来源:Speedy Painter(OpenGL绘图工具) v3.6.2 Speedy Painter是一款基于OpenGL的非常轻量级的绘图软件,该软件界面看上去非常细腻,而让人感觉非常友好 ...
- 计算机图形学——实验一 VS+OpenGL绘图环境及基本图形绘制
实验一 VS+OpenGL绘图环境及基本图形绘制 一.实验目的 熟悉OpenGL的主要功能: 掌握OpenGL的绘图流程和原理: 掌握OpenGL核心函数的使用: 熟悉OpenGL基本图形元素的绘制函 ...
- Quartz和OpenGL绘图基本概念
有时应用程序需要能够进行自定义绘图.我们可以依靠两个不同的库来满足我们的绘图需要.一个库是Quartz 2D,它是Core Graphics框架的一部分:另一个库是OpenGL ES,它是跨平台的图形 ...
- C#结合OpenGL绘图之Tao库
转自:http://www.cnblogs.com/wangshide/archive/2012/04/14/2447499.html OpenGL support libraries GLU – S ...
- Android官方开发文档Training系列课程中文版:OpenGL绘图之应用投影与相机视图
原文地址:http://android.xsoftlab.net/training/graphics/opengl/projection.html##transform 在OpenGL ES环境中,投 ...
最新文章
- linux文本处理-grep
- matlab中imresize函数的用法,为何 MATLAB imresize 函数和 OpenCV resize 函数结果不同
- ValueError: Masked arrays must be 1-D
- Logger PatternLayout 格式
- mysql plugin filed_MySQL启动时报Plugin 'InnoDB' registration as a STORAGE ENGINE failed.错误
- Pytorch模型(.pth)转onnx模型(.onnx)
- 论文阅读:Spatial Transformer Networks
- 爬虫:利用cookie获取人人网登录后网页信息
- html word classid,html之object标签的classid收集
- SQL模糊查询特殊符号应用及详细案例说明
- linux yum 命令 详解
- Atitit ioc 之道 attilax著 第2章 装配Bean 33 2.1 Spring配置的可选方案 34 2.2 自动化装配bean 35 2.2.1 创建可被发现的bean 35 2.
- win10系统HP打印机驱动程序无法使用
- cad和html5哪个好,天正CAD和AutoCAD有什么区别,哪个好用?
- 跳槽理由—你的跳槽理由合理吗
- ubuntu 8.04下安装yEd
- 数据分析(2)——数据分析的流程 数据类型及数据收集和整理方法
- 在网页中创建自己的调试控制台
- kotlin发音!这份字节跳动历年校招Android面试真题解析,附架构师必备技术详解
- 运用JAVA基础阶段知识,模拟双色球机选抽奖过程
热门文章
- php self this parent
- CCF 201703-3 Markdown
- 17.4.28 清北第一天水题
- 关于子网划分—为什么全0全1子网号不能使用
- GMM高斯混合模型学习笔记(EM算法求解)
- Hibernate关联查询
- 升级GCC 4.6后的warning: ”variable set but not used“
- [导入]微软CSS,GCR半日游--学了一样东西,什么叫做灰头土脸
- Ubnutu虚拟机怎么修改开机密码?(在已知旧密码的情况下,开机后设置新的密码的方法)
- Codeforces Round #546 (Div. 2) B. Nastya Is Playing Computer Games