zoukankan      html  css  js  c++  java
  • OpenGL代码学习(3)

    #include <iostream>
    #include <GLUT/GLUT.h>
    #include "math3d.h"
    
    // 绘制五角星
    void draw4() {
        const GLfloat Pi = 3.1415926536f;
        GLfloat a = 1 / (2-2*cos(72*Pi/180));
        GLfloat bx = a * cos(18 * Pi/180);
        GLfloat by = a * sin(18 * Pi/180);
        GLfloat cy = -a * cos(18 * Pi/180);
        GLfloat
        PointA[2] = { 0, a },
        PointB[2] = { bx, by },
        PointC[2] = { 0.5, cy },
        PointD[2] = { -0.5, cy },
        PointE[2] = { -bx, by };
    
        glClear(GL_COLOR_BUFFER_BIT);
        // 按照A->C->E->B->D->A的顺序,可以一笔将五角星画出
        glBegin(GL_LINE_LOOP);
        glVertex2fv(PointA);
        glVertex2fv(PointC);
        glVertex2fv(PointE);
        glVertex2fv(PointB);
        glVertex2fv(PointD);
        glEnd();
        glFlush();
    }
    
    
    // 绘制圆 (这样画出来的竟然是个椭圆)
    void draw3() {
        glClearColor(0.f, 0.f, 0.f, 0.f);
        glClear(GL_COLOR_BUFFER_BIT);
        glColor3f(1.f, 0.f, 0.f);
        glBegin(GL_POLYGON);
        
        const int n = 10;
        const  GLfloat R = 0.5f;
        const GLfloat pi = 3.1415926f;
        for (int i = 0; i < n; i++) {
            glVertex2f(R*cos(2 * pi / n * i), R * sin(2 * pi / n * i));
        }
        glEnd();//结束渲染
        glFlush();//强制刷新缓存区,保证绘制命令得以执行
    }
    
    // 绘制正方形
    void draw2() {
        
        // 设置清屏颜色 红、绿、蓝、透明度
        /*
        在Windows中 颜色成分取值范围 0~255之间
        在iOS、OS c颜色成分取值范围 0~1之间浮点数
        */
        glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
        
        /*
         清除缓存区对数值进行预置
         参数:指定将要清楚的缓存区的遮罩的按位或运算。
         GL_COLOR_BUFFER_BIT: 指示当前激活的用来进行颜色写入缓存区
         GL_DEPTH_BUFFER_BIT:指示深度缓存区
         GL_STENCIL_BUFFER_BIT:指示模板缓存区
    
         每个缓存区的清楚值根据这个缓存区的清楚值设置不同。
    
         错误:
         如果设定不是以上三个参考值,返回GL_INVALID_VALUE
         */
        glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT|GL_STENCIL_BUFFER_BIT);
        
        /* 设置颜色 */
        glColor3f(1.0f, 0.0f, 0.0f);
        
        /* 设置绘图时的坐标系统 左、右、上、下、近、远 */
        glOrtho(0.0f, 1.0f, 0.0f, 1.0f, -1.0f, 1.0f);
        
        /* 开始渲染 */
        glBegin(GL_POLYGON);
        
        /* 设置多边形的4个顶点 */
        glVertex3f(0.25f, 0.25f, 0.0f);
        glVertex3f(0.75f, 0.25f, 0.0f);
        glVertex3f(0.75f, 0.75f, 0.0f);
        glVertex3f(0.25f, 0.75f, 0.0f);
        
        /* 效果一样
        glVertex2f(0.25f, 0.25f);
        glVertex2f(0.75f, 0.25f);
        glVertex2f(0.75f, 0.75f);
        glVertex2f(0.25f, 0.75f);
         */
        
        /* 结束渲染 */
        glEnd();
        
        /* 强制刷新缓存区,保证绘制命令得以执行 */
        glFlush();
    }
    
    // 绘制正弦函数
    void draw1() {
        const GLfloat factor = 0.1f;
        GLfloat x;
        glClear(GL_COLOR_BUFFER_BIT);
        glBegin(GL_LINES);
        glVertex2f(-1.f, 0.f);
        glVertex2f(1.f, 0.f);
        glVertex2f(0.f, -1.f);
        glVertex2f(0.f, 1.f);
        glEnd();
        
        glBegin(GL_LINE_STRIP);
        for (x = -1.f/factor; x < 1.f/factor; x += 0.01f) {
            glVertex2f(x * factor, sin(x) * factor);
        }
        glEnd();
        glFlush();
    }
    
    int main(int argc, const char *argv[]) {
        
        // 1 初始化一个GLUT库
        glutInit(&argc, (char **)argv);
        
        // 2 创建一个窗口并制定窗口名
        glutInitWindowSize(717, 717);
        glutCreateWindow("OpenGLTest003");
        
        // 3 注册一个绘图函数,操作系统在必要时刻就会对窗体进行重绘制操作
        // 它设置了一个显示回调(diplay callback),即GLUT在每次更新窗口内容的时候会自动调用该例程
        glutDisplayFunc(draw4);
        
        // 这是一个无限执行的循环,它会负责一直处理窗口和操作系统的用户输入等操作。(注意:不会执行在glutMainLoop()之后的所有命令)
        glutMainLoop();
        
        return 0;
    }
  • 相关阅读:
    adb 常用命令及操作
    服务器被黑检查命令
    linux总结
    mysql数据库常用操作
    Python字符串所有操作函数
    Python提示信息表示内容
    Linux基础命令wget(如何联网下载?)
    Linux基础命令sz
    Linux基础命令rz
    Linux基础命令find
  • 原文地址:https://www.cnblogs.com/cchHers/p/14685259.html
Copyright © 2011-2022 走看看