目录

  • 概述
  • fedora下安装
  • 编写OpenGL应用程序
  • 测试hello,world

概述

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) {// 初始化GLUTglutInit(&argc, argv);// 显示模式:双缓冲、RGBAglutInitDisplayMode(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’

OpenGL集锦(1)-安装与概述相关推荐

  1. Apollo进阶课程㊴丨Apollo安装过程概述

    原文链接:进阶课程㊴丨Apollo安装过程概述 Apollo是一个自动驾驶的平台,推荐的参考运行环境为:ThinkPAD X240.CPU:i5 .四核 .内存 8G. 硬盘容量40G以上. 上周阿波 ...

  2. Cloudera简介和安装部署概述

    Cloudera简介和安装部署概述 原创2016年09月06日 11:27:10 标签: Cloudera / 大数据 / CDH / Hadoop 12285 最近作者在研究Cloudera,并且在 ...

  3. OpenGL ES 2.0 总体概述

    文章目录 OpenGL ES 2.0 总体概述 1. OpenGL ES 的两个小伙伴 1.1 EGL 1.2 GLSL 2. 屏幕图片的本质和产生过程 3. OpenGL ES pipeline 3 ...

  4. opengl 实时波形显示_OpenGL1------OpenGL概述

    OpenGL1------OpenGL概述1. 图形硬件1.1 概述 图形硬件描述了使用专门基于光栅化的硬件架构,将3D对象快速渲染为计算机屏幕上的像素所必须的硬件组件.图形硬件(通常是指GPU)为用 ...

  5. OpenGL之GLEW安装

    下载链接: https://sourceforge.net/project/downloading.php?group_id=67586&filename=glew-1.5.1-win32.z ...

  6. OpenGL笔记--QT使用OpenGL时环境安装

    介绍   OpenGL缩写是"开放图形库",其实它是一组接口(API),用于绘制复杂的三维图像.好处是,使用OpenGL的话,可以使用GPU进行硬件加速.下面介绍一下Linux环境 ...

  7. mysql 2008安装_SQL server 2008安装及概述

    据库的发展史 在人类诞生以来,就有记录数据的需求,在远古时代就有了结绳记事的故事,而随着科技的进步,我们记录数据的方式也发生了天翻地覆的变化,从效率低.规模小.不能适应信息高速发展的需要的手工或者简单 ...

  8. Apache Durid 数据存储(Hadoop概述 安装 HDFS概述 数据存储遇到的问题)

    Apache Durid 数据存储 Apache Durid 数据存储 1. 分布式技术 1.1 为什么需要分布式 1.1.1 计算问题 1.1.2 存储问题 1.2 分布式系统概述 1.3 分布式实 ...

  9. OpenGL实现通用GPU计算概述

    可能比較早一点做GPU计算的开发者会对OpenGL做通用GPU计算,随着GPU计算技术的兴起,越来越多的技术出现,比方OpenCL.CUDA.OpenAcc等,这些都是专门用来做并行计算的标准或者说接 ...

最新文章

  1. php worker微信,微信小程序API createWorker
  2. 计算机游戏第72关,史上最难的游戏第72关 第72关通关攻略
  3. c++ 弹出菜单在固定的位置_固定资产管理软件操作手册(资产维修)
  4. android如何设置默认关闭虚拟按钮,android – Chrome自定义标签更改默认关闭按钮不起作用...
  5. java 开源 网络流量统计_jpcap java流量监控
  6. 2017.8.7 数学作业 思考记录
  7. equalwith java_java中==与equal()方法的区别
  8. python三对角矩阵_用NumPy实现三对角矩阵算法(TDMA)
  9. 底量超顶量超级大黑马指标源码_清华女教授忠言:只要出现“底量超顶量”走势,后期必有暴走趋势...
  10. linux生成4g文件,linux中创建超过4g文件的方法-o_largefile?
  11. 分布式事务之两阶段提交
  12. 3.Regression(二)
  13. 3d场景渲染插件MultiScatter 1.623
  14. 最新!CCF-A类顶会WWW2020最佳论文出炉!OSU最佳论文
  15. Duang~ Golang 学习初探
  16. 基于STM32+OV7670+TFT显示(升级篇:将摄像头采集到的画面显示在TFT屏)
  17. asp.net 微信jsapi支付
  18. 多维分析,为什么企业开始大规模应用商业智能(BI)
  19. 怎样用 16.7 个小时做 40 小时的工作
  20. java微信开发者模式开发_微信开发之启用开发者模式(三)

热门文章

  1. nslookup 包含在那个包中_nslookup详解(name server lookup)( 域名查询)
  2. 【汇总篇】各类电子元器件失效机理分析!
  3. Java WebMail
  4. 区块链NFT之OpenSea
  5. 透析《长安十二时辰》里的望楼,人类在唐朝就有5G愿望了?
  6. javascript实现2048小游戏
  7. 计算机为何要用三级储存体系,计算机三级存储体系(1).ppt
  8. 在桌面上离线编辑Office Web Apps文档
  9. css3立体样式下载按钮
  10. Browser历险记】认识Browser浏览器