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

首頁 > 學院 > 開發設計 > 正文

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

2019-11-10 23:48:52
字體:
來源:轉載
供稿:網友

前言

運行此程序的前提是已經完全配置好了OpenGL超級寶典程序運行所需要的環境

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;}
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 厦门市| 亳州市| 巴南区| 枣庄市| 义马市| 绍兴市| 武安市| 肇庆市| 河西区| 濮阳县| 永州市| 潼南县| 彰武县| 平泉县| 阿合奇县| 乌拉特前旗| 怀安县| 泰宁县| 乡宁县| 洪洞县| 湟源县| 梅州市| 兴城市| 弥勒县| 南通市| 辛集市| 石台县| 阳谷县| 新龙县| 同仁县| 梁平县| 宜宾县| 垫江县| 金山区| 苏尼特左旗| 敦煌市| 宿州市| 宿州市| 偃师市| 宿州市| 盐城市|