【OpenGL】十、OpenGL 绘制点 ( 初始化 OpenGL 矩阵 | 设置投影矩阵 | 设置模型视图矩阵 | 绘制点 | 清除缓冲区 | 设置当前颜色值 | 设置点大小 | 绘制点 )(二)

简介: 【OpenGL】十、OpenGL 绘制点 ( 初始化 OpenGL 矩阵 | 设置投影矩阵 | 设置模型视图矩阵 | 绘制点 | 清除缓冲区 | 设置当前颜色值 | 设置点大小 | 绘制点 )(二)

三、部分代码示例


这里只展示部分代码 , 完整代码可以到 博客源码快照 中查看 , 已上传 CSDN 资源 , 关注即可下载 ;


初始化 OpenGL 相关代码 :


// 创建 OpenGL 的渲染上下文
   // 获取窗口设备 
   dc = GetDC(hWnd);
   // 颜色描述符, 像素格式描述符 , 选取 OpenGL 渲染的像素格式
   PIXELFORMATDESCRIPTOR pfd;
   // 将 PIXELFORMATDESCRIPTOR 结构体清空
   memset(&pfd, 0, sizeof(PIXELFORMATDESCRIPTOR));
   // 填充结构体
   // 设置版本号
   pfd.nVersion = 1;
   // 结构体大小
   pfd.nSize = sizeof(PIXELFORMATDESCRIPTOR);
   // 颜色缓冲区 32 位
   pfd.cColorBits = 32;
   // 深度缓冲区 24 位
   pfd.cDepthBits = 24;
   pfd.cStencilBits = 8;
   // 颜色格式
   pfd.iPixelType = PFD_TYPE_RGBA;
   pfd.iLayerType = PFD_MAIN_PLANE;
   // 分别设置 绘制到桌面窗口 , OpenGL 支持 , 双缓冲 标志位 
   // 双缓冲区可以让画面更流畅 
   pfd.dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER;
   // 选择像素格式 , 如果返回 -1 , 说明选择像素格式失败 , 一般情况下该选择是成功的 
   int pixelFormat = ChoosePixelFormat(dc, &pfd);
   // 设置像素格式
   SetPixelFormat(dc, pixelFormat, &pfd);
   // 创建 OpenGL 上下文对象 , 注意该操作必须在设置完像素格式后进行操作
   HGLRC rc = wglCreateContext(dc);
   // 设置 OpenGL 上下文对象 , 将 rc 和 dc 作为当前的渲染设备
   wglMakeCurrent(dc, rc); 
   // 设置清除缓冲区背景颜色
   // glClearColor (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha)
   // 对应的参数是 红色 , 绿色 , 蓝色 , 透明度
   // 这里设置的是红色
   glClearColor(1.0, 0.0, 0.0, 1.0);
   // 矩阵环境初始化 , 主要是投影矩阵和模型矩阵 
   // ( 选中投影矩阵 ) 设置矩阵模式 , 告知 GPU 当前要操作的矩阵是投影矩阵
   glMatrixMode(GL_PROJECTION);
   // ( 给投影矩阵设置值 ) 向投影矩阵设置参数
   // 参数一 : 50.0f 是摄像机的视口角度
   // 参数二 : 800.0f / 600.0f 是窗口的宽高比
   // 参数三 : 0.1f , 可视的最近的距离
   // 参数四 : 1000.0f , 可视的最远距离
   gluPerspective(50.0f, 800.0f / 600.0f, 0.1f, 1000.0f);
   // 上述设置好了摄像机的参数 , 具体的摄像机能看什么东西 , 就需要模型视图矩阵设置
   // ( 选中模型矩阵 )
   glMatrixMode(GL_MODELVIEW);
   // ( 设置模型矩阵值 ) , 这里设置的是单位矩阵
   glLoadIdentity();




OpenGL 绘制相关代码 :


 

// 渲染场景
  // 清除缓冲区 , 
  // 使用之前设置的 glClearColor(1.0, 0.0, 0.0, 1.0) 擦除颜色缓冲区
  // 红色背景
  glClear(GL_COLOR_BUFFER_BIT);
        // 设置当前的绘制颜色 , 4 个 unsigned byte 
        // 每个颜色的分量占一个字节
        // 参数数据是 R 红色 G 绿色 B 蓝色 A 透明度
        // 下面设置的含义是白色, 绘制点的时候, 每次都使用白色绘制
        glColor4ub(255, 255, 255, 255);
        // 设置绘制点的大小 20 像素
        glPointSize(20.0f);
        // 绘制点时, 会将从 glBegin 到 glEnd 之间的所有的点都绘制出来
        // 可以调用 glVertex3f 方法设置多个点
        // 绘制点开始
        glBegin(GL_POINTS);
        // 设置绘制点的位置
        glVertex3f(0.0f, 0.0f, -0.5f);
        // 绘制点结束
        glEnd();
  // 将后缓冲区绘制到前台
  SwapBuffers(dc);







四、运行效果展示


设置的清除缓冲区背景颜色是红色 , 因此整体背景显示的是红色 ,


 

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


设置的 当前绘制颜色 是白色 , 设置当前绘制点的大小 20 像素 , 绘制的效果就是一个 20 像素的点 ;


   

// 设置当前的绘制颜色 , 4 个 unsigned byte 
        // 每个颜色的分量占一个字节
        // 参数数据是 R 红色 G 绿色 B 蓝色 A 透明度
        // 下面设置的含义是白色, 绘制点的时候, 每次都使用白色绘制
        glColor4ub(255, 255, 255, 255);
        // 设置绘制点的大小 20 像素
        glPointSize(20.0f);



image.png





五、相关资源


GitHub 地址 : https://github.com/han1202012/OpenGL


博客源码快照 : https://download.csdn.net/download/han1202012/14505038


目录
相关文章
|
存储 Java Android开发
Android OpenGL ES(六)----进入三维在代码中创建投影矩阵和旋转矩阵
Android OpenGL ES(六)----进入三维在代码中创建投影矩阵和旋转矩阵
153 0
Android OpenGL ES(六)----进入三维在代码中创建投影矩阵和旋转矩阵
|
图形学 异构计算
学习OpenGL ES之变换矩阵
学习OpenGL ES之变换矩阵
学习OpenGL ES之变换矩阵
|
索引
OpenGL ES 案例08:GLKit使用索引绘图 + 纹理颜色混合
OpenGL ES 案例08:GLKit使用索引绘图 + 纹理颜色混合
83 0
OpenGL ES 案例08:GLKit使用索引绘图 + 纹理颜色混合
|
索引
OpenGL ES 案例07:GLSL使用索引绘图 + 纹理颜色混合
OpenGL ES 案例07:GLSL使用索引绘图 + 纹理颜色混合
291 0
OpenGL ES 案例07:GLSL使用索引绘图 + 纹理颜色混合
|
存储 API
九、OpenGL 基础变化与矩阵堆栈
OpenGL 基础变化与矩阵堆栈
230 0
九、OpenGL 基础变化与矩阵堆栈
八、了解OpenGL中的向量、矩阵
了解OpenGL中的向量、矩阵
183 0
八、了解OpenGL中的向量、矩阵
|
机器学习/深度学习 存储 Windows
【OpenGL】二十一、OpenGL 矩阵压栈与出栈 ( 不同类型矩阵变换先后顺序 | 渲染前不设置单位阵 | 压栈出栈原理分析 | 代码示例 )(二)
【OpenGL】二十一、OpenGL 矩阵压栈与出栈 ( 不同类型矩阵变换先后顺序 | 渲染前不设置单位阵 | 压栈出栈原理分析 | 代码示例 )(二)
129 0
【OpenGL】二十一、OpenGL 矩阵压栈与出栈 ( 不同类型矩阵变换先后顺序 | 渲染前不设置单位阵 | 压栈出栈原理分析 | 代码示例 )(二)
【OpenGL】二十一、OpenGL 矩阵压栈与出栈 ( 不同类型矩阵变换先后顺序 | 渲染前不设置单位阵 | 压栈出栈原理分析 | 代码示例 )(一)
【OpenGL】二十一、OpenGL 矩阵压栈与出栈 ( 不同类型矩阵变换先后顺序 | 渲染前不设置单位阵 | 压栈出栈原理分析 | 代码示例 )(一)
127 0
【OpenGL】二十一、OpenGL 矩阵压栈与出栈 ( 不同类型矩阵变换先后顺序 | 渲染前不设置单位阵 | 压栈出栈原理分析 | 代码示例 )(一)
【OpenGL】二十、OpenGL 矩阵变换 ( 矩阵缩放变换 | 矩阵旋转变换 | 矩阵平移变换 )(一)
【OpenGL】二十、OpenGL 矩阵变换 ( 矩阵缩放变换 | 矩阵旋转变换 | 矩阵平移变换 )(一)
124 0
【OpenGL】二十、OpenGL 矩阵变换 ( 矩阵缩放变换 | 矩阵旋转变换 | 矩阵平移变换 )(一)