zoukankan      html  css  js  c++  java
  • OpenGL绘图过程简述

    OpenGL绘图的基本过程是:清除缓冲区,设置当前颜色,绘制几何图元,输出图形

    一、清除缓冲区

    缓冲区是用来保存绘图过程中产生的图像数据的内存区域,OpenGL有颜色、深度、累积和模板等四种常用的缓冲区。这里只介绍颜色缓冲区和深度缓冲区的清除方法。

    由于缓冲区中可能保留有上一次绘图遗留下来的图像数据,这些数据会影响本次绘图,因此在绘制新图之前必须将它们清除掉。颜色缓冲区中存放的是图像的像素颜色数据,深度缓冲区存放的是用于图像消隐的深度信息。在一个三维场景中,距离视点较近的物体可能部分地或全部地遮挡住距离视点较远的物体。将被遮挡的部分小曲不显示的技术成为图像消隐技术。实现图像消隐最简单的方法是使用深度缓冲区(Z-Buffer),清除深度缓冲区的目的是使消隐工作能正确地进行。一般情况下需要清除的缓冲区就是这两个缓冲区。

    清除缓冲区的工作分两步进行。

    1)设置清除值。清除值是在清除缓冲区时用来填充缓冲区的数据。设置颜色缓冲区清除值的函数是glClearColor(),它有四个浮点型参数,分别表示清除值的R、G、B、A分量的值,默认值全为0。其中第四个参数A表示Alpha值,主要用于融合,一般把它设为0。如果使用整个窗口作为OpenGL的绘图区域,则可以将颜色缓冲区的清除值看作是窗口的背景颜色。设置深度缓冲区清除值的函数是glClearDepth(),它只有一个参数,即深度清除值,取值范围为[0.01,1.0],默认值为1.0。

    2)清除缓冲区。清除缓冲区使用的函数是glClear(),它只有一个参数,表示将要清除的缓冲区的种类,可取的值有GL_COLOR_BUFFER_BIT(颜色缓冲区)、GL_DEPTH_BUFFER_BIT(深度缓冲区)、GL_ACCUM_BUFFER_BIT(累积缓冲区)、GL_STENCIL_BUFFER_BIT(模板缓冲区)。这些值也可以用逻辑或组合起来使用,实现一次清除多个缓冲区。

    二、设置颜色

    根据需要设置当前颜色。一旦一种颜色被设置为当前颜色,其后所有物体都将用该颜色绘出,直到当前颜色被设置为新的颜色为止。设置颜色的函数是glColor()。

    三、绘制几何图形

    OpenGL中用于绘图的函数有很多,这里只介绍基本几何图元的绘图函数。在glBegin()和glEnd()函数之间调用基本图元函数完成点、线、和多边形的绘制。glBegin()函数原型是:

    void glBegin(GLenum mode);

    其中mode表示几何图元的类型,取值如下表。

    glEnd()函数原型是:

    void glEnd(void);

    在glBegin()和glEnd()之间,只能调用下表所列的函数,调用其他函数会导致OpenGL错误。glBegin()和glEnd()函数必须成对使用,否则可能导致不可预期的错误。

    四、图形输出

    glFlush()函数启动OpenGL绘图命令的执行,并将图形光栅化后输出在设备上。如果OpenGL工作在双缓冲模式下,缓冲区切换函数(SwapBuffers())隐含执行glFlush()。

  • 相关阅读:
    Azure School女神相邀,把每分钟都过的更充实
    Java、Node.js、PHP还是.Net? 无论你选谁,我都能教你一招!
    一样的Java,不一样的HDInsight大数据开发体验
    第五代微软小冰 | 你有一个来自人工智能的电话待接听
    2017“编程之美”终章:AI之战勇者为王
    大数据freestyle: 共享单车轨迹数据助力城市合理规划自行车道
    语音识别技术里程碑:错误率降至5.1%,超过专业速记员
    wait和waitpid
    Linux网络编程wait()和waitpid()的讲解
    如何测试Linux 中的wait函数能不能等待子进程的子进程?
  • 原文地址:https://www.cnblogs.com/njucslzh/p/1759734.html
Copyright © 2011-2022 走看看