日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

OpenGL 绘图移动

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

前言

在上一篇OpenGL 環(huán)境搭建基礎(chǔ)上修改main.cpp文件,完成使用OpenGL圖片繪制和移動(dòng)效果。

代碼

詳細(xì)代碼已做注釋:

#include "GLShaderManager.h" #include "GLTools.h" #include <GLUT/GLUT.h>//著色管理器 GLShaderManager shaderManager;//批次容器 GLBatch quadsBatch;//矩形坐標(biāo)長(zhǎng)度 GLfloat blockSize = 0.1f;//頂點(diǎn)坐標(biāo) 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) {//清除一個(gè)緩存區(qū)glClear(GL_COLOR_BUFFER_BIT);GLfloat vBlue[] = {0.0,0.0,1.0,1.0f};//使用著色器渲染shaderManager.UseStockShader(GLT_SHADER_IDENTITY,vBlue);quadsBatch.Draw();//后臺(tái)緩沖區(qū)渲染完畢后交給前臺(tái)顯示glutSwapBuffers();}//初始化 void setupRC() {glClearColor(0.5f, 0.5f, 0.5f, 0.5f);shaderManager.InitializeStockShaders();quadsBatch.Begin(GL_QUADS, 4);quadsBatch.CopyVertexData3f(vVerts);quadsBatch.End(); }//處理鍵盤(pán)控制圖形移動(dòng) 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;}//處理頂點(diǎn)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庫(kù)glutInit(&argc, argv);//初始化一個(gè)雙緩沖區(qū),離屏區(qū)渲染,窗口區(qū)顯示glutInitDisplayMode(GLUT_DOUBLE);glutInitWindowSize(600, 600);glutCreateWindow("dowZhange");//注冊(cè)重塑函數(shù)glutReshapeFunc(changeSize);//注冊(cè)顯示函數(shù)glutDisplayFunc(renderScene);glutSpecialFunc(specialKeys);//用于檢查OpenGL API對(duì)程序可用GLenum status = glewInit();if (GLEW_OK != status) {return 1;}setupRC();glutMainLoop();return 0; }復(fù)制代碼

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

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

總結(jié)

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

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