【小沐学OpenGL】Ubuntu环境下glew的安装和使用

文章目录

  • 1、简介
    • 1.1 OpenGL简介
    • 1.2 glew简介
  • 2、安装glew
    • 2.1 命令安装glew
    • 2.2 直接代码安装glew
    • 2.3 cmake代码安装glew
  • 3、测试glew
    • 3.1 测试glew+freeglut
    • 3.2 测试glew+glfw
  • 结语

1、简介

1.1 OpenGL简介

Linux 系统中的 OpenGL 是一个跨语言、跨平台的应用程序编程接口(API),用于渲染2D和3D矢量图形。

这里显示 OpenGL 的版本信息:

glxinfo| grep version

在这里插入图片描述

glxinfo:这是一个用于查询关于 OpenGL 图形系统的信息的命令行工具。它提供了关于图形硬件、驱动程序以及支持的 OpenGL 扩展的详细信息。
grep:这是一个文本搜索工具,用于搜索文本文件或输出中匹配特定模式的行。在这里,它用于搜索包含“version”这个词的行。

glxinfo没有安装,执行如下命令进行安装:

sudo apt install mesa-utils

在这里插入图片描述
安装成功,继续上面的glxinfo命令如下:
在这里插入图片描述
使用 glxgears 命令来测试 OpenGL 的性能,它是一个简单的 OpenGL 程序,显示旋转的齿轮,可以用来测试图形硬件的渲染能力。

glxgears 

在这里插入图片描述
eglinfo:类似于 glxinfo,但是用于查询有关 EGL (嵌入式系统图形接口) 的信息。

eglinfo

在这里插入图片描述

1.2 glew简介

GLEW(OpenGL Extension Wrangler Library)是一个跨平台的开源 C/C++ 扩展加载库,用于确定目标平台支持哪些 OpenGL 扩展。它提供了高效的运行时机制,并且已经过多种操作系统的测试,包括 Windows、Linux、Mac OS X、FreeBSD、Irix 和 Solaris。GLEW 使得 OpenGL 核心和扩展功能的声明都包含在单个头文件中,简化了 OpenGL 扩展的使用。
在这里插入图片描述
输入glew官方网址:

https://glew.sourceforge.net/

在这里插入图片描述

2、安装glew

2.1 命令安装glew

sudo apt-cache search glew

在这里插入图片描述

# sudo apt-get install libglew-dbg libglew-dev libglew1.13 libglewmx-dbg libglewmx-dev libglewmx1.13 glew-utils
sudo apt-get -y install glew-utils

在这里插入图片描述
在 Linux 系统中安装 GLEW 可以通过包管理器进行。例如,在基于 Debian 的系统(如 Ubuntu)中,可以使用以下命令安装 GLEW:

# sudo apt install libglew2.1 libglew-dev
sudo apt-get install libglew-dev
# /usr/lib/x86_64-linux-gnu/libGLEW.so

在这里插入图片描述
这将安装 GLEW 的开发文件,包括库文件和头文件。安装后,你可以在项目中包含 GLEW 头文件,并链接到 GLEW 库以使用 OpenGL 扩展。

如果通过cmake编译,在CMakeLists.txt添加如下代码:

find_package(GLEW REQUIRED)target_link_libraries(untitled1 GLEW::GLEW)
  • 完整的CMakeLists.txt:
cmake_minimum_required(VERSION 3.16)project(untitled1 LANGUAGES CXX)set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)find_package(GLEW REQUIRED)add_executable(untitled1main.cpp
)
target_link_libraries(untitled1 GLEW::GLEW)include(GNUInstallDirs)
install(TARGETS untitled1LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)
  • main.cpp:
#include <GL/glew.h>
#include <iostream>int main(int argc, char *argv[])
{std::cout << "hello yxy" << std::endl;// 初始化 GLEWglewExperimental = GL_TRUE;if (glewInit() != GLEW_OK) {std::cout << "glew init failed." << std::endl;}else {std::cout << "glew init ok." << std::endl;}return 0;
}

编译测试项目代码如下:
在这里插入图片描述
再给一个glew测试的例子:

  • main.cpp:
#include <GL/glew.h>#include <stdio.h>
#include <stdlib.h>#define S(x) SS(x)
#define SS(x) #xint main(int argc, char* argv[]) {printf("GLEW CMake test, %s build\n",S(GLEW_CMAKE_TEST_CONFIG));printf("-- linked to %s which is %s\n",S(GLEW_CMAKE_TEST_TARGET_FILE_NAME),S(GLEW_CMAKE_TEST_TARGET_TYPE));const GLubyte* v = glewGetString(GLEW_VERSION);if(v) {printf("-- glewGetString(GLEW_VERSION) returns %s\n-- test passed.\n", v);return EXIT_SUCCESS;} else {printf("-- glewGetString(GLEW_VERSION) returns NULL\n-- test failed.\n");return EXIT_FAILURE;}
}

在这里插入图片描述

卸载libglew-dev库后运行如下:

sudo apt autoremove libglew-dev

在这里插入图片描述
再编译上面的测试项目代码如下:
在这里插入图片描述

2.2 直接代码安装glew

https://glew.sourceforge.net/

如果你需要从源代码编译 GLEW,可以访问 GLEW 的官方网站或其 GitHub 仓库获取源代码。编译 GLEW 通常需要安装一些构建工具,如 make、gcc、git 等。在 Linux 系统上,可以使用以下命令安装这些工具:

sudo apt-get install build-essential libxmu-dev libxi-dev libgl-dev

GLEW(OpenGL Extension Wrangler)的官方网站是 http://glew.sourceforge.net/,可以在这个网站上下载GLEW的源代码并进行安装。
wget下载源码如下:

wget https://jaist.dl.sourceforge.net/project/glew/glew/2.1.0/glew-2.1.0.tgz

在这里插入图片描述
或者使用curl命令下载:

curl https://jaist.dl.sourceforge.net/project/glew/glew/2.1.0/glew-2.1.0.tgz -o glew-2.1.0.tgz

在这里插入图片描述

执行如下命令进行解压和编译。

tar -zxvf glew-2.1.0.tgz
cd glew-2.1.0
#cmake ../cmake -DCMAKE_INSTALL_PREFIX=./install
make
sudo make install

解压glew-2.1.0.tgz如下:
在这里插入图片描述

通过make编译源代码如下:
在这里插入图片描述
安装编译后文件到系统目录:

sudo make install
make clean

在这里插入图片描述
查看一下本机上glew被安装的文件夹:

find / -name libGLEW.so

在这里插入图片描述
使用如下代码,静态链接到特定位置的自定义编译 GLEW 库:

#GLEW libraries
add_library(glew_static STATIC IMPORTED)
# add_library(glew_static SHARED IMPORTED)set_target_properties(glew_static PROPERTIESIMPORTED_LOCATION /usr/lib64/libGLEW.a)target_link_libraries(testglew glew_static)

也可以将它与共享库一起使用,只需从 add_library 中删除 STATIC 关键字。
如果通过cmake编译,在CMakeLists.txt添加如下代码:

  • CMakeLists.txt
cmake_minimum_required(VERSION 3.16)project(untitled1 LANGUAGES CXX)set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)#####################
# glew
add_library(glew_static STATIC IMPORTED)
set_target_properties(glew_static PROPERTIESIMPORTED_LOCATION /usr/lib64/libGLEW.a)#####################
# opengl
find_package(OpenGL REQUIRED)add_executable(untitled1main.cpp
)
target_link_libraries(untitled1 glew_static OpenGL::GL)include(GNUInstallDirs)
install(TARGETS untitled1LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)
  • main.cpp
#include <GL/glew.h>
#include <iostream>int main(int argc, char *argv[])
{std::cout << "hello yxy" << std::endl;// 初始化 GLEWglewExperimental = GL_TRUE;if (glewInit() != GLEW_OK) {std::cout << "glew init failed." << std::endl;}else {std::cout << "glew init ok." << std::endl;}return 0;
}

编译测试项目如下:
在这里插入图片描述

2.3 cmake代码安装glew

tar -zxvf glew-2.1.0.tgz
cd glew-2.1.0
cd build
mkdir linux
cd linux
cmake ../cmake -DCMAKE_INSTALL_PREFIX=./install
# cmake ../cmake -DCMAKE_INSTALL_PREFIX=/usr/local/thirdparty 
make
make install

在这里插入图片描述
执行make install后安装到当前文件夹的install子文件夹里:
在这里插入图片描述

3、测试glew

3.1 测试glew+freeglut

  • CMakeLists.txt:
cmake_minimum_required(VERSION 3.16)project(testglew LANGUAGES CXX)set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)#####################
# glew
find_package(GLEW REQUIRED)#####################
# glut
find_package(OpenGL REQUIRED)
find_package(GLUT REQUIRED)
include_directories(${OPENGL_INCLUDE_DIRS})
include_directories(${GLUT_INCLUDE_DIRS})add_executable(testglewmain.cpp
)
target_link_libraries(testglew GLEW::GLEW${OPENGL_LIBRARIES} ${GLUT_LIBRARIES}
)include(GNUInstallDirs)
install(TARGETS testglewLIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)
  • main.cpp
#include <iostream>
// GLEW
#define GLEW_STATIC
#include <GL/glew.h>
#include <GL/glut.h>void init(void)
{glClearColor(1.0, 1.0, 1.0, 0.0);glMatrixMode(GL_PROJECTION);gluOrtho2D(0.0, 200.0, 0.0, 160.0);
}void lineSegment(void)
{glClear(GL_COLOR_BUFFER_BIT);glColor3f(1.0, 0.0, 0.0);glBegin(GL_LINES);glVertex2i (180, 15);glVertex2i (10, 145);glEnd();glFlush();
}int main(int argc, char **argv)
{glutInit(&argc, argv);glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);glutInitWindowPosition(50, 100);glutInitWindowSize(400, 300);glutCreateWindow("Example OpenGL Program");// Set this to true so GLEW knows to use a modern approach to retrieving function pointers and extensionsglewExperimental = GL_TRUE;// Initialize GLEW to setup the OpenGL Function pointersif(glewInit() != GLEW_OK) {std::cout << "Failed to initialize GLEW" << std::endl;return -1;}else {std::cout << "GLEW is ok!" << std::endl;}init();glutDisplayFunc(lineSegment);glutMainLoop();return 0;
}

在这里插入图片描述

3.2 测试glew+glfw

  • CMakeLists.txt:
cmake_minimum_required(VERSION 3.16)project(untitled1 LANGUAGES CXX)set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)#####################
# glfw
find_package(glfw3 REQUIRED)#####################
# glew
add_library(glew_static STATIC IMPORTED)
set_target_properties(glew_static PROPERTIESIMPORTED_LOCATION /usr/lib64/libGLEW.a)#####################
# opengl
find_package(OpenGL REQUIRED)add_executable(untitled1main.cpp
)
target_link_libraries(untitled1 glew_static OpenGL::GL glfw)include(GNUInstallDirs)
install(TARGETS untitled1LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)
  • main.cpp
#include <GL/glew.h>
#include <GLFW/glfw3.h>#include <iostream>void framebuffer_size_callback(GLFWwindow* window, int width, int height);
void processInput(GLFWwindow *window);
const unsigned int SCR_WIDTH = 800;
const unsigned int SCR_HEIGHT = 300;// 顶点着色器,GLSL语言
const char *vertexShaderSource = "#version 330 core\n""layout (location = 0) in vec3 aPos;\n""void main()\n""{\n""   gl_Position = vec4(aPos.x, aPos.y, aPos.z, 1.0);\n""}\0";
// 片元着色器
const char *fragmentShaderSource = "#version 330 core\n""out vec4 FragColor;\n""void main()\n""{\n""   FragColor = vec4(0.0f, 1.0f, 0.0f, 1.0f);\n""}\n\0";int main()
{// glfw: initialize and configureglfwInit();glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
#ifdef __APPLE__glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
#endif// glfw window creationGLFWwindow* window = glfwCreateWindow(SCR_WIDTH, SCR_HEIGHT, "Ubuntu Opengl, yxy", NULL, NULL);if (window == NULL){std::cout << "Failed to create GLFW window" << std::endl;glfwTerminate();return -1;}glfwMakeContextCurrent(window);glfwSetFramebufferSizeCallback(window, framebuffer_size_callback);// glad: load all OpenGL function pointers// if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress))// {//     std::cout << "Failed to initialize GLAD" << std::endl;//     return -1;// }if(glewInit() != GLEW_OK) {std::cout << "Failed to initialize GLEW" << std::endl;return -1;}// build and compile our shader program// ------------------------------------// vertex shaderint vertexShader = glCreateShader(GL_VERTEX_SHADER);glShaderSource(vertexShader, 1, &vertexShaderSource, NULL);glCompileShader(vertexShader);// check for shader compile errorsint success;char infoLog[512];glGetShaderiv(vertexShader, GL_COMPILE_STATUS, &success);if (!success){glGetShaderInfoLog(vertexShader, 512, NULL, infoLog);std::cout << "ERROR::SHADER::VERTEX::COMPILATION_FAILED\n" << infoLog << std::endl;}// fragment shaderint fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);glShaderSource(fragmentShader, 1, &fragmentShaderSource, NULL);glCompileShader(fragmentShader);// check for shader compile errorsglGetShaderiv(fragmentShader, GL_COMPILE_STATUS, &success);if (!success){glGetShaderInfoLog(fragmentShader, 512, NULL, infoLog);std::cout << "ERROR::SHADER::FRAGMENT::COMPILATION_FAILED\n" << infoLog << std::endl;}// link shadersint shaderProgram = glCreateProgram(); // shaderProgram 是多个着色器合并之后并最终链接完成的版本glAttachShader(shaderProgram, vertexShader);glAttachShader(shaderProgram, fragmentShader);glLinkProgram(shaderProgram);// check for linking errorsglGetProgramiv(shaderProgram, GL_LINK_STATUS, &success);if (!success) {glGetProgramInfoLog(shaderProgram, 512, NULL, infoLog);std::cout << "ERROR::SHADER::PROGRAM::LINKING_FAILED\n" << infoLog << std::endl;}glDeleteShader(vertexShader);glDeleteShader(fragmentShader);float vertices[] = {-0.5f, -0.5f, 0.0f, // left0.5f, -0.5f, 0.0f, // right0.0f,  0.5f, 0.0f  // top};unsigned int VBO, VAO;//创建VAO对象glGenVertexArrays(1, &VAO);glBindVertexArray(VAO);//创建VBO对象,把顶点数组复制到一个顶点缓冲中,供OpenGL使用glGenBuffers(1, &VBO);glBindBuffer(GL_ARRAY_BUFFER, VBO); // 缓冲绑定到GL_ARRAY_BUFFERglBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW); // 顶点数据复制到缓冲的内存中//解释顶点数据方式glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(float), (void*)0); // 顶点数据的解释glEnableVertexAttribArray(0);// 解绑VAOglBindVertexArray(0);// 解绑VBOglBindBuffer(GL_ARRAY_BUFFER, 0);// render loopwhile (!glfwWindowShouldClose(window)){// inputprocessInput(window);// renderglClearColor(1.0f, 0.7f, 0.7f, 1.0f);glClear(GL_COLOR_BUFFER_BIT);// draw our first triangleglUseProgram(shaderProgram);glBindVertexArray(VAO);glDrawArrays(GL_TRIANGLES, 0, 3);glfwSwapBuffers(window);glfwPollEvents();}// optional: de-allocate all resourcesglDeleteVertexArrays(1, &VAO);glDeleteBuffers(1, &VBO);glDeleteProgram(shaderProgram);glfwTerminate();return 0;
}//键盘按键回调函数
void processInput(GLFWwindow *window)
{if (glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS)glfwSetWindowShouldClose(window, true);
}//调整窗口大小回调函数
void framebuffer_size_callback(GLFWwindow* window, int width, int height)
{glViewport(0, 0, width, height);
}

在这里插入图片描述

结语

如果您觉得该方法或代码有一点点用处,可以给作者点个赞,或打赏杯咖啡;╮( ̄▽ ̄)╭
如果您感觉方法或代码不咋地//(ㄒoㄒ)//,就在评论处留言,作者继续改进;o_O???
如果您需要相关功能的代码定制化开发,可以留言私信作者;(✿◡‿◡)
感谢各位大佬童鞋们的支持!( ´ ▽´ )ノ ( ´ ▽´)っ!!!

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

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

相关文章

【C++】STL容器-string的遍历

1.引言 C STL&#xff08;Standard Template Library&#xff09;作为C标准库的核心部分&#xff0c;其重要性不言而喻。它提供了一系列高效、灵活且可复用的数据结构和算法&#xff0c;极大地提升了开发效率&#xff0c;并使得代码更加易于阅读和维护。 在STL中&#xff0c;…

根据NVeloDocx Word模板引擎生成Word(四)

前面介绍了《E6低代码开发平台》的Word模版引擎NVeloDocx&#xff0c;实现了表单的基本字段、子表、单张图片、二维码、条形码怎么基于NVelocity脚本输出到Word文件&#xff0c;都是些比较简单且常用的需求。 本篇介绍怎么基于NVeloDocx在Word中插入图表&#xff0c;目前只支持…

模型训练如何实现自动化输出评估报告、模型、特种平台

模型训练如何实现自动化 1、目标 把对文本分类【体育,教育,娱乐,经济,文学,政治】的模型实现自动化训练。 分类器:贝叶斯、支持向量机、梯度提升、随机森林、逻辑斯蒂回归 通过预设的准确率期望值与训练轮数,获取最优的分类器模型,当模型评估的准确率大于期望值时即…

算法基础-快速幂

(a b) % p (a % p b % p) % p (a - b) % p (a % p - b % p) % p (a * b) % p (a % p * b % p) % p (a ^ b) % p ((a % p)^b) % p 快速幂 3^10 10 1010 2^2 2^3 3^10 3 * 2^2 3 * 2^3 3^4 3^8 a a * a > a a^2 a^4 a^8 所以当 b & 1 1 时&#xff…

建造者模式builder

此篇为学习笔记&#xff0c;原文链接 https://refactoringguru.cn/design-patterns/builder 能够分步骤创建复杂对象。 该模式允许你使用相同的创建代码生成不同类型和形式的对象

2024.9 学习笔记

目录 9.10 1.大地坐标系 2.地球坐标系 3.局部坐标系 4.世界坐标系 5.IMU 6.GPS 9.11 1.SGM算法 步骤 优点与缺点 应用 2.ISP 核心任务 9.12 1.双立方插值 9.10 1.大地坐标系 大地坐标系&#xff08;Geodetic Coordinate System&#xff09;: 定义: 基于地球…

利用数据分析提升SEO排名的7种方法

我们都听过“大数据分析”这个词。科技让我们能够清晰地了解我们的活动和内容的表现——向我们提供了关于受众的宝贵信息&#xff0c;甚至可以精确到他们在Google和其他搜索引擎上使用的具体搜索词。 你已经在你的业务中使用数据分析了吗&#xff1f;如果是&#xff0c;你有利…

CCF推荐C类会议和期刊总结:(计算机网络领域)

CCF推荐C类会议和期刊总结&#xff08;计算机网络领域&#xff09; 在计算机网络领域&#xff0c;中国计算机学会&#xff08;CCF&#xff09;推荐的C类会议和期刊为研究者提供了广泛的学术交流平台。以下是对所有C类会议和期刊的总结&#xff0c;包括全称、出版社、dblp文献网…

基于SpringBoot+Vue的古诗词学习软件系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于JavaSpringBootVueMySQL的古诗词学…

大数据之Flink(三)

9.3、转换算子 9.3.1、基本转换算子 9.3.1.1、映射map 一一映射 package transform;import bean.WaterSensor; import org.apache.flink.streaming.api.datastream.DataStreamSource; import org.apache.flink.streaming.api.datastream.SingleOutputStreamOperator; impor…

创建Java项目,可实现main方法运行,实现对性能数据的处理

1、Android Studio无法执行Java类的main方法问题及解决方法 Android Studio无法执行Java类的main方法问题及解决方法_delegatedbuild-CSDN博客 D:\workspaces\performanceTools\.idea 文件夹下&#xff0c;gardle.xml ,添加依赖 <option name"delegatedBuild"…

WebGL系列教程二(环境搭建及着色器初始化)

目录 1 前言2 新建html页面3 着色器介绍3.1 顶点着色器、片元着色器与光栅化的概念3.2 声明顶点着色器3.3 声明片元着色器 4 坐标系(右手系)介绍5 着色器初始化5.1 给一个画布canvas5.2 获取WebGL对象5.3 创建着色器对象5.4 获取着色器对象的源5.5 绑定着色器的源5.6 编译着色器…

对称矩阵的压缩存储

1.给自己出题&#xff1a;自己动手创造&#xff0c;画一个5行5列的对称矩阵 2.画图&#xff1a;按“行优先”压缩存储上述矩阵&#xff0c;画出一维数组的样子 3.简答&#xff1a;写出元素 i,j 与 数组下标之间的对应关系 4.画图&#xff1a;按“列优先”压缩存储上述矩阵&a…

接口测试用例的编写

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 1、接口测试发现的典型问题 接口测试经常遇到的bug和问题&#xff0c;如下&#xff1a; 传入参数处理不当&#xff0c;导致程序crash类型溢出&#xff0c;导…

Docker部署MySQL8.0.39报错解决方案

Docker部署MySQL8.0.39报错解决方案 2024-09-11T06:09:09.317582Z 0 [Warning] [MY-010139] [Server] Changed limits: max_open_files: 1024 (requested 8161) 2024-09-11T06:09:09.317586Z 0 [Warning] [MY-010142] [Server] Changed limits: table_open_cache: 431 (reques…

GUI编程09:鼠标监听事件、模拟画图工具

视频链接&#xff1a;11、鼠标监听事件、模拟画图工具_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1DJ411B75F?p11&vd_sourceb5775c3a4ea16a5306db9c7c1c1486b5 模拟画图工具的实现逻辑图&#xff1a; 实现代码&#xff1a; package com.yundait.lesson03;impo…

mysql学习教程,从入门到精通,SQL AND OR 运算符(12)

1、SQL AND & OR 运算符 在本教程中&#xff0c;您将学习如何在子句中使用ASELECT column1_name, column2_name, columnN_nameFROM table_nameWHERE condition1 AND condition2;ND&#xff06;OR运算符&#xff0c;WHERE以根据多个条件过滤记录。 1.1、根据条件选择记录 …

Linux: network: esp:收到了重复的包?

最近遇到一个问题,是说收到了dup的ESP包,这是表象上的两个相同的ESP,那是因为在wireshark的首选项里IPv4,没有选择重组分片包,导致wireshark先做了ESP的解析,如果选择IPv4协议里的重组分片包,会看到下面说有三个分片,而且其中一个有overlap。 所以,这个目前还是未解的…

动手学深度学习(三)深度学习计算

一、模型构造 1、继承Module类来构造模型来构造模型 class MLP(nn.Module):# 声明带有模型参数的层&#xff0c;这里声明了两个全连接层def __init__(self, **kwargs):# 调用MLP父类Block的构造函数来进行必要的初始化。这样在构造实例时还可以指定其他函数# 参数&#xff0c…

[数据集][目标检测]汽车头部尾部检测数据集VOC+YOLO格式5319张3类别

数据集制作单位&#xff1a;未来自主研究中心(FIRC) 版权单位&#xff1a;未来自主研究中心(FIRC) 版权声明&#xff1a;数据集仅仅供个人使用&#xff0c;不得在未授权情况下挂淘宝、咸鱼等交易网站公开售卖,由此引发的法律责任需自行承担 数据集格式&#xff1a;Pascal VOC格…