• OpenGL代码学习(2)


    #include "GLShaderManager.h"//着色管理器类
    #include "GLTools.h"//包含了大部分GLTool中类似C语言的独立函数
    #include <GLUT/GLUT.h>//在Mac系统下使用GLUT,在Window或Linux上使用的是freeglut的静态库
    
    GLShaderManager shaderManager;//定义一个着色管理器
    GLBatch triangleBatch;//简单的批次容器,是GLTools的一个简单的容器类
    
    GLfloat blockSize = 0.2f;//边长
    
    GLfloat vVerts[] = {
        -blockSize/2, -blockSize/2, 0.f,
        blockSize/2, -blockSize/2, 0.f,
        blockSize/2, blockSize/2, 0.f,
        -blockSize/2, blockSize/2, 0.f
    };//正方形的4个点坐标
    
    void changeSize(int w, int h) {
        glViewport(0, 0, w, h);
        
        printf("w:%d   h:%d
    ", w, h);
        
    //    glMatrixMode (GL_PROJECTION);
    //    glLoadIdentity ( );
    //    gluOrtho2D (0.0, (GLdouble) w, 0.0, (GLdouble) h);
    //    glClear (GL_COLOR_BUFFER_BIT);
    };
    
    void RenderScene(void) {
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT|GL_STENCIL_BUFFER_BIT);
        GLfloat vRed[] = {1.f, 0.f, 0.f, 1.f};
        shaderManager.UseStockShader(GLT_SHADER_IDENTITY, vRed);
        triangleBatch.Draw();
        glutSwapBuffers();
    };
    
    void setupRC(void) {
        glClearColor(0.98f, 0.40f, 0.70f, 1);
        shaderManager.InitializeStockShaders();
        triangleBatch.Begin(GL_TRIANGLE_FAN, 4);
        triangleBatch.CopyVertexData3f(vVerts);
        triangleBatch.End();
    }
    
    void SpecialKeys(int key, int x, int y) {
        GLfloat stepSize = 0.025f;
        GLfloat blockX = vVerts[0];
        GLfloat blockY = vVerts[10];
        
        printf("v[0] = %f
    ", vVerts[0]);
        printf("v[10] = %f
    ", 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.f) {
            blockX = -1.f;
        }
        if (blockX > (1.f - blockSize)) {
            blockX = 1.f - blockSize;
        }
        if (blockY < (-1.f + blockSize)) {
            blockY = -1.f + blockSize;
        }
        if (blockY > 1.f) {
            blockY = 1.f;
        }
        
        vVerts[0] = blockX;
        vVerts[1] = blockY - blockSize;
        
        vVerts[3] = blockX + blockSize;
        vVerts[4] = blockY - blockSize;
        
        vVerts[6] = blockX + blockSize;
        vVerts[7] = blockY;
        
        vVerts[9] = blockX;
        vVerts[10] = blockY;
        
        triangleBatch.CopyVertexData3f(vVerts);
        glutPostRedisplay();
    }
    
    int main(int argc, char * argv[]) {
        
        gltSetWorkingDirectory(argv[0]);
        glutInit(&argc, argv);
        glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGBA|GLUT_DEPTH|GLUT_STENCIL);
        glutInitWindowSize(800, 700);
        //glutInitWindowSize(800, 720);
        glutCreateWindow("OpenGL测试");
        
        glutReshapeFunc(changeSize);
        glutDisplayFunc(RenderScene);
        glutSpecialFunc(SpecialKeys);
        
        GLenum status = glewInit();
        if (GLEW_OK != status) {
            printf("GLEW Error:%s
    ", glewGetErrorString(status));
            return 1;
        }
        
        // 设置渲染环境
        setupRC();
        
        glutMainLoop();
        
        return 0;
    }
    

      

  • 相关阅读:
    CSS3属性transform详解之(旋转:rotate,缩放:scale,倾斜:skew,移动:translate)
    MySQL<添加、更新与删除数据>
    MySQL<数据库和表的基本操作>
    MySQL<数据库入门>
    MySql阶段案例
    Mysql综合案例
    Mysql课后思考题
    Java课后思考题
    Java课后简答题
    超全面的JavaWeb笔记day23<AJAX>
  • 原文地址:https://www.cnblogs.com/cchHers/p/14685230.html
Copyright © 2020-2023  润新知