目录

Opengl从0到1

1 窗口建立

GLUT显示窗口管理

  • 完成GLUT初始化:glutInit(&argc,argv);

    • 注意:int main(int argc,char** argv){}
  • 显示窗口创建时设定的标题:glutCreateWindow(“An Example openGL Program”);

  • 用回调函数将图定义传递给GLUT函数: glutDisplayFunc(lineSegment);

    • lineSegment():

      •  1
         2
         3
         4
         5
         6
         7
         8
         9
        10
        11
        12
        13
        14
        15
        
        //显示回调函数
        void lineSegment(){
        //和glclearColor配合,以GL_COLOR_BUFFER_BIT 常量,指定颜色缓存的位值
            glClear(GL_COLOR_BUFFER_BIT);
            //设定显示的对象的颜色
            glColor3f(0.0,0,0);
            glBegin(GL_LINE_LOOP);
                glVertex2d(80,15);
                glVertex2d(100,80);
                glVertex2d(150,30);
            glEnd();
        //强制清空所有缓存处理opengl函数
            glFlush();
            errorCheck();
        }
        
      • glClear(GL_COLOR_BUFFER_BIT);

        • 清理窗口显示
        • GL_COLOR_BUFFER_BIT 常量,指定颜色缓存的位值
        • 缓存由glClearColor指定
      • glColor3f(R,G,B);

        • 设置图元颜色
      • glBegin(GL_LINE_LOOP)—————glEnd()

        • 包含以Begin指定图元类型的点以输出.
      • glFlush();

        • 强制清空所有缓存来处理OpenGL函数.
  • **!!!!!!**关闭窗口指令:

    • glutDestroyWindow(windows);
  • 初始化window窗口的位置

    • glutInitWindowPosition(300,200);
  • 初始化window窗口的大小

    • glutInitWindowSize(1024,768);
  • 初始化显示窗口的缓存和颜色模型等选项:

    • glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
    • GLUT_SINGLE : 单个缓存显示
    • GLUT_RGB : 由RGB三原色组成的颜色
    • 以上两个参数都是默认的
  • 窗口处理,让显示窗口和图形内容激活:

    • glutMainLoop();

    • 必须是最后一个函数

Init一次性初始化函数
  • 用RGB值设定窗口背景颜色:glClearColor(0.5,0.5,0.5,1);
  • 以三维观察模式操作处理模型,以正投影将二维区域内容投影:glMatrixMode(GL_PROJECTION);
  • ortho正交化 将窗口的(0,0)到(200,150)的矩形区域投影到显示窗口上:gluOrtho2D(0.0,200.0,0.0,150.0);

+++

程序示例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#define GLUT_DISABLE_ATEXIT_HACK
#include<windows.h>
/* #include<GL/gl.h>
 *#include<GL/glu.h> 
 *这两个被glut.h引用了
 */
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<GL/glut.h>
//初始化有关且一次性的函数
void init(){
    //用RGB值设定窗口背景颜色
    //第四个参数是 指定颜色的alpha值,0.0是完全透明,1.0是不透明
    glClearColor(0.5,0.5,0.5,1);
    //以三维观察模式操作处理模型,以正投影将二维区域内容投影
    glMatrixMode(GL_PROJECTION);
    //ortho正交化 将窗口的(0,0)到(200,150)的矩形区域投影到显示窗口上
    gluOrtho2D(0.0,200.0,0.0,150.0);

}
//显示回调函数
void lineSegment(){
    //和glclearColor配合,以GL_COLOR_BUFFER_BIT 常量,指定颜色缓存的位值
    glClear(GL_COLOR_BUFFER_BIT);
    //设定显示的对象的颜色
    glColor3f(0.0,0.4,0.2);
    glBegin(GL_LINES);
        glVertex2d(80,15);
        glVertex2d(100,80);
    glEnd();
    glBegin(GL_LINES);
        glVertex2d(100,80);
        glVertex2d(150,30);
    glEnd();
    //强制清空所有缓存处理opengl函数
    glFlush();
}

int main(int argc,char** argv)
{
    //初始化GLUT,可以使用命令行参数变量
    glutInit(&argc,argv);

    //显示窗口 ,并设定窗口的标题
    glutCreateWindow("An Example openGL Program");
    
    //初始化window窗口的位置
    glutInitWindowPosition(300,200);
    //初始化window窗口的大小
    glutInitWindowSize(400,320);
    /*初始化显示窗口的缓存和颜色模型等选项
     *GLUT_SINGLE : 单个缓存显示
     *GLUT_RGB    : 由RGB三原色组成的颜色
     *以上两个参数都是默认的              */
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);

    /*初始化的函数*/
    init();

    //将lineSegment函数传入displayfunc 显示图形几何
    glutDisplayFunc(lineSegment);
    glutMainLoop();
}

opengl 出错处理

  • 一次值记录一个出错编码

  • 1
    2
    3
    4
    5
    6
    7
    8
    9
    
    GLenum errorCheck()
    {  
        const GLubyte *s;	//unsigned char 的指针,指向获取的错误字符串
        GLenum code;		//错误代码的枚举enum
        code=glGetError();	//得到错误代码
        s=gluErrorString(code);//得到错误信息字符串
        printf("%s\n",s); 	
        return code;
    }
    

+++

坐标系统

二维世界坐标系统

画点函数

  • glVertex**();
  • 表示一个点的位置坐标值
  • *表示后缀码
    • 维度:2,3,4…….
    • i : 整数
    • s:短整数
    • f:浮点数
    • d:双精度浮点数
    • !!! v:向量(附加)
  • glVertex维度+数据结构+点/维度(无/v)

画线函数

  • 1
    2
    3
    
    glBegin(图元);
            .....点集:glVertex2**()
    glEnd();
    
  • 图元:

    • GL_LINES:未连接直线
    • GL_LINE_STRIP:折线
    • GL_LINE_LOOP:封闭折线

+++

曲线函数:后话

填充区图元