OpenGL(三)特殊按键,控制三角形移动
来源:互联网 发布:kali linux安装到u盘 编辑:程序博客网 时间:2024/06/04 23:29
一、代码
1.在上篇代码中新增代码
//key,特殊按键编码,x,y位置void SpecialKeys(int key, int x, int y){GLfloat stepSize = 0.025f; //增加的步量GLfloat blockX = 0; GLfloat blockY = 0;//上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;}std::cout << "blockX = " << blockX << std::endl;std::cout << "blockY = " << blockY << std::endl;//改变顶点数据vVertex[0] = vVertex[0] + blockX;vVertex[1] = vVertex[1] + blockY;vVertex[3] = vVertex[3] + blockX;vVertex[4] = vVertex[4] + blockY;vVertex[6] = vVertex[6] + blockX;vVertex[7] = vVertex[7] + blockY;batch.CopyVertexData3f(vVertex); //复制顶点到批处理中glutPostRedisplay(); //更新窗口内容}glutSpecialFunc(SpecialKeys); //特殊按键回调2.完整代码
#include <GLTools.h>#include <GLShaderManager.h>#include <GL/glut.h>GLBatch batch; //批处理GLShaderManager shaderManager; //着色器管理//定义顶点数据GLfloat vVertex[] = { -0.5f, -0.5f, 0.0f, 0.5f, -0.5f, 0.0f, 0.0f, 0.5f, 0.0f };void ChangeSize(int width, int height){glViewport(0, 0, width, height); //改变窗口大小}void SetupRc(void){glClearColor(0.0f, 0.0f, 1.0f, 1.0f); //背景颜色shaderManager.InitializeStockShaders(); //初始化着色器batch.Begin(GL_TRIANGLES, 3);batch.CopyVertexData3f(vVertex); //复制顶点数据到批处理中batch.End();}void MyDisplay(void){glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); //清除特定的缓冲区GLfloat vRed[] = { 0.0f, 1.0f, 0.0f, 1.0f }; //RGBAshaderManager.UseStockShader(GLT_SHADER_IDENTITY ,vRed); //颜色传递到存储着色器中batch.Draw(); //绘制glutSwapBuffers(); //交换buffer,双缓冲}//key,特殊按键编码,x,y位置void SpecialKeys(int key, int x, int y){GLfloat stepSize = 0.025f; //增加的步量GLfloat blockX = 0;GLfloat blockY = 0;//上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;}//改变顶点数据vVertex[0] = vVertex[0] + blockX;vVertex[1] = vVertex[1] + blockY;vVertex[3] = vVertex[3] + blockX;vVertex[4] = vVertex[4] + blockY;vVertex[6] = vVertex[6] + blockX;vVertex[7] = vVertex[7] + blockY;batch.CopyVertexData3f(vVertex); //复制顶点到批处理中glutPostRedisplay(); //更新窗口内容}int main(int argc, char * argv[]){gltSetWorkingDirectory(argv[0]); //设置工作目录glutInit(&argc, argv); //初始化glutglutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH | GLUT_STENCIL); //显示类型模式glutInitWindowSize(800, 600); //窗口大小glutCreateWindow("第一个OpenGL"); //创建窗口glutReshapeFunc(ChangeSize); //改变窗口大小glutDisplayFunc(MyDisplay); //显示绘制回调glutSpecialFunc(SpecialKeys); //特殊按键回调GLenum err = glewInit(); //驱动程序初始化过程是否出错if (err != GLEW_OK){return 1;}SetupRc(); glutMainLoop(); //调用之后才能显示return 0;}
二、运行效果
按上下左右键移动三角形
0 0
- OpenGL(三)特殊按键,控制三角形移动
- OpenGL入门(三):绘制一个三角形
- OpenGL学习(三)第一个三角形
- [Modern OpenGL系列(三)]用OpenGL绘制一个三角形
- Qt OpenGL:学习现代3D图形编程之三,移动三角形
- Opengl(三)——渲染出一个三角形
- opengl从画三角形到画一个立方体(三)
- unity之按键控制移动,及按键之后,走动动画才能播放(正常行走)
- OpenGL键盘控制图形移动
- 模拟移动机器人控制(三)
- 特殊按键
- UE4移动组件详解(三)——RootMotion与特殊移动模式的实现思路
- 安卓Tv开发(二)移动智能电视之焦点控制(按键事件)
- Isometric Game Programming 笔记(二)按键控制地图上下左右方向移动
- python之pygame使surface对象移动起来,用按键控制(二)
- OpenGL编程逐步深入(三)在窗口中显示一个三角形
- 三角形类(三)
- Cocos2d-x 通过虚拟按键控制人物移动
- qtp运行结果写入到excel里面
- CCF 201409-4 最优配餐(bfs)
- aspose.words生成的word文档中插入表格,用Microsoft office的word打开,表格显示正常,用wps打开,表格挤压成粗线条
- Android 6.0权限问题
- Android属性动画完全解析(下),Interpolator和ViewPropertyAnimator的用法
- OpenGL(三)特殊按键,控制三角形移动
- Cookie/Session机制详解
- 体育打卡信息的弱口令遍历
- 3Sum
- UEditor转义字符入库再显示带标签的解决方法
- 自己记录,筛选我喜欢的宝宝
- elasticsearch 时间查询语法
- weblogic部署更新会多出来一个工程
- Android 以图找图功能