前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【OpenGL】九、OpenGL 绘制基础 ( OpenGL 状态机概念 | OpenGL 矩阵概念 )

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

作者头像
韩曙亮
发布2023-03-28 20:55:53
4K0
发布2023-03-28 20:55:53
举报

文章目录

上一篇博客 【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 ) 矩阵 的作用是将 视口 中的模型 , 投影到二维屏幕 ( 显示器 ) 上 ;

本文参与?腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-01-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客?前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体同步曝光计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 一、OpenGL 状态机概念
  • 二、OpenGL 矩阵概念
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com