OpenGL 绘图移动
生活随笔
收集整理的這篇文章主要介紹了
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
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的OpenGL 绘图移动的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MySQL DBA基本知识点梳理和查询优
- 下一篇: 动手自己写一个 xcode 插件(Xco