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

news2025/1/16 3:56:49

目录

    • 概述
    • 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/156055.html

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

相关文章

Lichee_RV学习系列--CoreMark-Pro移植

Lichee_RV学习系列文章目录 Lichee_RV学习系列—认识Lichee Rv Dock、环境搭建和编译第一个程序 Lichee_RV学习系列—移植dhrystone 文章目录Lichee_RV学习系列文章目录一、CoreMark-Pro简介二、获取源码三、编译coremark-pro1、配置coremark-pro2、编译coremark-pro四、开发板…

各种树的总结

1.B树和B树 数据库的大量数据用什么存储&#xff1f;为什么是B树和B树&#xff1f;使用二叉树不行吗&#xff1f;先来说说他们的演变吧&#xff0c;首先如果用二叉树的话都为排好序的树查询起来是不是效率不高&#xff1f;所以此时我们提出了对树排序&#xff0c;就变成了二叉…

联想拯救者屏幕亮度无法调节,监视器和显卡驱动问题,经过多种测试

主要的问题位置 1&#xff0c;设备管理器中的监视器部分 2&#xff0c;设备管理器的显卡适配器部分 个人电脑出现这种情况的原因 自己拆一下机器加装固态&#xff0c;但这种感觉不应该导致问题。但导致这种问题的原因可能是装固态时候把电池拔了。 一些网上常说的方法 更新…

数字化转型对企业有什么意义?有哪些案例可以分享?

如何看待制造企业数字化转型&#xff1f;制造业企业数字化转型有哪些思路和案例&#xff1f; 一提到制造企业数字化转型&#xff0c;大多数人都认为&#xff0c;这是专属于大型制造企业的行为。其实不然&#xff0c;对于中小型制造企业&#xff0c;数字化转型也应该从易到难&a…

interview

1.PyTorch1.1 Conv2d1.2 dataset&#xff0c;dataloader1.3 训练pipeline1.4 梯度归零1.5 torch保存模型种类及区别2.目标检测2.1 yolo3,4,5,7区别2.2 yolo使用的loss(ciou,BCE等等)ciouBCElossL1,L2,CE,BCE2.3 图像增强2.4 IOU计算公式3.深度学习基础3.1 卷积公式4.TensorRT5.…

Niantic:未来AR重要场景,VPS众包3D地图到底是啥?

几个世纪以来&#xff0c;人们使用指南针、地图、星盘和象限仪来找路&#xff0c;而在过去二十年里&#xff0c;GPS成为了主流的定位系统&#xff0c;并且与手机结合后&#xff0c;让人们的出行越来越方便。而随着摄像头等技术发展&#xff0c;我们也开始看到视觉定位技术的崛起…

(almalinux,rockylinux,openeuler,openanolis,centos,ubuntu)云原生容器镜像漏洞trivy扫描对比

一、下载并安装trivy漏洞扫描工具 下载&#xff1a; https://github.com/aquasecurity/trivy/releases/download/v0.31.3/trivy_0.31.3_Linux-64bit.rpm 以下为centos平台的安装&#xff1a; [rootlocalhost ~]# rpm -ivh trivy_0.31.3_Linux-64bit.rpm Preparing... …

【算法刷题 DAY03】剑指offer树相关算法题总结2

JZ7 重建二叉树 描述 给定节点数为 n 的二叉树的前序遍历和中序遍历结果&#xff0c;请重建出该二叉树并返回它的头结点。 例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6}&#xff0c;则重建出如下图所示。 提示: 1.vin.length pre.length 2.pre 和…

CSS入门二、美化页面元素

零、文章目录 文章地址 个人博客-CSDN地址&#xff1a;https://blog.csdn.net/liyou123456789个人博客-GiteePages&#xff1a;https://bluecusliyou.gitee.io/techlearn 代码仓库地址 Gitee&#xff1a;https://gitee.com/bluecusliyou/TechLearnGithub&#xff1a;https:…

【高速数字化仪应用案例系列】虹科数字化仪在光纤领域的应用

光纤应用 光纤越来越多地应用于各种领域。它们能够以光速长距离传输信息&#xff0c;并且损耗低&#xff0c;这使它们成为大容量远程数据通信的主要媒介。因此&#xff0c;光纤网络可以在电信系统中找到&#xff0c;它们用于传输和接收的目的。它们还用于提供各种数字服务&…

Docker命令-常用命令讲解

Docker常用命令 一&#xff1a;帮助命令二&#xff1a;镜像命令1. docker images 查看所有本地的主机上的镜像2. docker search 镜像名3. docker pull 下载镜像4. docker rmi三&#xff1a;容器命令1.docker run 新建容器并启动2.从容器返回到主机&#xff1a;3.docker ps 列出…

收银软件哪家强?2023年收银软件排行榜新鲜出炉!

每家实体店都少不了收银的程序&#xff0c;每个实体店老板都离不开收银的工具。随着信息技术的发展&#xff0c;收银的工具不再只有收银机&#xff0c;更高效、更方便的收银软件&#xff0c;已经成为了零售店老板们的新宠。收银机和收银软件有什么区别&#xff1f;收银机只能对…

1.11 LED灯点亮串口解析器

LED点灯实验 一&#xff0e;电路图&#xff1a; 三极管&#xff1a; NPN类型&#xff1a; PNP类型&#xff1a; NPN类型当基极为高电平时&#xff0c;集电极和发射极导通 PNP类型当基极为低电平时&#xff0c;集电极和发射极导通 由电路图可知LED电路图中三极管为NPN类型&am…

我在CSDN的2022---2023Flag

一、加入CSDN我是在2020年12月注册的CSDN&#xff0c;大一上学期就听同学给我讲了这个软件&#xff0c;然后就下载了&#xff0c;里面确实很多优质文章&#xff0c;对于当时向我们这样的初学者来说就是很实用。还记得都是搜什么&#xff0c;求最大值&#xff0c;最小值&#xf…

Redis热点数据处理

1、概念热点数据就是访问量特别大的数据。2、热点数据引起的问题流量集中&#xff0c;达到物理网卡上限。请求过多&#xff0c;缓存分片服务被打垮。redis作为一个单线程的结构&#xff0c;所有的请求到来后都会去排队&#xff0c;当请求量远大于自身处理能力时&#xff0c;后面…

RabbitMQ消息可靠性问题、死信交换机、延迟消息、惰性队列

目录消息可靠性生产者确保将消息成功送入队列消息确认消息回执消费者确保消息成功从队列中取出并成功消费消费确认机制消费失败重试机制失败策略使用第三种方式&#xff1a;消费者指定失败后转发的交换机使用第一种方式&#xff1a;在队列中指定死信交换机消息持久化问题交换机…

软件测试常见性能问题案例分析

在用户场景不确定的情况下&#xff0c;我们为了保障软件的正常运行就必须对软件的性能进行测试。下面我们一起来看看在软件测试中常见的性能问题&#xff0c;希望大家可以通过这七个比较典型的案例分析&#xff0c;充分掌握各种性能问题的解决方法。 案例一&#xff1a;某次压…

Spring Cloud 03 --- Nacos注册中心

前言 注册中心以Map形式存储消费者与生产者的IP和端口 基本概念 &#xff08;1&#xff09;Nacos 是阿里巴巴推出来的一个新开源项目&#xff0c;是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供…

2023年使用率会很高的9个SSH远程连接工具有这些!网工、运维你们用的是哪个?

网络工程师和运维工程师我想每天做的最多的一件事就是远程连接了&#xff0c;例如远程连接网络设备、远程连接服务器&#xff08;物理服务器或者云服务器&#xff09;&#xff0c;这个时候大多数用的工具都是基于SSH协议的&#xff0c;每位工程我想都有自己熟悉或者青睐的SSH工…

时序图文献精度——5.2019-IJCIA-Node Embedding over Temporal Graphs

Node Embedding over Temporal Graphs Abstract 作者提出了一种在时间图中嵌入节点的方法。学习时间图的节点和边随时间的演变&#xff0c;并将这种动态整合到时间节点嵌入框架中&#xff0c;用于不同的图预测任务。作者也提出了一个联合损失函数&#xff0c;它通过学习组合节…