【OpenGL】九、OpenGL 绘制基础 ( OpenGL 状态机概念 | OpenGL 矩阵概念 )

2023-03-28 20:55:53 浏览数 (2)

文章目录

  • 一、OpenGL 状态机概念
  • 二、OpenGL 矩阵概念

上一篇博客 【OpenGL】八、初始化 OpenGL 渲染环境 ( 导入 OpenGL 头文件 | 链接 OpenGL 库 | 将窗口设置为 OpenGL 窗口 | 设置像素格式描述符 | 渲染绘制 ) ★ 进行了 OpenGL 渲染环境初始化 ;

本篇博客简单介绍 OpenGL 中的一些理论概念 ;

一、OpenGL 状态机概念


OpenGL 是一个状态机 , 其中包含了很多状态 , 简单列举下面的几项 :

OpenGL 中的 矩阵 Matrix , 包含了 投影 ( Projection ) 矩阵 , 模型 ( Model View ) 矩阵 ,

当前的颜色 Color ,

当前的清除缓冲区颜色 ClearColor ,

点的大小 PointSize ,

线宽度 LineWidth ,

光照 Light

vdots

当使用 OpenGL 绘制 3D 图形时 , 就会读取当前的状态机参数 , 利用这些状态机进行绘制 , 而我们就在绘制之前设置上述一系列的状态机 , 确保 OpenGL 绘制按照我们设想的进行 ;

在上一篇博客 【OpenGL】八、初始化 OpenGL 渲染环境 ( 导入 OpenGL 头文件 | 链接 OpenGL 库 | 将窗口设置为 OpenGL 窗口 | 设置像素格式描述符 | 渲染绘制 ) ★ 中Windows 窗口创建完成后 , 初始化 OpenGL 渲染环境 , 调用 wglCreateContext 方法创建了 OpenGL 上下文对象 HGLRC rc 后 , 此时上述的 状态机都是默认的 , 进行相关绘制前 , 都需要 逐个设置相关状态机的值 ; 初始化状态机操作如下 :

设置清除缓冲区颜色 :

代码语言:javascript复制
   // 设置清除缓冲区背景颜色
   // glClearColor (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha)
   // 对应的参数是 红色 , 绿色 , 蓝色 , 透明度
   // 这里设置的是红色
   glClearColor(1.0, 0.0, 0.0, 1.0);

初始化矩阵 :

代码语言:javascript复制
   // 矩阵环境初始化 , 主要是投影矩阵和模型矩阵 

   // ( 选中投影矩阵 ) 设置矩阵模式 , 告知 GPU 当前要操作的矩阵是投影矩阵
   glMatrixMode(GL_PROJECTION);
   // ( 给投影矩阵设置值 ) 向投影矩阵设置参数
   gluPerspective(50.0f, 800.0f / 600.0f, 0.1f, 1000.0f);

   // ( 选中模型矩阵 )
   glMatrixMode(GL_MODELVIEW);
   glLoadIdentity();

当前颜色值设置 : 绘制元素前 , 将当前的颜色值设为一个值 , 如 白色 , 开始绘制后 , 就会自动使用该颜色进行绘制 ;

稍后会使用 OpenGL 在桌面窗口中绘制一个点 , 绘制前将当前颜色设置为白色 , 然后绘制的点的颜色就是白色 ;

如果想要绘制不同颜色的点 , 就需要在每次绘制前 , 都修改当前颜色值 ;

整个 OpenGL 只有一个当前颜色值 ;

二、OpenGL 矩阵概念


OpenGL 中的 矩阵 Matrix , 包含了 投影 ( Projection ) 矩阵 , 模型 ( Model View ) 矩阵 ,

绘制的 点 定义在 世界坐标系 下 , 是一个三维的点 , 该三维的点需要将其显示到二维屏幕上 ;

模型视口 ( ModelView ) 矩阵 的作用就是将上述 世界坐标系中的三维坐标点 , 放到 视口中 , 视口坐标系是摄像机下的可见范围 ;

摄像机位置 :

右手坐标系 : x 指向屏幕右侧 , y 指向屏幕上方 , z 穿过屏幕指向你 ;

摄像机默认放在上述 右手坐标系 原点 , 指向 z 的负方向 , 即看屏幕里面的方向 ;

因此绘制的时候 , 如果使摄像机在默认位置时 , 需要将要绘制的模型放在 z 的负方向上 , 如下代码是绘制坐标点的代码 :

代码语言:javascript复制
        // 设置绘制点的位置
        glVertex3f(0.0f, 0.0f, -0.5f);

其绘制位置是 右手坐标系的 屏幕后面 -0.5f 的位置 , 这样正好暴露在摄像机下 ;

投影 ( Projection ) 矩阵 的作用是将 视口 中的模型 , 投影到二维屏幕 ( 显示器 ) 上 ;

0 人点赞