📜  开始使用 OpenGL

📅  最后修改于: 2021-10-19 04:56:08             🧑  作者: Mango

Open Graphics Library (OpenGL)是一种跨语言(独立于语言)、跨平台(独立于平台)的 API,用于渲染 2D 和 3D 矢量图形(使用多边形来表示图像)。 OpenGL API 主要是在硬件中设计的。

  • 设计:此 API 被定义为一组可由客户端程序调用的函数。虽然功能类似于C语言,但它是独立于语言的。
  • 开发:它是一个不断发展的 API, Khronos Group定期发布新版本,与以前的版本相比,它具有一些扩展功能。 GPU 供应商也可能以扩展的形式提供一些附加功能。
  • 关联的库:最早的版本是与一个称为 OpenGL 实用程序库的配套库一起发布的。但由于 OpenGL 是一个相当复杂的过程。因此,为了使其更容易,添加了其他库,例如 OpenGL Utility Toolkit,后来被 free glut 取代。后来包含的库是 GLEE、GLEW 和滑翔。
  • 实现: Mesa 3D 是 OpenGL 的开源实现。它可以进行纯软件渲染,也可以利用直接渲染基础设施在 BSD、Linux 和其他平台上使用硬件加速。

在 Ubuntu 上安装 OpenGL
要在 Ubuntu 上安装 OpenGL,只需在终端中执行以下命令(如安装任何其他东西):

sudo apt-get install freeglut3-dev

对于在 Ubuntu 操作系统上工作:

gcc filename.c -lGL -lGLU -lglut 
where filename.c is the name of the file
with which this program is saved.

在 Code::Blocks 中的 Windows 上安装 OpenGL

  1. 下载代码块并安装
  2. 转到链接并从 freeglut MinGW 包之后出现的下载链接下载 zip 文件,链接名称为 Download freeglut 3.0.0 for MinGW 并解压缩。
  3. 以管理员身份运行打开记事本并从中打开文件
    1. This PC > C:(C-drive) > Program Files(x86) > CodeBlocks > share > CodeBlocks > templates,(然后点击显示所有文件)
    2. 接下来,打开 glut.cbp 并搜索所有glut32并替换为freeglut
    3. 然后,从 This PC > C:(C-drive) > Program Files(x86) > CodeBlocks > share > CodeBlocks > templates > Wizard > glut打开(然后单击以显示所有文件)
    4. 打开wizard.script,在这里,也用freeglut替换所有的glut32
  4. 然后转到freeglut文件夹(下载的位置)和
    1. 包括> GL 并从那里复制所有四个文件
    2. 转到此 PC > C:(C-drive) > Program Files(x86) > CodeBlocks > MinGW > include > GL 并粘贴它。
    3. 然后,从下载文件夹 freeglut > lib,复制两个文件并转到 This PC > C:(C-drive) > Program Files(x86) > CodeBlocks > MinGW > lib 并粘贴它。
    4. 再次转到下载的文件夹 freeglut > bin 并从此处复制一个文件 (freeglut.dll),然后转到此 PC > C:(C-drive) > Windows > SysWOW64 并粘贴此文件。
  5. 现在打开代码::块。
    1. 选择文件 > 新建 > 项目 > GLUT 项目 > 下一步。
    2. 给项目标题任何东西,然后选择下一步。
    3. 选择 GLUT 的位置:This PC > C:(C-drive) > Program Files(x86) > CodeBlocks > MinGW。
    4. 按确定 > 下一步 > 完成。

现在,Code::Blocks 已准备好测试 OpenGL 文件。

演示如何使用 OpenGL

为了展示 OpenGL 的工作原理,使用 OpenGL 平台在 C 中添加了一个简单的圆绘制程序。

C
// C program to demonstrate
// drawing a circle using
// OpenGL
#include
#include
#include
#define pi 3.142857
 
// function to initialize
void myInit (void)
{
    // making background color black as first
    // 3 arguments all are 0.0
    glClearColor(0.0, 0.0, 0.0, 1.0);
     
    // making picture color green (in RGB mode), as middle argument is 1.0
    glColor3f(0.0, 1.0, 0.0);
     
    // breadth of picture boundary is 1 pixel
    glPointSize(1.0);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
     
    // setting window dimension in X- and Y- direction
    gluOrtho2D(-780, 780, -420, 420);
}
 
void display (void)
{
    glClear(GL_COLOR_BUFFER_BIT);
    glBegin(GL_POINTS);
    float x, y, i;
     
    // iterate y up to 2*pi, i.e., 360 degree
    // with small increment in angle as
    // glVertex2i just draws a point on specified co-ordinate
    for ( i = 0; i < (2 * pi); i += 0.001)
    {
        // let 200 is radius of circle and as,
        // circle is defined as x=r*cos(i) and y=r*sin(i)
        x = 200 * cos(i);
        y = 200 * sin(i);
         
        glVertex2i(x, y);
    }
    glEnd();
    glFlush();
}
 
int main (int argc, char** argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
     
    // giving window size in X- and Y- direction
    glutInitWindowSize(1366, 768);
    glutInitWindowPosition(0, 0);
     
    // Giving name to window
    glutCreateWindow("Circle Drawing");
    myInit();
     
    glutDisplayFunc(display);
    glutMainLoop();
}


要在 Ubuntu 中编译上述程序,

gcc filename.c -lGL -lGLU -lglut -lm 
where filename.c is the name of the file
with which this program is saved.

上述程序的输出显示在下面的屏幕截图中

Code::Blocks 中的安装参考: https://www.youtube.com/watch?v=NPcnymtP2SE