OpenGL集锦(1)-安装与概述_c++ opengl

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

目录

概述

OpenGL英语Open Graphics Library译名开放图形库或者“开放式图形库”是用于渲染2D、3D矢量图形的跨语言、跨平台的应用程序编程接口API。这个接口由近350个不同的函数调用组成用来绘制从简单的图形比特到复杂的三维景象。而另一种程序接口系统是仅用于Microsoft Windows上的Direct3D。OpenGL常用于CAD、虚拟现实、科学可视化程序和电子游戏开发。
OpenGL的高效实现利用了图形加速硬件存在于Windows部分UNIX平台和Mac OS。这些实现一般由显示设备厂商提供而且非常依赖于该厂商提供的硬件。开放源代码库Mesa是一个纯基于软件的图形API它的代码兼容于OpenGL。但是由于许可证的原因它只声称是一个“非常相似”的API。
当今OpenGL是视频行业领域中用于处理2D/3D图形的最为广泛接纳的API在此基础上为了用于计算机视觉技术的研究从而催生了各种计算机平台上的应用功能以及设备上的许多应用程序。其是独立于视窗操作系统以及操作系统平台可以进行多种不同领域的开发和内容创作简而言之其帮助研发人员能够实现PC、工作站、超级计算机以及各种工控机等硬件设备上实现高性能、对于视觉要求极高的高视觉图形处理软件的开发。

OpenGL最初是作为Iris GL的开放和可复制替代品创建的Iris GL是Silicon graphics工作站上的专有图形API。尽管OpenGL最初在某些方面与IrisGL相似但由于缺乏正式规范和一致性测试IrisGL不适合广泛采用。Mark Segal和Kurt Akeley编写了OpenGL1.0规范该规范试图正式定义有用的图形API并使跨平台非SGI第三方实现和支持变得可行。API 1.0版本中的一个显著遗漏是纹理对象。IrisGL对所有类型的对象都有定义和绑定阶段包括材质、灯光、纹理和纹理环境。OpenGL避开了这些对象转而支持增量状态更改认为可以将集体更改封装在显示列表中。这仍然是一种哲学只是没有明确定义阶段的纹理对象glBindTexture是API的关键部分。

OpenGL经过了多次修订主要是增量添加核心API的扩展已逐渐纳入API主体。例如OpenGL1.1向核心API添加了glBindTexture扩展。

OpenGL2.0包含了OpenGL着色语言也称为GLSL的显著增加这是一种类似C的语言可以用它编程管道的转换和片段着色阶段。

OpenGL3.0增加了弃用的概念在以后的版本中将某些功能标记为要删除。GL 3.1删除了大多数不推荐的功能GL 3.2创建了核心和兼容性OpenGL上下文的概念。

目前发布的OpenGL官方版本为1.0、1.1、1.2、1.2.1、1.3、1.4、1.5、2.0、2.1、3.0、3.1、3.2、3.3、4.0、4.1、4.2、4.3、4.4、4.5、4.6。

fedora下安装

$sudo dnf install mesa-libGL-devel mesa-libGLU-devel
$sudo dnf install freeglut-devel

编写OpenGL应用程序

第一步是选择你的语言。OpenGL的绑定存在于多种语言中从C#和Java到Python和Lua。有些语言有多组OpenGL绑定其中没有一个是官方的。所有这些最终都基于C/C++绑定。

如果未使用C/C++则必须下载并安装所选语言的包或库其中包含OpenGL绑定。有些是预装的但有些是单独下载的。

如果您使用的是C/C++则必须首先设置一个可以链接到OpenGL的构建环境Visual Studio项目、GNU makefile、CMake文件等。在Windows下您需要静态链接到名为OpenGL32.lib的库请注意如果您正在构建64位可执行文件则仍然链接到OpenGL32.lib.“32”部分没有意义。Visual Studio和大多数Windows编译器都带有此库。

在Linux上您需要链接到libGL。这是通过命令行参数“-lGL”完成的。

初始化

在程序中实际使用OpenGL之前必须先初始化它。因为OpenGL是独立于平台的所以没有标准的方法来初始化OpenGL每个平台处理它的方式不同。非C/C++语言绑定也可以以不同的方式处理这些问题。

OpenGL初始化有两个阶段。第一阶段是创建OpenGL上下文第二阶段是加载使用OpenGL所需的所有函数。一些非C/C++语言绑定将它们合并为一个。

OpenGL上下文创建

OpenGL上下文表示所有OpenGL。创建一个是非常特定于平台的也是特定于语言绑定的。

如果您正在为OpenGL使用C/C++语言绑定那么强烈建议您使用窗口工具包来管理此任务。这些库创建一个窗口将OpenGL上下文附加到此窗口并管理该窗口的基本输入。一旦您熟悉OpenGL就可以开始学习如何手动执行此操作。

大多数非C/C++语言绑定将为您提供创建上下文的特定于语言的机制。

获取函数

为了使用OpenGL您必须获得OpenGL API函数。对于您熟悉的大多数库只需#包含一个头文件确保库链接到您的项目或makefile中它就可以正常工作。OpenGL不是这样工作的。

出于与本讨论最终无关的原因您必须通过特定于平台的API调用手动加载函数。这个样板工作是用各种OpenGL加载库完成的这些使这个过程变得顺畅。强烈建议您使用一个。

但是如果您想手动加载则有一个关于如何手动加载函数的指南。您仍然应该使用扩展加载器。

测试hello,world

#include <iostream>
#include <GL/freeglut.h>//freeGLUT窗口库
#include  <GL/gl.h>
/**
 * 渲染回调函数
 */
void RenderScenceCB(){
    // 清空颜色缓存
    glClear(GL_COLOR_BUFFER_BIT);
    // 交换前后缓存
    glutSwapBuffers();
}

/**
 * 主函数
 */
int main(int argc, char ** argv) {
    
    // 初始化GLUT
    glutInit(&argc, argv);
    
    // 显示模式双缓冲、RGBA
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA);
    
    // 窗口设置
    glutInitWindowSize(480, 320);      // 窗口尺寸
    glutInitWindowPosition(100, 100);  // 窗口位置
    glutCreateWindow("Tutorial 01");   // 窗口标题
    
    // 开始渲染
    glutDisplayFunc(RenderScenceCB);
    
    // 缓存清空后的颜色值
    glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
    
    // 通知开始GLUT的内部循环
    glutMainLoop();
  
    return 0;
}

我使用codelite注意要在linker处设置路径

在这里插入图片描述

/usr/bin/make -j4 -e -f  "learnopengl.mk"  MakeIntermediateDirs && /usr/bin/make -j4 -e -f  "learnopengl.mk"  all
----------Building project:[ learnopengl - Debug ]----------
/usr/bin/g++  -c  "/home/spx/learn/learnopengl/learnopengl/main.cpp" -g -O0 -Wall   -o ../build-Debug/learnopengl/main.cpp.o -I. -I.
/usr/bin/g++ -o ../build-Debug/bin/learnopengl @../build-Debug/learnopengl/ObjectsList.txt -L.   -lGL -lglut
=== build completed successfully (0 errors, 0 warnings) ===

否则 报错
undefined reference to `glClear’

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: c++