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

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

文章目录

一、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 后 , 此时上述的 状态机都是默认的 , 进行相关绘制前 , 都需要 逐个设置相关状态机的值 ; 初始化状态机操作如下 :


设置清除缓冲区颜色 :


  // 设置清除缓冲区背景颜色

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

初始化矩阵 :


 

// 矩阵环境初始化 , 主要是投影矩阵和模型矩阵 
   // ( 选中投影矩阵 ) 设置矩阵模式 , 告知 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 的负方向上 , 如下代码是绘制坐标点的代码 :


   

// 设置绘制点的位置
        glVertex3f(0.0f, 0.0f, -0.5f);


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



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


目录
相关文章
|
存储 缓存 Java
Android OpenGL 显示基本图形及相关概念解读
Android OpenGL 显示基本图形及相关概念解读
Android OpenGL 显示基本图形及相关概念解读
|
存储 Java Android开发
Android OpenGL ES(六)----进入三维在代码中创建投影矩阵和旋转矩阵
Android OpenGL ES(六)----进入三维在代码中创建投影矩阵和旋转矩阵
399 0
Android OpenGL ES(六)----进入三维在代码中创建投影矩阵和旋转矩阵
|
Java 数据安全/隐私保护 Android开发
Opengl ES之矩阵变换(下)
Opengl ES连载系列
352 0
|
Java API 数据安全/隐私保护
Opengl ES之矩阵变换(上)
Opengl ES连载系列
344 0
|
存储 API
九、OpenGL 基础变化与矩阵堆栈
OpenGL 基础变化与矩阵堆栈
398 0
九、OpenGL 基础变化与矩阵堆栈
八、了解OpenGL中的向量、矩阵
了解OpenGL中的向量、矩阵
344 0
八、了解OpenGL中的向量、矩阵
OpenGL有关压栈和矩阵相乘
压栈 PushMatrix();矩阵相乘 MultMatrix(mObjectFrame);出栈 PopMatrix();
170 0
OpenGL有关压栈和矩阵相乘
|
机器学习/深度学习 存储 Windows
【OpenGL】二十一、OpenGL 矩阵压栈与出栈 ( 不同类型矩阵变换先后顺序 | 渲染前不设置单位阵 | 压栈出栈原理分析 | 代码示例 )(二)
【OpenGL】二十一、OpenGL 矩阵压栈与出栈 ( 不同类型矩阵变换先后顺序 | 渲染前不设置单位阵 | 压栈出栈原理分析 | 代码示例 )(二)
252 0
【OpenGL】二十一、OpenGL 矩阵压栈与出栈 ( 不同类型矩阵变换先后顺序 | 渲染前不设置单位阵 | 压栈出栈原理分析 | 代码示例 )(二)
【OpenGL】二十一、OpenGL 矩阵压栈与出栈 ( 不同类型矩阵变换先后顺序 | 渲染前不设置单位阵 | 压栈出栈原理分析 | 代码示例 )(一)
【OpenGL】二十一、OpenGL 矩阵压栈与出栈 ( 不同类型矩阵变换先后顺序 | 渲染前不设置单位阵 | 压栈出栈原理分析 | 代码示例 )(一)
234 0
【OpenGL】二十一、OpenGL 矩阵压栈与出栈 ( 不同类型矩阵变换先后顺序 | 渲染前不设置单位阵 | 压栈出栈原理分析 | 代码示例 )(一)