日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

OpenGL 绘图移动

發(fā)布時間:2025/6/15 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 OpenGL 绘图移动 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

前言

在上一篇OpenGL 環(huán)境搭建基礎(chǔ)上修改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 };//窗口大小修改回調(diào) void changeSize(int w, int h) {glViewport(0, 0, w, h); }//區(qū)域渲染 void renderScene(void) {//清除一個緩存區(qū)glClear(GL_COLOR_BUFFER_BIT);GLfloat vBlue[] = {0.0,0.0,1.0,1.0f};//使用著色器渲染shaderManager.UseStockShader(GLT_SHADER_IDENTITY,vBlue);quadsBatch.Draw();//后臺緩沖區(qū)渲染完畢后交給前臺顯示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[]) {//設(shè)置工作目錄gltSetWorkingDirectory(argv[0]);//初始化glut庫glutInit(&argc, argv);//初始化一個雙緩沖區(qū),離屏區(qū)渲染,窗口區(qū)顯示glutInitDisplayMode(GLUT_DOUBLE);glutInitWindowSize(600, 600);glutCreateWindow("dowZhange");//注冊重塑函數(shù)glutReshapeFunc(changeSize);//注冊顯示函數(shù)glutDisplayFunc(renderScene);glutSpecialFunc(specialKeys);//用于檢查OpenGL API對程序可用GLenum status = glewInit();if (GLEW_OK != status) {return 1;}setupRC();glutMainLoop();return 0; }復(fù)制代碼

轉(zhuǎn)載于:https://juejin.im/post/5ce11e0bf265da1ba647bcd6

《新程序員》:云原生和全面數(shù)字化實踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結(jié)

以上是生活随笔為你收集整理的OpenGL 绘图移动的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。