当前位置: 首页 > news >正文

OpenGL(4)着色器

文章目录

  • 一、着色器
    • 1、什么是着色器?
    • 2、着色器类型
      • 2.1、顶点着色器(Vertex Shader)
      • 2.2、片段着色器(Fragment Shader)
    • 3、着色器属性
      • 3.1、`layout` 属性
      • 3.2、`in` 属性
      • 3.3、`out` 属性
      • 3.4、总结
    • 4、示例

前言:

在OpenGL开发中,着色器(Shader)是用于控制图形渲染管线各个阶段的小程序。它们是用GLSL(OpenGL Shading Language)编写的,GLSL是一种类似于C的语言。着色器在GPU上执行,负责处理顶点、片段等数据,最终生成图像。

一、着色器

1、什么是着色器?

概念:

着色器(Shader)是运行在 GPU 上的小程序,用于处理图形渲染过程中的特定任务。传统的 OpenGL 渲染流程中,CPU 需要承担大量的图形计算任务,而引入着色器后,将这些计算任务转移到 GPU 上,利用 GPU 的并行计算能力,大大提高了渲染效率。

工作原理:

当 OpenGL 进行图形渲染时,会将顶点数据(如顶点坐标、颜色、纹理坐标等)传递给着色器进行处理。着色器根据预设的算法对这些数据进行计算和转换,最终生成像素的颜色值,用于显示在屏幕上。整个渲染过程可以分为多个阶段,每个阶段由不同类型的着色器负责处理。

2、着色器类型

2.1、顶点着色器(Vertex Shader)

  • 功能:顶点着色器是处理顶点数据的第一个阶段。它接收顶点的原始数据(如顶点坐标、法线、颜色等),并对这些数据进行变换和处理,例如将顶点坐标从模型空间转换到裁剪空间。

  • 示例代码

    #version 330 core
    layout (location = 0) in vec3 aPos;  // 输入的顶点位置
    layout (location = 1) in vec3 aColor; // 输入的顶点颜色
    out vec3 ourColor;  // 输出的颜色,传递给片段着色器
    void main()
    {gl_Position = vec4(aPos, 1.0); // 将顶点位置转换为齐次坐标ourColor = aColor; // 传递颜色数据
    }
    

2.2、片段着色器(Fragment Shader)

  • 功能:片段着色器负责计算每个像素的最终颜色。它接收顶点着色器传递过来的数据(如颜色、纹理坐标等),并根据这些数据计算出每个像素的颜色值。
  • 示例代码
    #version 330 core
    in vec3 ourColor; // 从顶点着色器接收的颜色数据
    out vec4 FragColor; // 输出的最终像素颜色
    void main()
    {FragColor = vec4(ourColor, 1.0); // 将颜色数据转换为 RGBA 格式
    }
    

3、着色器属性

在基于 Qt 进行 OpenGL 开发时,理解 OpenGL 着色器语言(GLSL)中的 layoutinout 等属性是非常重要的,这些属性用于定义着色器之间的数据传递和属性的存储位置。下面详细介绍这些属性。

3.1、layout 属性

  • 功能:

    layout 属性主要用于指定着色器输入输出变量的存储布局,比如在顶点着色器中指定顶点属性的位置,或者在片段着色器中指定颜色输出的位置等。通过 layout 属性,我们可以精确地控制数据在内存中的存储和访问方式,方便 OpenGL 正确地读取和处理数据。

  • 示例及解释:

    #version 330 core
    // 顶点着色器中,使用 layout 指定顶点位置属性的位置为 0
    layout (location = 0) in vec3 aPos;
    // 使用 layout 指定顶点颜色属性的位置为 1
    layout (location = 1) in vec3 aColor;
    out vec3 ourColor;void main()
    {gl_Position = vec4(aPos, 1.0);ourColor = aColor;
    }
    

    在上述顶点着色器代码中,layout (location = 0) 表明 aPos 这个顶点位置属性在顶点数据中的索引为 0,layout (location = 1) 则表示 aColor 顶点颜色属性的索引为 1。在 C++ 代码中,我们可以根据这些索引来设置顶点属性指针,示例如下:

    // 设置顶点位置属性指针
    glEnableVertexAttribArray(0);
    glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 6 * sizeof(GLfloat), (GLvoid*)0);
    // 设置顶点颜色属性指针
    glEnableVertexAttribArray(1);
    glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 6 * sizeof(GLfloat), (GLvoid*)(3 * sizeof(GLfloat)));
    

3.2、in 属性

  • 功能:

    in 属性用于声明着色器的输入变量。在不同类型的着色器中,in 变量的来源不同。例如,在顶点着色器中,in 变量通常是从 CPU 传递过来的顶点属性数据;在片段着色器中,in 变量一般是从顶点着色器经过光栅化插值后传递过来的数据。

  • 示例及解释:

    #version 330 core
    // 顶点着色器
    layout (location = 0) in vec3 aPos;
    layout (location = 1) in vec3 aColor;
    out vec3 ourColor;void main()
    {gl_Position = vec4(aPos, 1.0);ourColor = aColor;
    }// 片段着色器
    in vec3 ourColor;
    out vec4 FragColor;void main()
    {FragColor = vec4(ourColor, 1.0);
    }
    

在顶点着色器中,aPosaColor 是从 CPU 传递过来的顶点属性,使用 in 关键字声明。而 ourColor是输出变量,会传递给片段着色器。在片段着色器中,ourColor 作为输入变量接收来自顶点着色器的数据,然后将其用于计算最终的像素颜色。

3.3、out 属性

  • 功能:

    out 属性用于声明着色器的输出变量。这些变量会传递给下一个阶段的着色器进行处理。例如,顶点着色器的输出变量会经过光栅化插值后传递给片段着色器。

  • 示例及解释:

    #version 330 core
    // 顶点着色器
    layout (location = 0) in vec3 aPos;
    layout (location = 1) in vec3 aColor;
    // 声明输出变量,传递给片段着色器
    out vec3 ourColor;void main()
    {gl_Position = vec4(aPos, 1.0);ourColor = aColor;
    }// 片段着色器
    // 接收来自顶点着色器的输出变量
    in vec3 ourColor;
    // 声明片段着色器的输出变量,即最终的像素颜色
    out vec4 FragColor;void main()
    {FragColor = vec4(ourColor, 1.0);
    }
    

在顶点着色器中,ourColor 使用 out 关键字声明,它会将顶点的颜色信息传递给片段着色器。在片段着色器中,FragColor 使用 out 关键字声明,它表示最终的像素颜色,会被写入帧缓冲区。

3.4、总结

  • layout 属性用于指定变量的存储位置,方便 OpenGL 正确解析数据。
  • in 属性用于声明着色器的输入变量,接收来自上一个阶段的数据。
  • out 属性用于声明着色器的输出变量,将数据传递给下一个阶段的着色器。

通过合理使用这些属性,我们可以实现不同着色器之间的数据传递和交互,从而完成复杂的图形渲染任务。

4、示例

创建一个顶点着色器与片段着色器,并使用QOpenGLShaderProgram类对象应用着色器,如下:

  • 顶点着色器
// vertex_shader.glsl
#version 330 core
layout (location = 0) in vec3 aPos;      // 顶点位置
layout (location = 1) in vec3 aColor;    // 顶点颜色out vec3 ourColor; // 传递给片段着色器的颜色void main()
{gl_Position = vec4(aPos, 1.0); // 设置顶点位置ourColor = aColor;             // 传递颜色
}
  • 片段着色器
#version 330 core
in vec3 ourColor;      // 从顶点着色器传入的颜色
out vec4 FragColor;    // 输出颜色void main()
{FragColor = vec4(ourColor, 1.0); // 使用传入的颜色
}
  • 示例代码
#include <QOpenGLFunctions_3_3_Core>
#include "OpenGLWidget.h"// 顶点数据结构
struct Vertex {float position[3];       // 位置float color[3];          // 颜色
};// 顶点数据
Vertex vertices[] = {{ { -0.5f, -0.5f, 0.0f },{ 1.0, 0.0, 0.0 } },{ { 0.5f, -0.5f, 0.0f },{ 0.0, 1.0, 0.0 } },{ { 0.0f,  0.5f, 0.0f },{ 0.0, 0.0, 1.0 } }
};// 构造函数
OpenGLWidget::OpenGLWidget(QWidget* parent) : QOpenGLWidget(parent)
{
}// 析构函数
OpenGLWidget::~OpenGLWidget()
{
}void OpenGLWidget::initializeGL()
{// 初始化OpenGL相关的接口initializeOpenGLFunctions();// 顶点数据:坐标 + 颜色GLfloat vertices[] = {// 位置              // 颜色-0.5f, -0.5f, 0.0f, 1.0f, 0.0f, 0.0f, // 左下角 (红色)0.5f, -0.5f, 0.0f, 0.0f, 1.0f, 0.0f, // 右下角 (绿色)0.0f,  0.5f, 0.0f, 0.0f, 0.0f, 1.0f  // 顶部 (蓝色)};// 创建并绑定VAOglGenVertexArrays(1, &m_vao);glBindVertexArray(m_vao);// 创建并绑定m_vboglGenBuffers(1, &m_vbo);glBindBuffer(GL_ARRAY_BUFFER, m_vbo);glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);// 设置顶点属性指针// 位置属性 (location = 0)glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 6 * sizeof(GLfloat), (void*)0);glEnableVertexAttribArray(0);// 颜色属性 (location = 1)glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 6 * sizeof(GLfloat), (void*)(3 * sizeof(GLfloat)));glEnableVertexAttribArray(1);// 解绑VAOglBindVertexArray(0);// 编译着色器m_shaderProgram.addShaderFromSourceFile(QOpenGLShader::Vertex, ":/OpenGL_Demo_Shader/vertex_shader.glsl");m_shaderProgram.addShaderFromSourceFile(QOpenGLShader::Fragment, ":/OpenGL_Demo_Shader/fragment_shader.glsl");m_shaderProgram.link();
}void OpenGLWidget::resizeGL(int w, int h)
{glViewport(0, 0, w, h); // 设置视口大小
}void OpenGLWidget::paintGL()
{// 清除颜色缓冲glClearColor(0.2f, 0.3f, 0.3f, 1.0f); // 设置背景颜色glClear(GL_COLOR_BUFFER_BIT);// 使用着色器程序m_shaderProgram.bind();// 绑定VAOglBindVertexArray(m_vao);// 绘制三角形glDrawArrays(GL_TRIANGLES, 0, 3);// 解绑VAOglBindVertexArray(0);
}
  • 运行结果

在这里插入图片描述

相关文章:

OpenGL(4)着色器

文章目录 一、着色器1、什么是着色器&#xff1f;2、着色器类型2.1、顶点着色器&#xff08;Vertex Shader&#xff09;2.2、片段着色器&#xff08;Fragment Shader&#xff09; 3、着色器属性3.1、layout 属性3.2、in 属性3.3、out 属性3.4、总结 4、示例 前言&#xff1a; 在…...

PHP批量去除Bom头的方法

检查的代码&#xff1a; <?php$dir __DIR__; $files new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dir));foreach ($files as $file) {if ($file->isFile() && pathinfo($file, PATHINFO_EXTENSION) php) {$content file_get_contents(…...

51单片机的keil c51软件安装教程

Keil&#xff08;C51&#xff09;介绍、下载、安装与注册_keil c51-CSDN博客 参考 安装 不一定是这个大小&#xff0c;也可以下载别的版本KEID C51 注册 加入芯片型号 …...

JavaScript基本知识

文章目录 一、JavaScript基础1.变量&#xff08;重点&#xff09;1-1 定义变量及赋值1-2 变量的命名规则和命名规范判断数据类型&#xff1a; 2.数据类型转换2-1 其他数据类型转成数值2-2 其他数据类型转成字符串2-3 其他数据类型转成布尔 3.函数3-1函数定义阶段3-2函数调用阶段…...

导数,积分及常用公式

导数定义&#xff1a; ​ 求导是数学计算中的一个计算方法&#xff0c;它的定义就是&#xff0c;当自变量的增量趋于零时&#xff0c;因变量的增量与自变量的增量之商的极限。在一个函数存在导数时&#xff0c;称这个函数可导或者可微分。可导的函数一定连续。不连续的函数一定…...

鸿蒙应用开发—ZDbUtil高效使用数据库

文章目录 介绍下载安装基本使用注解TableIdColumnOneToOne 使用方法定义实体类初始化数据库并根据被Table注解的类创建表创建表查数据插入数据删除数据清空数据 参考 介绍 ZDbUtil是一款基于SQLite的鸿蒙数据库框架&#xff0c;通过注解标注实体类与属性&#xff0c;让数据更能…...

强化学习(赵世钰版)-学习笔记(7.时序差分学习)

本章是课程算法与方法中的第四章&#xff0c;介绍的时序差分学习算法是基于随机近似方法设计的强化学习方法&#xff0c;也是model-free的方法。 时序差分算法是一种近似估计策略状态值的算法&#xff0c;具体的形式如下&#xff1a; 本质上是在当前t时刻&#xff0c;被访问到的…...

正则表达式入门及常用的正则表达式

正则表达式&#xff08;Regular Expression&#xff0c;简称 Regex&#xff09;是一种强大的文本处理工具&#xff0c;用于匹配、查找和替换字符串中的特定模式。以下是入门指南和常用正则表达式示例&#xff1a; 一、正则表达式入门 1. 基本语法 符号说明示例.匹配任意单个字…...

大白话如何在 Vue 项目中进行路由懒加载?

大白话如何在 Vue 项目中进行路由懒加载&#xff1f; 在 Vue 项目里&#xff0c;路由懒加载是种很实用的技术&#xff0c;它能让你在需要的时候再去加载对应的路由组件&#xff0c;而不是在项目启动时就把所有组件都加载进来&#xff0c;这样能加快项目的启动速度。下面就详细…...

手动实现一个RTTI系统

在 C 中&#xff0c;RTTI&#xff08;Runtime Type Information&#xff0c;运行时类型信息&#xff09;是一组允许程序在运行时获取对象类型信息的机制 。虽然C通过虚接口的方式提供了良好的抽象&#xff0c;但是对于一个复杂的系统&#xff0c;过于依赖抽象而忽略业务的复杂性…...

智能化水利监管:无人机视频在违章行为识别中的应用

随着我国经济社会的快速发展&#xff0c;水利工程建设规模不断扩大&#xff0c;但随之而来的违章建设行为也日益增多。传统的人工巡查方式效率低下&#xff0c;难以满足当前监管需求。无人机技术以其灵活性和高效性&#xff0c;为水利工程建设监管提供了新的解决方案。本文将探…...

力扣练习之确定两个字符串是否接近

目录 题目&#xff1a; 题解&#xff1a; 详细题解 题目&#xff1a; 如果可以使用以下操作从一个字符串得到另一个字符串&#xff0c;则认为两个字符串 接近 &#xff1a; 操作 1&#xff1a;交换任意两个 现有 字符。 例如&#xff0c;abcde -> aecdb 操作 2&#xff1…...

Word 小黑第21套

对应大猫22 设置表格为页面的80%&#xff1a;表布局 -属性 -表格 指定宽度80% 度量单位改成百分比 段落组 -中文版式 在表格上下方留一行空段&#xff08;如果表格太大改一下样式&#xff09;插入横线 边框线 &#xff08;右击横线 -图片 修改样式&#xff09; 段落 -取消对于…...

mingw32编译ffmpeg

ffmpeg https://gitee.com/mirrors/ffmpeg.git 使用msys2的mingw32 pacman -S mingw-w64-x86_64-toolchain compile ./confiure --enable-static --disable-shared --enable-gpl --target-oswin32 mingw32-make -j4 提示编译错误&#xff0c;msys2里面的路径是/d/tools/msys2…...

设计模式C++

针对一些经典的常见的场景, 给定了一些对应的解决方案&#xff0c;这个就叫设计模式。 设计模式的作用&#xff1a;使代码的可重用性高&#xff0c;可读性强&#xff0c;灵活性好&#xff0c;可维护性强。 设计原则&#xff1a; 单一职责原则&#xff1a;一个类只做一方面的…...

使用 Excel 实现绩效看板的自动化

引言 在日常工作中&#xff0c;团队的绩效监控和管理是确保项目顺利进行的重要环节。然而&#xff0c;面临着以下问题&#xff1a; ​数据分散&#xff1a;系统中的数据难以汇总&#xff0c;缺乏一个宏观的团队执行情况视图。​看板缺失&#xff1a;系统本身可能无法提供合适…...

ngx_openssl_conf_t

ngx_openssl_conf_t 定义在 src\event\ngx_event_openssl.c typedef struct {ngx_uint_t engine; /* unsigned engine:1; */ } ngx_openssl_conf_t; 1. 这个结构体的目的是存储与 OpenSSL 引擎相关的配置信息。 2. engine 字段用于标识是否启用 OpenSSL 的硬件加速引擎…...

深度学习环境配置指令大全

文章目录 环境配置官网/博客合集清华镜像站anaconda官网pytorch官网pytorch历史库官网pytorch与cuda对应版本下载博客torch与torchvision与python对应关系python与pytorch对应关系 环境相关创建环境激活环境退出环境删除环境检查环境冲突 安装相关安装requirementsconda安装con…...

Netty启动源码NioEventLoop剖析accept剖析read剖析write剖析

学习链接 NIO&Netty - 专栏 Netty核心技术十–Netty 核心源码剖析Netty核心技术九–TCP 粘包和拆包及解决方案Netty核心技术七–Google ProtobufNetty核心技术六–Netty核心模块组件Netty核心技术五–Netty高性能架构设计 聊聊Netty那些事儿 - 专栏 一文搞懂Netty发送数…...

<03.13>八股文补充知识

import java.lang.reflect.*; public class Main {public static void main(String[] args) throws Exception {// 获取 Class 对象//1. 通过类字面量Class<?> clazz Person.class;//2 通过对象实例化String str "Hello";Class<?> clazz_str str.ge…...

[HUBUCTF 2022 新生赛]messy_traffic

下载附件 看到文件类型直接用wireshark打开&#xff0c;对MySQL协议进行追踪流&#xff0c;并没有什么发现&#xff0c;后面对NO.437发现有用信息&#xff0c;http追踪流 发现**system(‘cat passwd.txt’);**这里是在打开查看passwd.txt&#xff0c;密码是"SignUpForHUBU…...

条款1:理解模版性别推导

目录 问题引出 情况1&#xff1a;ParamType是个指针或引用&#xff0c;但不是个万能引用。 情况2&#xff1a;ParamType是个万能引用 情况3&#xff1a;ParamType既非指针也非引用 问题引出 函数模板大致形如&#xff1a; template<typename T> void f(ParamType p…...

kafka连问

1&#xff0c;kafka多消费者指部署多个服务消费节点吗 2&#xff0c;多个消费节点自动组成消费组吗 3&#xff0c;消费者组与多消费节点关系 4&#xff0c;一个分区&#xff0c;多个消费者&#xff0c;可以保证有序消费吗 5&#xff0c;kafka如何实现顺序消费&#xff0c;一…...

Linux中基础开发工具详细介绍

目录 软件包管理器什么是软件包Linux软件生态 yum具体操作查看软件包安装软件卸载软件注意事项 编辑器VimLinux编辑器-vim使用vim的基本概念快速编辑的指令 编译器gcc/g背景知识gcc编译选项预处理(进行宏替换)编译&#xff08;生成汇编&#xff09;汇编&#xff08;生成机器可识…...

浅谈时钟启动和Systemlnit函数

时钟是STM32的关键&#xff0c;是整个系统的心脏&#xff0c;时钟如何启动&#xff0c;时钟源如何选择&#xff0c;各个参数如何设置&#xff0c;我们从源码来简单分析一下时钟的启动函数Systemlnit&#xff08;&#xff09;。 Systemlnit函数简介 我们先来看一下源程序的注释…...

社交软件频繁更新,UI 设计在其中扮演什么角色?

在当今数字化时代&#xff0c;社交软件已成为人们日常生活中不可或缺的一部分。随着科技的飞速发展和用户需求的不断变化&#xff0c;社交软件更新频率日益加快。在这频繁更新的背后&#xff0c;UI 设计扮演着至关重要的角色&#xff0c;它如同社交软件的 “门面担当” 与 “交…...

SQLMesh 系列教程:解锁SQLMesh的宏与变量魔法

在数据库流水线开发中&#xff0c;代码复用与动态配置是提升效率的核心诉求。SQLMesh以其独特的宏系统与用户定义变量机制&#xff0c;重新定义了SQL生成的灵活性。与传统模板引擎不同&#xff0c;SQLMesh的宏并非简单的字符串替换&#xff0c;而是基于语义理解的智能代码重构—…...

React篇之three渲染

需求&#xff1a;拖拽右侧面板&#xff0c;里面的three模型能够自适应 import { useEffect, useState, useRef } from react import ./App.css import * as THREE from three; import { GLTFLoader } from three/addons/loaders/GLTFLoader.js; import { debounce } from loda…...

PHP与前端框架的无缝集成:最佳实践与案例分析

PHP与前端框架的无缝集成&#xff1a;最佳实践与案例分析 在现代Web开发中&#xff0c;PHP作为后端语言与前端框架的集成已成为一种常见的开发模式。无论是传统的MVC架构&#xff0c;还是现代的SPA&#xff08;单页应用&#xff09;&#xff0c;PHP与前端框架的无缝集成能够显…...

Redis内存淘汰策略

Redis 是一种高性能的键值存储系统&#xff0c;广泛用于缓存、消息队列等场景。由于 Redis 数据存储在内存中&#xff0c;而内存资源有限&#xff0c;因此需要内存淘汰策略来管理内存的使用。Redis 提供了多种内存淘汰策略&#xff0c;可以根据不同的应用场景选择合适的策略。 …...

Facebook 的框架及技术栈

一、前端框架与技术 React.js 及其生态系统 核心原理与特点 React.js 是 Facebook 开源的用于构建用户界面的 JavaScript 库。它的核心概念是组件化&#xff0c;将用户界面拆分成一个个独立的、可复用的组件。每个组件都有自己的状态&#xff08;state&#xff09;和属性&#…...

QT中的布局管理

在 Qt 中&#xff0c;布局管理器&#xff08;如 QHBoxLayout 和 QVBoxLayout&#xff09;的构造函数可以接受一个 QWidget* 参数&#xff0c;用于指定该布局的父控件。如果指定了父控件&#xff0c;布局会自动将其管理的控件添加到父控件中。 在你的代码中&#xff0c;QHBoxLa…...

如何学习VBA_3.2.20:DTP与Datepicker实现日期的输入

我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的劳动效率&#xff0c;而且可以提高数据处理的准确度。我推出的VBA系列教程共九套和一部VBA汉英手册&#xff0c;现在已经全部完成&#xff0c;希望大家利用、学习。 如果…...

在 LaTeX 中强制表格位于页面顶部

在 LaTeX 中强制表格位于页面顶部&#xff0c;可以通过以下 多种方法结合使用&#xff0c;按优先级推荐&#xff1a; 方法 1&#xff1a;使用 [!t] 位置限定符 原理&#xff1a;通过 [!t] 强制 LaTeX 优先将表格放置在页面顶部&#xff08;Top&#xff09;&#xff0c;! 表示忽…...

dify+mysql的诗词助手

目录 数据库表结构&#xff1a; 数据库查询的http服务搭建&#xff1a; 流程引擎搭建&#xff1a; 开始&#xff0c; HTTP查询数据库&#xff0c; LLM数据分析&#xff0c; 直接回复&#xff0c; 效果测试&#xff1a; 下载链接&#xff1a; 数据库表结构&#xff1a;…...

PyTorch 入门学习

目录 PyTorch 定义 核心作用 应用场景 Pytorch 基本语法 1. 张量的创建 2. 张量的类型转换 3. 张量数值计算 4. 张量运算函数 5. 张量索引操作 6. 张量形状操作 7. 张量拼接操作 8. 自动微分模块 9. 案例-线性回归案例 PyTorch 定义 PyTorch 是一个基于 Python 深…...

【视频】SRS将RTMP转WebRTC、HLS流;获取RTSP转其它流

1、安装依赖库 sudo apt install tclsh sudo apt install cmake sudo apt install autotools-dev automake m4 perl sudo apt install libtool2、源码安装 1)下载源码 https://github.com/ossrs/srs/releases/tag/v5.0-r32)配置、编译 ./configure && make -j83、…...

linux中如何查询文件夹大小

在 Linux 中&#xff0c;可以使用 du 命令查看文件夹大小。以下是常用方法&#xff1a; 标题1. 查看文件夹大小 du -sh /path/to/directory-s&#xff1a;显示总大小。 -h&#xff1a;以易读格式&#xff08;如 KB、MB、GB&#xff09;显示大小。 标题2&#xff1a;查看文件…...

MySQL增删改查操作 -- CRUD

个人主页&#xff1a;顾漂亮 目录 1.CRUD简介 2.Create新增 使用示例&#xff1a; 注意点&#xff1a; 3.Retrieve检索 使用示例&#xff1a; 注意点&#xff1a; 4.where条件查询 前置知识&#xff1a;-- 运算符 比较运算符 使用示例&#xff1a; 注意点&#xf…...

uniapp+Vue3 组件之间的传值方法

一、父子传值&#xff08;props / $emit 、ref / $refs&#xff09; 1、props / $emit 父组件通过 props 向子组件传递数据&#xff0c;子组件通过 $emit 触发事件向父组件传递数据。 父组件&#xff1a; // 父组件中<template><view class"container">…...

TDengine SQL 函数

单行函数 数学函数 ABSACOSASINATANCEILCOSDEGREESEXPFLOORGREATESTLEASTLNLOGMODPIPOWRADIANSRANDROUNDSIGNSINSQRTTANTRUNCATE 字符串函数 ASCIICHARCHAR_LENGTHCONCATCONCAT_WSLENGTHLOWERLTRIMPOSITIONREPEATREPLACERTRIMSUBSTRING/SUBSTRSUBSTRING_INDEXTRIMUPPER 转换函数…...

智能三防手持终端破解传统仓储效率困局

在数字化浪潮的推动下&#xff0c;传统仓储管理模式正面临效率低、成本高、错误频发等瓶颈。如何实现精准、高效、智能化的仓储管理&#xff0c;上海岳冉三防智能手持终端机以RFID技术为核心&#xff0c;结合工业级三防&#xff08;防水、防摔、防尘&#xff09;设计&#xff0…...

力扣——K个一组翻转链表

题目链接&#xff1a; 链接 题目描述&#xff1a; 思路&#xff1a; 可以理解为把原链表的每一段进行反转 把链表的每一段看成新链表&#xff0c;单独进行反转&#xff0c;然后再放回原链表 关键是截取k个节点、进行反转后&#xff0c;怎么再和原链表链接起来 我们把截取的…...

5-27 临摹大师-IP-Adapter

前言&#xff1a; 前一节我们主要介绍ControlNet中如何对黑白照片进行上色 主要介绍ControlNet中的IP-Adapter。这个也是一种类似的风格借鉴&#xff0c;类似Reference的能力。 当然IP-Adapter有两点或许可以吸引我们&#xff0c;一个是国人腾讯公司制作的。另一个在速度和效…...

MinIO的预签名直传机制

我们传统使用MinIo做OSS对象存储的应用方式往往都是在后端配置与MinIO的连接和文件上传下载的相关接口&#xff0c;然后我们在前端调用这些接口完成文件的上传下载机制&#xff0c;但是&#xff0c;当并发量过大&#xff0c;频繁访问会对后端的并发往往会对服务器造成极大的压力…...

树莓科技集团董事长:第五代产业园运营模式的深度剖析与展望​

第五代产业园运营模式&#xff0c;以创新为核心驱动&#xff0c;强调数字化、网络化和资源整合。树莓科技集团在这一领域具有代表性&#xff0c;其运营模式值得深入剖析。 核心特征 数字化转型&#xff1a;第五代产业园高度重视数字化技术的应用&#xff0c;通过构建数字化平…...

项目组织管理类型-职能式组织和矩阵式组织的区别

在职能式组织和矩阵式组织中&#xff0c;任务分配和人员安排确实有显著的不同&#xff0c;让我们通过以下例子来进一步解释&#xff1a; 职能式组织在职能式组织中&#xff0c;任务通常是根据部门的职能进行下达的。 例如&#xff0c;一家制造公司的组织结构如下&#xff1a; …...

树莓科技(成都)集团:如何铸就第五代产业园标杆

树莓科技&#xff08;成都&#xff09;集团铸就第五代产业园标杆&#xff0c;主要体现在以下几个方面&#xff1a; 精准定位与前瞻布局 树莓科技并非盲目扩张&#xff0c;而是精准锚定数字经济发展方向。以成都为起点&#xff0c;迅速构建起全国性的园区版图&#xff0c;体现…...

【Quest开发】手柄交互震动

软件&#xff1a;Unity 2022.3.51f1c1、vscode、Meta XR All in One SDK V72&#xff08;要提前导入哦&#xff09; 硬件&#xff1a;Meta Quest3 参考Meta开发文档&#xff1a;https://developers.meta.com/horizon/documentation/unity/unity-haptics-sdk-integrate 这篇官…...

《Transformer如何进行图像分类:从新手到入门》

引言 如果你对人工智能&#xff08;AI&#xff09;或深度学习&#xff08;Deep Learning&#xff09;感兴趣&#xff0c;可能听说过“Transformer”这个词。它最初在自然语言处理&#xff08;NLP&#xff09;领域大放异彩&#xff0c;比如在翻译、聊天机器人和文本生成中表现出…...