[openGL]在ubuntu20.06上搭建openGL环境

就在刚刚, 我跑上了一个6小时后出结果的测试程序. 离下班还有很久, 于是我打开了接单群 , 发现了很多可以写的openGL项目. 但是!!我的电脑现在是ubuntu呀, 但是不要慌!!!接下来我一步一步教你如何完美搭建一个ubuntu上的openGL环境. 保证一个坑也不会踩!

文章目录

  • 创建项目工作区
  • 工作区配置依赖
    • 1. glad
    • 2. glfw
      • 1. 安装依赖
      • 2. 下载源码, 编译
  • 编写opengl程序, 构建运行

创建项目工作区

在windows中开发opengl程序, 我们直接用visualStudio生成项目然后用GUI配置包含路径就行, 但是ubuntu没有那么方便的IDE, 所以我们手动来创建工作区. 假设咱的程序计划放在目录~/openGL下

  1. cd ~
  2. mkdir openGL
    我习惯将程序源码放到src下, 头文件放在include中, 所以建俩文件夹先(当然你也可以根据你喜欢的习惯配置路径)
  3. cd openGL
  4. mkdir src
  5. mkdir include
    初步建立好了工程代码的位置, 配置一下第三方依赖. 我们知道opengl主要依赖glfw, glad, 所以接下来主要配置这俩玩意儿. 为了保持项目文件的整洁, 我再新建一个目录叫3rdparty; 最后建一个文件夹用来放build相关的东西
  6. mkdir 3rdparty
  7. mkdir build

工作区配置依赖

接下来正式地配置依赖.

#0、安装查看OpenGL版本支持的工具
sudo apt-get install mesa-utils
glxinfo | grep OpenGL#1、安装opengl的核心库sudo apt-get install libgl1-mesa-dev*
sudo apt-get install build-essential#2、安装OpenGL Librarysudo apt-get install libgl1-mesa-dev#3、安装OpenGL Utilities,sudo apt-get install libglu1-mesa-dev
sudo apt-get install libegl1-mesa-dev#4、安装OpenGL Utility Toolkitsudo apt-get install libglut-dev

然后单独配置glad和glew

1. glad

首先配置glad, 它是一个开源库, 提供了在线配置的服务, 咱访问这个服务, 指定需要的版本就能让它自动加载所有相关opengl函数

  1. 首先到官网: https://glad.dav1d.de/
  2. 设置语言为c/c++, 选择你需要的gl版本,譬如我选最新的4.6, 然后选择core模式(如果你需要的是立即渲染模式, 也可以保持默认), 勾选Generate a loader, 然后generate!
    在这里插入图片描述

下载下来之后是个压缩包, 我们先在咱的项目文件夹的第三方依赖中新建一个叫glad的文件夹, 然后把压缩包解压到那里面.

  1. cd ~/openGL/3rdparty
  2. mkdir glad
  3. 找到刚才下载的glad压缩包->右键提取到->解压到~/openGL/3rdparty/glad
    最后咱这个~/openGL/3rdparty目录下是这样的
    在这里插入图片描述

2. glfw

1. 安装依赖

据我所知ubuntu20.04有两种桌面环境: X11和Wayland, 这两种需要安装的东西不一样, 先看一下自己的是哪一种, 再分别安装
查看的命令:

echo $XDG_SESSION_TYPE

如果是X11,执行这个:

sudo apt install xorg-dev

如果是Wayland, 执行这个:

sudo apt install libwayland-dev libxkbcommon-dev wayland-protocols extra-cmake-modules

2. 下载源码, 编译

  1. 下载源码: https://github.com/glfw/glfw/releases/download/3.3.9/glfw-3.3.9.zip
  2. 在你喜欢的位置新建一个文件夹叫glfw, 之后咱对glfw的编译就在这个文件夹下: mkdir ~/glfw && cd ~/glfw
  3. 我们把glfw这个文件夹分为两个部分来看: 第一部分放glfw的源码, 剩下的部分放源码build之后的结果; 因此, 我在glfw中新建一个文件夹叫src, 另一个叫build: mkdir src && mkdir build
  4. 我们把第一步下载的源码解压到刚才新建的src文件夹, 然后执行cmake构建命令: cmake -S ~/glfw/src -B ~/glfw/build
  5. 最后build一下就成功了: cd ~/glfw/build && make

编写opengl程序, 构建运行

现在依赖配好了, 咱浅写一个能跑就行的程序让它编译运行一下.
回到我们的工作区

  1. cd ~/openGL/src && vim main.cpp
  2. 写个测试程序 ~/openGL/src/main.cpp
#include <iostream>#include <glad/glad.h>
#include <GLFW/glfw3.h>void framebufer_size_callback(GLFWwindow *_window, int _width, int _height);int main()
{glfwInit();glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);GLFWwindow *win_handle = glfwCreateWindow(600, 600, "终于配好环境了感动+10086", NULL, NULL);if (win_handle == NULL){std::cout << "Failed to crate GLFW Window" << std::endl;glfwTerminate();return -1;}glfwMakeContextCurrent(win_handle);if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress)){std::cout << "Failed to initialize GLAD" << std::endl;return -1;}glViewport(0, 0, 600, 600);glfwSetFramebufferSizeCallback(win_handle, framebufer_size_callback);while (!glfwWindowShouldClose(win_handle)){glfwSwapBuffers(win_handle);glfwPollEvents();}glfwTerminate();return 0;
}void framebufer_size_callback(GLFWwindow *_window, int _width, int _height)
{glViewport(0, 0, _width, _height);
}
  1. 写完了之后咱写一下编译配置文件~/openGL/CMakeList.txt
    1. cd ~/openGL && vim CMakeList.txt
cmake_minimum_required(VERSION 2.8)project(opengl_test)# Include files
#glad
include_directories(${PROJECT_SOURCE_DIR}/3rdparty/glad/include/)add_executable(main ${PROJECT_SOURCE_DIR}/src/main.cpp${PROJECT_SOURCE_DIR}/3rdparty/glad/src/glad.c)target_link_libraries(main glfw GL dl)
  1. 开编! cd ~/openGL/build && cmake .. && make
  2. 编完了运行: ./main
    在这里插入图片描述

大功告成!

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

win7添加access的odbc数据源

从控制面板打开odbc数据源&#xff1b;如果像下面没有access的驱动程序&#xff0c; 根据资料&#xff0c;打开C盘-Windows-SysWow64-odbcad32.exe&#xff0c;看一下就有了&#xff1b; 然后添加用户DSN&#xff0c;选中access的驱动程序&#xff0c; 自己输入一个数据源名&am…

linux搭建zabbix

1、访问官网地址&#xff0c;选择对应的版本等 在下方会有命令列出来&#xff0c;按照实际情况运行命令 a. Install Zabbix repository # wget https://repo.zabbix.com/zabbix/6.4/debian/pool/main/z/zabbix-release/zabbix-release_6.4-1debian12_all.deb # dpkg -i zabb…

从0到1实现html文件转换为markdown文档(进度0.1)

Spider-Man 前言准备环境1、node.js2、git 执行指令顺序报错及其解决方案一、npm 错误&#xff01;可以在以下位置找到此运行的完整日志解决方案 二、没有修改权限解决方案&#xff1a; 注意事项总结 前言 当我们处理文档时&#xff0c;常常会遇到将HTML文档转换为Markdown文档…

e2studio开发LPS28DFW气压计(1)----轮询获取气压计数据

e2studio开发LPS28DFW气压计.1--轮询获取气压计数据 概述视频教学样品申请完整代码下载产品特性通信模式速率新建工程工程模板保存工程路径芯片配置工程模板选择时钟设置UART配置UART属性配置设置e2studio堆栈e2studio的重定向printf设置R_SCI_UART_Open()函数原型回调函数user…

项目经理快速晋升应当具备的四个能力

项目的成功与失败都直接压在项目经理的肩上。不论问题的根源在何处&#xff0c;最终承担责任的总是项目经理。身为项目经理&#xff0c;你务必清楚&#xff0c;自己背负的是何等的重任。 1、计划能力 计划是行动的灯塔&#xff0c;若管理者无法制定计划&#xff0c;又如何引…

怎么加密VMware虚拟机?

加密 VMware VM 的先决条件 在创建加密虚拟机之前&#xff0c;以下几点值得注意。 1. 确保需要加密的虚拟机已关闭。 2. 创建虚拟机加密存储策略。 3. 与KMS 建立可信连接并选择默认KMS。 4. 验证您是否拥有所需的权限&#xff1a; 密码操作。加密新的。如果主机加密模式…

多机TCP通讯之hello world(C++)

文章目录 TCP是什么准备工作CMakeLists.txt服务端代码客户端代码参考 TCP是什么 TCP&#xff08;传输控制协议&#xff09;是一种在计算机网络中广泛使用的协议&#xff0c;它提供了可靠的、面向连接的数据传输服务。TCP 是 OSI 模型中的传输层协议&#xff0c;它确保了数据的…

CMake入门教程【高级篇】qmake转cmake

&#x1f608;「CSDN主页」&#xff1a;传送门 &#x1f608;「Bilibil首页」&#xff1a;传送门 &#x1f608;「动动你的小手」&#xff1a;点赞&#x1f44d;收藏⭐️评论&#x1f4dd; 文章目录 1. 概述2.qmake与cmake的差异3. qmake示例4.qmake转cmake示例5.MOC、UIC和RCC…

03-JVM虚拟机-课堂笔记

3-JVM虚拟机 灵魂三问&#xff1a; JVM是什么&#xff1f; JVM广义上指的是一种规范。狭义上的是JDK中的JVM虚拟机。 为什么要学习JVM&#xff1f; 面试过程中&#xff0c;经常会被问到JVM。 研发过程中&#xff0c;肯定会面临一些重难点问题与JVM有关系。例如&#xff1a…

WEB之HTML练习

第一题&#xff1a;用户注册界面 HTML代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><titl…

学习笔记之——3D Gaussian Splatting源码解读

之前博客对3DGS进行了学习与调研 学习笔记之——3D Gaussian Splatting及其在SLAM与自动驾驶上的应用调研-CSDN博客文章浏览阅读450次。论文主页3D Gaussian Splatting是最近NeRF方面的突破性工作&#xff0c;它的特点在于重建质量高的情况下还能接入传统光栅化&#xff0c;优…

每日学习更新(LQR+iLQR)

一直想更新一下根据cost to go来推导LQR&#xff0c;之前的话可能会直接套问题&#xff0c;但是对于理论有些困惑&#xff0c;正好最近在学习ilqr轨迹生成/优化&#xff0c;因此来推一下公式&#xff0c;以下参考B站Dr_CAN&#xff0c;链接如下&#xff1a; 【最优控制】5_线性…