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

举报
韩曙亮 发表于 2022/01/10 23:58:49 2022/01/10
【摘要】 文章目录 一、OpenGL 状态机概念二、OpenGL 矩阵概念 上一篇博客 【OpenGL】八、初始化 OpenGL 渲染环境 ( 导入 OpenGL 头文件 | 链接 OpenG...



上一篇博客 【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);

  
 
  • 1
  • 2
  • 3
  • 4
  • 5

初始化矩阵 :

   // 矩阵环境初始化 , 主要是投影矩阵和模型矩阵 

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

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

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

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

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

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

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





二、OpenGL 矩阵概念



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

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

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


摄像机位置 :

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

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


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

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

  
 
  • 1
  • 2

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


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

文章来源: hanshuliang.blog.csdn.net,作者:韩曙亮,版权归原作者所有,如需转载,请联系作者。

原文链接:hanshuliang.blog.csdn.net/article/details/112756541

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。