c++之 OpenGL(1)-安装与概述

news2025/3/2 4:09:38

目录

    • 概述
    • 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) {
    
    // 初始化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’

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/144730.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux开发工具的使用(一)

文章目录Linux开发工具的使用&#xff08;一&#xff09;1. Linux软件包管理器yum1.1 查看软件1.2 下载软件1.3 卸载软件2.vim编辑器的介绍和使用2.1 vim的介绍2.2 vim的基本操作2.3 vim命令模式命令集(必须是命令模式下)2.3.1 移动光标2.3.2 删除文字2.3.3 复制文本内容2.3.4 …

C++ 不知树系列之二叉堆排序(递归和非递归实现上沉、下沉算法)

1. 前言 什么是二叉堆&#xff1f; 二叉堆是有序的 完全二叉树&#xff0c;在完全二叉树的基础上&#xff0c;二叉堆 提供了有序性特征&#xff1a; 二叉堆 的根结点上的值是整个堆中的最小值或最大值。 当根结点上的值是整个堆结构中的最小值时&#xff0c;此堆称为最小堆。…

xpath获取标签之间的文本内容

目前在学习xpath&#xff0c;需要取一个package信息&#xff0c;如图&#xff1a; 标题 "package"在span里面&#xff0c;比较方便取&#xff0c;用这个xpath就行&#xff1a; //div[idartikeltabelle]/table/tbody/tr[1]/td[2]/span[classinsertlabela and text()pa…

/mmcv/_ext.cpython-36m-x86_64-linux-gnu.so: undefined symbol: _ZN3c107Warning

报/mmcv/_ext.cpython-36m-x86_64-linux-gnu.so: undefined symbol: _ZN3c107Warning 就是mmcv或者mmcv-full编译有问题&#xff1b; 尝试了mmcv_full-1.7.1-cp36-cp36m-manylinux1_x86_64.whl pip 安装&#xff0c;都不是对应版本&#xff1b; 在安装mmcv或者mmcv-full都是无…

如何用PPT画出好看的科研图

前言 好看的科研图可以从前人的作品中进行借鉴&#xff0c;今天介绍2副精美的科研图以及他们在PPT中的绘制方法&#xff0c;话不多说&#xff0c;先摆上标准科研图 1. 黑色粗体边框以及淡填充颜色 黑色粗体边框和淡填充颜色真的让矩形一下子变得很有质感&#xff0c;在学习的…

VMware Fusion设置静态IP+端口转发(macOS)+内网穿透

很少有资料提到配置macOS上VMware Fusion的端口转发&#xff0c;因此我在这里进行了一些记录打开网络设置解锁并添加新的网络适配器只有新的网络适配器才允许配置转发&#xff0c;默认的不允许这样做。设置NAT转发虚拟机选择使用新创建的虚拟网络适配器Ubuntu配置静态IP/DNS服务…

linux xshell用户免密登录设置

最重要准备工作 ​编辑linux xshell用户免密登录设置步骤 1.在xshel进行密钥获取操作 2.创建mkdir ~/.ssh目录&#xff08;检查有没有这个目录&#xff0c;没有自己添加&#xff09; 3.在该目录创建authorized_keys目录。注意&#xff08;目录权限为600&#xff09; 4.将刚…

Android Studio arctic Fox(北极狐)导入openCV

Android studio arctic Fox在引入opencv的时候按照正常的File->New->Import Module操作时&#xff0c;出现无法点击“Next”和“Finish”的情况。如下图 所以我们使用另外的方法进行引入。 准备工作&#xff1a; 1&#xff0c;Android Studio 2&#xff0c;下载opencv…

纪念2022年11月软考高项(信息系统项目管理师)一次通过的经验随笔

一、备考背景2022年5月的浙江软考因为疫情防控原因临时取消&#xff0c;我离杭州买房又远了几分。众所周知&#xff0c;杭州是炒房投资客的香饽饽&#xff0c;即使主城区购房摇号制度不停打补丁&#xff0c;也难济于事。自住客为了与投资客抗衡&#xff0c;一靠社保&#xff0c…

新品做软文推广发布在哪些平台好?

新产品上市前后&#xff0c;会经历开发期、介绍期、成长期、成熟期、衰退期五个阶段&#xff0c;每个阶段都需要软文推广的助力&#xff01; 当一款新品上市前后往往会面临着无法打开市场、产品卖不出去等问题&#xff0c;这个时候软文推广就要做到位&#xff0c;除了文章撰写…

在centos7安装KubeSphere

节点准备 设置hostname hostnamectl set-hostname ks-m4 关闭防火墙 启动&#xff1a; systemctl start firewalld 关闭&#xff1a; systemctl stop firewalld 查看状态&#xff1a; systemctl status firewalld 开机禁用 &#xff1a; systemctl disable firewalld 开机…

SAP 通过 OData Service 反查 CDS View 位置 视图「Workaround」

前言 使用场景&#xff1a;目前已知 OData Service 由 CDS View 发布&#xff0c;但是想要查看该 CDS 的具体内容 根据 OData Service 获取关键信息盲猜对应底表通过 SE11 反查引用位置 猜底表 目前已知 OData Service URL: http://xxx.xxx.com:xxxx/sap/opu/odata/sap/ZCD…

栉风沐雨砥砺行,春华秋实满庭芳——华秋电子2022年度大事记

岁序更替&#xff0c;春华秋实 转眼间&#xff0c;2022年已是过去 回首2022年&#xff0c;华秋肩负使命 持续为电子产业增效降本。 我们加大研发投入&#xff0c;提升全球交付保障能力&#xff1b; 我们以创新引领发展&#xff0c;以实干笃定前行&#xff1b; 以品质为基…

JetBrains 学生和教师认证教程

目录一、学生和教师授权申请方式二、申请网址三、激活JetBrains产品&#xff08;如PyCharm、IDEA&#xff09;一、学生和教师授权申请方式 详见官方教程&#xff1a; JetBrains 学生和教师授权申请方式 二、申请网址 学生和教师可以使用在学校注册的邮箱账号来申请。 新申请…

「EZEC-4」可乐(2种方法:差分+位运算 | 枚举+字典树)

「EZEC-4」可乐 洛谷&#xff1a;「EZEC-4」可乐 题目背景 很久以前&#xff0c;有一个 pigstd&#xff0c;非常迷恋美味的可乐。为了得到美味的可乐&#xff0c;他几乎用尽了所有的钱&#xff0c;他甚至对自己的 npy 也漠不关心其实是因为他没有npy&#xff0c;更不爱好看戏…

C语言实现烟花表白,内含源码!!

虽然现在看烟花有一定难度&#xff0c;但代码式烟花可以随时随地看&#xff01; 烟花的代码很多&#xff0c;实际上是可以用 Python、HTML5 等语言写烟花&#xff0c;但今天主要想和大家分享用C语言写的烟花代码&#xff0c;非常细致和实用。 同学们一定要亲自敲一遍&#xf…

机器视觉(八):图像特征提取

目录&#xff1a; 机器视觉&#xff08;一&#xff09;&#xff1a;概述 机器视觉&#xff08;二&#xff09;&#xff1a;机器视觉硬件技术 机器视觉&#xff08;三&#xff09;&#xff1a;摄像机标定技术 机器视觉&#xff08;四&#xff09;&#xff1a;空域图像增强 …

理解文件系统

之前的东西&#xff0c;全部是在内存中的。但是我们知道&#xff1a;不是所有的文件&#xff0c;都被打开了。大量的文件&#xff0c;就在磁盘上放着&#xff0c;什么都不做。这些文件非常多&#xff0c;杂&#xff0c;乱。而磁盘级别的文件管理&#xff0c;本质工作就能够快速…

maven第三篇:maven 简单命令

上一篇聊了在IDE中如何创建maven项目&#xff0c;后面说到了maven会有一些常用的命令&#xff0c;现在就对命令进简单演示。 注意&#xff1a; 1&#xff1a;命令需要在windows桌面系统下的dos窗口运行。 2&#xff1a;下面演示的命令除了查看版本信息的命令外&#xff0c;很…

科技创未来!中国低代码平台公司流辰信息用实力护您增产又增收!

流辰信息科技&#xff0c;是一家以研发低代码开发平台为使命的中国低代码平台公司&#xff0c;坚持以客户需求为主导&#xff0c;以开源促创新&#xff0c;努力做强做大流辰信息&#xff0c;争创宏伟未来。 在多年的奋斗耕耘中&#xff0c;流辰信息坚持研发&#xff0c;让产品的…