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

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

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

2019-11-10 22:39:19
字體:
供稿:網(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ā)表
主站蜘蛛池模板: 张家港市| 龙海市| 容城县| 文水县| 突泉县| 建水县| 阿克苏市| 开封市| 随州市| 武陟县| 资中县| 吉木乃县| 兴国县| 五指山市| 宜川县| 蓝田县| 陇西县| 滕州市| 罗田县| 滨海县| 蒙自县| 开远市| 武宣县| 普洱| 溆浦县| 卢龙县| 涿州市| 沾化县| 盐边县| 吐鲁番市| 成安县| 永和县| 阳城县| 旅游| 曲靖市| 南丹县| 江华| 宜丰县| 施秉县| 苍南县| 黎平县|