国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發(fā)設計 > 正文

OpenGL超級寶典之chapter 2 運動的圖形(move)

2019-11-11 01:30:58
字體:
供稿:網(wǎng)友

前言

運行此程序的前提是已經(jīng)完全配置好了OpenGL超級寶典程序運行所需要的環(huán)境

code

#include <GLTools.h>#include <GLShaderManager.h>#ifdef __APPLE__#include <glut/glut.h> #else#define FREEGLUT_STATIC#include <GL/glut.h> #endifGLBatch squareBatch;GLShaderManager shaderManager;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 SetuPRC(){ glClearColor(0.25f, 0.25f, 0.25f, 1.0f); shaderManager.InitializeStockShaders(); squareBatch.Begin(GL_TRIANGLE_FAN, 4); squareBatch.CopyVertexData3f(vVerts); squareBatch.End();}void SpecialKeys(int key, int x, int y){ GLfloat stepSize = 0.025f; GLfloat blockX = vVerts[0]; GLfloat blockY = vVerts[7]; if (key == GLUT_KEY_UP) { blockY += stepSize; } if (key == GLUT_KEY_DOWN) { blockY -= stepSize; } if (key == GLUT_KEY_RIGHT) { blockX += stepSize; } if (key == GLUT_KEY_LEFT) { blockX -= stepSize; } //collision detection if (blockX < -1.0f) { blockX = -1.0f; } if (blockX > (1.0f - 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 - 2 * blockSize; vVerts[3] = blockX + 2 * blockSize; vVerts[4] = blockY - 2 * blockSize; vVerts[6] = blockX + 2 * blockSize; vVerts[7] = blockY; vVerts[9] = blockX; vVerts[10] = blockY; squareBatch.CopyVertexData3f(vVerts); //glutPostRedisplay();}void BounceFunction(void){ static GLfloat xDir = 1.0f; static GLfloat yDir = 1.0f; GLfloat stepSize = 0.0005f; GLfloat blockX = vVerts[0]; // Upper left X GLfloat blockY = vVerts[7]; // Upper left Y blockY += stepSize * yDir; blockX += stepSize * xDir; // Collision detection if(blockX < -1.0f) { blockX = -1.0f; xDir *= -1.0f; } if(blockX > (1.0f - blockSize * 2)) { blockX = 1.0f - blockSize * 2; xDir *= -1.0f; } if(blockY < -1.0f + blockSize * 2) { blockY = -1.0f + blockSize * 2; yDir *= -1.0f; } if(blockY > 1.0f) { blockY = 1.0f; yDir *= -1.0f; } // Recalculate vertex positions 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; squareBatch.CopyVertexData3f(vVerts);}void RenderScene(){ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); GLfloat vRed[] = {0.98f, 0.04f, 0.7f, 1.0f}; shaderManager.UseStockShader(GLT_SHADER_IDENTITY, vRed); squareBatch.Draw(); glutSwapBuffers(); BounceFunction(); glutPostRedisplay();}int main(int argc, char* argv[]){ gltSetWorkingDirectory(argv[0]); glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH | GLUT_STENCIL); glutInitWindowSize(800, 600); glutCreateWindow("Move"); GLenum err = glewInit(); if (GLEW_OK != err) { fprintf(stderr, "GLEW Error: %s/n", glewGetErrorString(err)); return 1; } glutReshapeFunc(ChangeSize); glutDisplayFunc(RenderScene); glutSpecialFunc(SpecialKeys); SetupRC(); glutMainLoop(); return 0;}
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 林口县| 工布江达县| 乌苏市| 文登市| 改则县| 青河县| 靖远县| 集贤县| 得荣县| 建宁县| 巴林右旗| 乌兰浩特市| 石景山区| 屏南县| 中牟县| 德安县| 潮安县| 威海市| 府谷县| 衡山县| 灵寿县| 商洛市| 石狮市| 紫金县| 华安县| 丹巴县| 寿光市| 九寨沟县| 太仆寺旗| 宜昌市| 阳西县| 淄博市| 青冈县| 屏山县| 得荣县| 海兴县| 荣成市| 乐清市| 炎陵县| 丁青县| 两当县|