Qt Quick 3D是Qt框架中用于创建3D图形界面的强大模块,它提供了声明式的QML API,使得开发者无需深入底层图形API就能构建复杂的3D场景。本文将全面介绍Qt Quick 3D的核心概念和技术细节,包括3D场景坐标系统、场景环境设置、光照与材质系统、相机控制、渲染优化等关键技术点。

Qt Quick 3D概述

Qt Quick 3D是Qt 6.0中引入的重要模块,它为QML提供了高性能的3D渲染能力,使开发者能够创建丰富的3D用户界面和应用程序。与传统的Qt 3D模块相比,Qt Quick 3D设计更注重与2D界面的无缝集成,适用于轻量级的3D场景。当应用程序中大部分内容是2D界面,但某些部分需要简单的3D显示(如产品模型展示或数据可视化)时,Qt Quick 3D是理想的选择。

Qt Quick 3D的整体架构分为几个层次:

  • QML应用层​:开发者使用的声明式接口,提供View3D、Model、Material等QML类型
  • 场景图适配层​:将3D场景集成到Qt Quick场景图中,处理2D和3D元素的混合渲染
  • 渲染引擎层​:基于RHI(Render Hardware Interface),支持Vulkan、Metal、Direct3D和OpenGL
  • 资源管理层​:处理模型、纹理等资源的加载与缓存,包含异步加载系统

3D场景基础与坐标系统

View3D与场景容器

View3D是Qt Quick 3D中3D场景的容器,相当于Qt Quick 2D中的Canvas。它是所有3D内容的根容器,定义了3D场景的视口范围和渲染环境。

View3D {// 3D视图容器,填充父元素anchors.fill: parent// 使用透视相机camera: perspectiveCamera// 定义透视相机(相当于观察者的视角)PerspectiveCamera {id: perspectiveCamera// 相机位置在3D空间中的坐标(x,y,z)position: Qt.vector3d(300, 300, 300)// 相机的旋转角度eulerRotation.x: -45  // 绕x轴旋转-45度eulerRotation.y: 45   // 绕y轴旋转45度}
}

3D坐标系统

Qt Quick 3D使用右手坐标系,其中:

  • X轴:水平向右
  • Y轴:垂直向上
  • Z轴:从屏幕向外

初始状态窗口的中心点坐标为原点Qt.vector3d(0, 0, 0),所有3D对象(Node及其子类)都具有以下基本空间属性:

属性类型描述示例值
positionvector3d对象在父坐标系中的位置Qt.vector3d(0, 0, 0)
rotationvector3d欧拉角旋转(x,y,z度)Qt.vector3d(30, 45, 0)
scalevector3d各轴缩放比例Qt.vector3d(1, 1, 1)
pivotvector3d变换的中心点Qt.vector3d(0, -50, 0)

场景层次结构通过父子节点关系建立,子节点会继承父节点的变换(位置、旋转、缩放)。例如,创建一个包含多个模型的场景:

Node {id: sceneRoot// 父节点Node {position: Qt.vector3d(100, 0, 0)// 子节点,位置相对于父节点Model {position: Qt.vector3d(0, 50, 0)source: "#Cube"}}// 另一个独立节点Model {position: Qt.vector3d(-100, 0, 0)source: "#Sphere"}
}

场景环境(SceneEnvironment)配置

SceneEnvironment定义了3D场景的全局渲染环境和后期处理效果。它是View3D的核心属性之一,控制着场景的背景、光照处理和视觉效果。

主要属性

属性类型描述示例值
backgroundModeenum背景类型(Color, SkyBox, Transparent等)SceneEnvironment.SkyBox
clearColorcolor当backgroundMode为Color时的背景色"#222840"
lightProbeTexture用于图像照明(IBL)的HDR环境贴图lightProbeTexture
probeExposurereal环境探针的曝光值1.0
probeHorizonreal环境探针的水平线阈值0.0
tonemapModeenum色调映射模式(Linear, Filmic等)SceneEnvironment.Filmic
antialiasingModeenum抗锯齿模式(NoAA, MSAA等)SceneEnvironment.MSAA
antialiasingQualityenum抗锯齿质量(Medium, High等)SceneEnvironment.High

完整示例​:

import QtQuick
import QtQuick3D
import QtQuick3D.HelpersWindow {width: 640height: 480visible: truetitle: qsTr("Hello World")View3D {// 3D视图容器,填充父元素anchors.fill: parent// 指定使用的相机camera: camera// 设置场景环境属性environment: SceneEnvironment {antialiasingMode: SceneEnvironment.MSAA  // 使用多重采样抗锯齿antialiasingQuality: SceneEnvironment.High  // 高质量抗锯齿backgroundMode: SceneEnvironment.Color  // 使用纯色背景clearColor: "#80111111"  // 背景色(半透明深灰色)}// 定义透视相机(观察者视角)PerspectiveCamera {id: camera  // 相机唯一标识position: Qt.vector3d(300, 300, 300)  // 相机位置(x,y,z)eulerRotation.x: -45  // 绕x轴旋转-45度(向下倾斜)eulerRotation.y: 45   // 绕y轴旋转45度(侧向视角)}// 定义方向光(模拟太阳光)DirectionalLight {position: Qt.vector3d(-500, 500, -100)  // 光源位置color: Qt.rgba(1, 1, 1, 1)  // 白光(RGBA格式)}// 另一个方向光(补充光源)DirectionalLight {position: Qt.vector3d(500, -500, 100)  // 光源位置color: Qt.rgba(1, 1, 1, 1)  // 白光eulerRotation.x: -45  // 光源倾斜角度eulerRotation.y: 45}// 创建一个3D模型(球体)Model {source: "#Sphere"  // 使用内置的球体模型materials: [  // 定义材质DefaultMaterial {diffuseColor: "gold"  // 漫反射颜色设为金色}]position: Qt.vector3d(0, 0, 0)  // 球体位于场景中心}// 辅助坐标系(显示x/y/z轴,用于调试)AxisHelper {}}// WASD控制器(通过键盘WASD键控制相机移动)WasdController {controlledObject: camera  // 控制的对象是前面定义的相机}
}

 

天空盒(SkyBox)与图像照明(IBL)

天空盒是一种将场景包裹在立方体纹理中的技术,提供远距离环境背景。​基于图像的照明​(Image Based Lighting, IBL)用于照亮场景或单个材质。它是一种使用图像照亮场景的照明技术,可以在场景中创建逼真的照明和反射。可以将任何图像文件用于IBL,但建议使用HDR图像,它具有更高的动态范围,通过从非常亮到非常暗的大范围亮度级别提供更加真实的照明。

使用IBL需要将图像作为纹理贴图添加到SceneEnvironmentlightProbe属性,再将backgroundMode属性设置为SceneEnvironment.SkyBox就实现天空盒效果,此场景中的所有模型都会由lightProbe照亮。如果只想在对应材质而不是整个场景上使用IBL,可以将图像指定到模型特定材质的lightProbe属性。

SceneEnvironment {id: sceneEnvbackgroundMode: SceneEnvironment.SkyBoxlightProbe: Texture {source: "qrc:/environments/industrial_sunset_02_puresky_1k.hdr"}probeExposure: 1.5probeHorizon: 0.2tonemapMode: SceneEnvironment.Filmic
}

完整示例​:创建一个具有HDR环境照明的场景

相机(Camera)系统

相机决定了观察者如何查看3D场景。Qt Quick 3D提供多种相机类型和控制器。

相机类型

类型描述典型用途
PerspectiveCamera透视投影,模拟人眼视觉效果大多数3D场景
OrthographicCamera正交投影,保持物体大小不变工程制图、CAD
FrustumCamera自定义截头体投影特殊投影需求

相机属性

属性类型描述示例值
positionvector3d相机位置Qt.vector3d(0, 0, 600)
rotationvector3d相机旋转欧拉角Qt.vector3d(30, 0, 0)
clipNearreal近裁剪面距离1.0
clipFarreal远裁剪面距离10000.0
fieldOfViewreal透视相机的视野角度(度)60.0
projectionModeenum投影模式(Perspective/Orthographic)Camera.Perspective

相机控制器

相机控制器将用户输入转换为相机运动,常见的有:

// 轨道控制器(围绕目标旋转)
OrbitCameraController {camera: cameraanchors.fill: parent
}// 第一人称控制器(WASD移动)
FirstPersonCameraController {camera: cameraanchors.fill: parentmovementSpeed: 100lookSpeed: 1
}

光源(Light)系统

光照是3D场景中创造真实感和深度的关键元素。Qt Quick 3D支持多种光源类型,每种都有不同的特性和用途。

光源类型及属性

光源类型描述关键属性示例
DirectionalLight方向光(如太阳光)directioncastsShadowshadowFactor阳光、月光
PointLight点光源(如灯泡)constantFadelinearFadequadraticFade灯泡、蜡烛
SpotLight聚光灯coneAngleinnerConeAngle手电筒、舞台灯
AreaLight区域光widthheight荧光灯、灯箱
AmbientLight环境光colorbrightness全局基础照明

方向光示例​:创建带阴影的太阳光

DirectionalLight {eulerRotation.x: -45eulerRotation.y: -30castsShadow: trueshadowFactor: 5shadowMapQuality: Light.ShadowMapQualityHighbrightness: 1.5
}

点光源示例​:创建闪烁的灯泡效果

PointLight {position: Qt.vector3d(0, 100, 0)color: "yellow"brightness: 2.0constantFade: 1.0linearFade: 0.0quadraticFade: 0.001// 动画效果SequentialAnimation on brightness {loops: Animation.InfiniteNumberAnimation { to: 3.0; duration: 800; easing.type: Easing.InOutQuad }NumberAnimation { to: 1.5; duration: 1200; easing.type: Easing.InOutQuad }}
}

材质(Material)与纹理(Texture)

材质定义了物体表面的视觉表现,包括颜色、反射率、粗糙度等属性。Qt Quick 3D提供了多种材质类型,满足不同渲染需求。

材质类型对比

材质类型描述适用场景
PrincipledMaterial基于物理的渲染(PBR)材质真实感表面(金属、塑料等)
DefaultMaterial传统非PBR材质简单表面、性能敏感场景
CustomMaterial自定义着色器材质特殊效果、高级着色
SpecularGlossyMaterial镜面光泽材质特定PBR工作流

PrincipledMaterial关键属性

属性类型描述示例值
baseColorcolor基础颜色"red"
baseColorMapTexture基础颜色贴图colorTexture
metalnessreal金属度(0-1)0.9(金属)
roughnessreal粗糙度(0-1)0.1(光滑)
normalMapTexture法线贴图normalTexture
normalStrengthreal法线强度1.0
emissiveColorcolor自发光颜色"white"
emissiveMapTexture自发光贴图emissiveTexture
opacityreal透明度(0-1)0.8
alphaModeenum透明模式(Opaque, Mask, Blend)DefaultMaterial.Blend

材质示例​:创建金属材质表面

PrincipledMaterial {baseColor: "#ffd700"metalness: 0.9roughness: 0.2specularAmount: 1.0indexOfRefraction: 2.5normalMap: Texture {source: "qrc:/textures/metal_normal.png"}metalnessMap: Texture {source: "qrc:/textures/metal_roughness.png"}
}

纹理(Texture)应用

纹理可以增强材质的真实感,Qt Quick 3D支持多种纹理映射技术:

纹理类型描述示例
颜色贴图定义表面基础颜色木纹、墙纸
法线贴图模拟表面凹凸细节砖墙、锈迹
金属/粗糙度贴图控制PBR材质参数磨损金属
环境遮挡贴图添加表面阴影细节角落暗部
自发光贴图定义发光区域霓虹灯、屏幕

纹理组合示例​:

PrincipledMaterial {baseColorMap: Texture {source: "qrc:/textures/concrete_diffuse.jpg"}normalMap: Texture {source: "qrc:/textures/concrete_normal.jpg"}roughnessMap: Texture {source: "qrc:/textures/concrete_roughness.jpg"}metalnessMap: Texture {source: "qrc:/textures/concrete_metallic.jpg"}occlusionMap: Texture {source: "qrc:/textures/concrete_ao.jpg"}
}

2D内容与3D场景的集成

Qt Quick 3D的一个强大特性是能够无缝集成2D和3D内容。这种混合渲染能力使得开发者可以在3D场景中嵌入UI元素、视频或2D图形。

2D内容嵌入3D场景的方法

方法描述适用场景
Texture + Sprite将2D内容作为纹理应用到3D表面电视屏幕、画布
Layer + View3D使用Qt Quick的Layer将2D内容渲染到纹理动态UI元素
QtQuick Items直接在3D场景上方叠加2D元素HUD、UI控件

在3D场景中创建2D UI面板

View3D {id: view3Danchors.fill: parent
}// 叠加在3D场景上的2D控制面板
Rectangle {anchors.bottom: parent.bottomwidth: parent.widthheight: 80color: "#80000000"Row {anchors.centerIn: parentspacing: 20Button {text: "旋转"onClicked: animation.start()}Slider {width: 200from: 30to: 90value: camera.fieldOfViewonValueChanged: camera.fieldOfView = value}}
}

高级渲染技术

实例化渲染(Instanced Rendering)

实例化渲染是一种高效渲染大量相似对象的技术,可以显著减少绘制调用。Qt Quick 3D通过InstanceListInstancing实现这一功能。

实例化渲染属性​:

属性类型描述示例
instancingInstancing实例化数据源InstanceList
instanceCountint实例数量1000
colorcolor实例颜色(可选)"red"

示例​:创建10000个随机分布的立方体

import QtQuick
import QtQuick3D
import QtQuick3D.HelpersWindow {width: 640height: 480visible: truetitle: qsTr("Hello World")// 3D视图容器(集成到Qt Quick 2D界面)View3D {anchors.fill: parent  // 填充父容器environment: SceneEnvironment {backgroundMode: SceneEnvironment.SkyBox  // 使用HDR天空盒作为背景lightProbe: Texture {  // 基于图像的照明(IBL)探针source: "DoschAsiaRoads.hdr"  // HDR环境贴图路径(提供全局光照)}probeExposure: 3  // 增强环境光曝光强度(提升场景亮度)}// 透视相机配置(带俯视角)PerspectiveCamera {id: cameraposition: Qt.vector3d(0, 300, 500)  // 相机位置(Y轴抬高300,Z轴后退500)eulerRotation.x: -25  // X轴旋转-25度(产生俯视效果)}// 随机实例化配置(高效渲染大量相似对象)RandomInstancing {id: randomInstancinginstanceCount: 10000  // 实例数量(1万个立方体)// 位置随机范围(X轴±5000米,Y轴-2000~200米,Z轴-9000~500米)position: InstanceRange {from: Qt.vector3d(-5000, -2000, -9000)to: Qt.vector3d(5000, 200, 500)}// 旋转随机范围(Y轴不旋转,X/Z轴±180度)rotation: InstanceRange {from: Qt.vector3d(-180, 0, -45)to: Qt.vector3d(180, 0, 45)}// 颜色随机范围(从深灰到纯白)color: InstanceRange {from: Qt.rgba(0.1, 0.1, 0.1, 1)to: Qt.rgba(1, 1, 1, 1)}}// 主模型定义(使用实例化渲染)Model {instancing: randomInstancing  // 应用随机实例化配置source: "#Cube"  // 内置立方体网格materials: PrincipledMaterial {metalness: 1  // 完全金属质感roughness: 0.1  // 低粗糙度(高反射效果)baseColor: "#FFFFFF"  // 基础色白色(实际由实例化颜色覆盖)}// 旋转动画(所有实例同步旋转)NumberAnimation on eulerRotation.y {from: 0to: 360  // 绕Y轴旋转360度duration: 3000  // 3秒完成loops: Animation.Infinite  // 无限循环}}// 相机控制器(WASD键盘交互)WasdController {controlledObject: camera  // 绑定透视相机实现第一人称移动}}
}

 

粒子系统

Qt Quick 3D支持3D空间中的粒子效果,可以用于创建火焰、烟雾、魔法效果等。

粒子系统核心组件​:

组件描述关键属性
ParticleEmitter3D粒子发射器emitRatelifeSpanparticleScale
ParticleModel3D粒子模型modelfadeInDurationfadeOutDuration
ParticleDirection3D粒子方向控制directiondirectionVariation

示例​:创建雪花粒子效果

import QtQuick
import QtQuick.Controls
import QtQuick3D
import QtQuick3D.Particles3D
import QtQuick3D.HelpersWindow {width: 1024height: 768visible: truetitle: qsTr("Hello World")// 3D视图容器(集成到Qt Quick 2D界面)View3D {anchors.fill: parent  // 填充父容器environment: SceneEnvironment {backgroundMode: SceneEnvironment.SkyBox  // HDR天空盒背景模式antialiasingMode: SceneEnvironment.MSAA  // 多重采样抗锯齿antialiasingQuality: SceneEnvironment.VeryHigh  // 最高抗锯齿质量lightProbe: Texture {  // 基于图像的照明(IBL)探针source: "NordnesPark.hdr"  // HDR环境贴图路径(提供全局光照)}probeExposure: 0.5  // 降低环境光曝光(模拟雪天柔和光照)}// 透视相机配置(默认视角)PerspectiveCamera {id: cameraposition: Qt.vector3d(0, 100, 300)  // 相机位置(Y轴抬高100,Z轴后退300)}// 3D粒子系统(模拟雪花效果)ParticleSystem3D {id: particleSystem3D// 粒子精灵定义(单个雪花属性)SpriteParticle3D {id: snowParticlesprite: Texture {  // 粒子贴图source: "snowflake.png"  // 雪花纹理路径}maxAmount: 15000  // 最大粒子数(控制性能)color: "#FFFFFF"  // 基础白色colorVariation: Qt.vector4d(0.05, 0.05, 0.05, 0.5)  // RGBA随机变化范围fadeInDuration: 1000  // 淡入时间(毫秒)fadeOutDuration: 1000  // 淡出时间(毫秒)}// 粒子发射器配置ParticleEmitter3D {id: emitterparticle: snowParticle  // 绑定粒子类型position: Qt.vector3d(0, 300, -300)  // 发射器位置(场景上方)depthBias: -100  // 深度偏移(防止与场景穿插)scale: Qt.vector3d(15, 0, 15)  // 发射区域缩放(X/Z平面扩展)shape: ParticleShape3D {  // 发射器形状type: ParticleShape3D.Sphere  // 球形发射区域}particleRotationVariation: Qt.vector3d(180, 180, 180)  // 初始旋转随机范围particleRotationVelocityVariation: Qt.vector3d(50, 50, 50)  // 旋转速度随机范围particleScale: sizeSlider.value  // 粒子大小(绑定外部滑块)particleScaleVariation: 0.5  // 大小随机变化幅度velocity: VectorDirection3D {  // 粒子运动方向direction: Qt.vector3d(0, -200 * rotationSlider.value, 0)  // 主要下落速度directionVariation: Qt.vector3d(0, -200 * 0.5 * rotationSlider.value, 0)  // 速度随机变化}emitRate: emitRateSlider.value  // 发射速率(粒子数/秒,绑定滑块)lifeSpan: 10000  // 粒子生命周期(毫秒)lifeSpanVariation: 2000  // 生命周期随机变化}}}// 相机控制器(WASD键盘交互)WasdController {controlledObject: camera  // 绑定透视相机实现第一人称移动}Button {width: 100height: 50anchors.left: parent.leftanchors.leftMargin: 50y: 600text: particleSystem3D.running ? "停止" : "开始"onClicked: {particleSystem3D.running = !particleSystem3D.running}}Row {width: parent.widthanchors.left: parent.leftanchors.leftMargin: 50y: 700spacing: 10Label { text: "雪花数量: "; color: "white" }Slider {id: emitRateSliderwidth: 200height: 20from: 100to: 5000stepSize: 100value: 500}}Row {width: parent.widthanchors.left: parent.leftanchors.leftMargin: 400y: 700spacing: 10Label { text: "雪花大小: "; color: "white" }Slider {id: sizeSliderwidth: 200height: 20from: 1to: 5stepSize: 0.05value: 1}}Row {width: parent.widthanchors.left: parent.leftanchors.leftMargin: 750y: 700spacing: 10Label { text: "旋转: "; color: "white" }Slider {id: rotationSliderwidth: 200height: 20from: 1to: 20stepSize: 0.1value: 2}}}

总结

Qt Quick 3D为QML开发者提供了强大的3D图形能力,通过声明式语法简化了3D场景的创建和管理。从基础场景设置到高级渲染技术,Qt Quick 3D覆盖了游戏开发、产品展示、数据可视化等多种应用场景。掌握3D坐标系统、场景环境配置、材质光照系统和性能优化技巧,开发者可以创建出既美观又高效的3D应用程序。

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

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

相关文章

笔试——Day17

文章目录第一题题目思路代码第二题题目:思路代码第三题题目:思路代码第一题 题目 小乐乐改数字 思路 模拟 当前位置为偶数时,改为0;否则改为1记得取出前导0;stoi()函数可以直接自动去除前导0 代码 第二题 题目&a…

【c#】完美解决部署IIS 报错 0x8007000d

1、错误页面:2、解决思路: 1、点击IIS站点,右键点击浏览到文件夹下,路径打开cmd,找到对应的站点的dll,运行失败会提示错误原因。需要安装某些dll2、选中站点,点击模块,检查模块AspNe…

Visual Studio 2010-.Net Framework 4.0项目-NPOI安装

在管理Nuget程序包中搜索NPOI,下载最新版会报错:使用程序包控制台输入:Install-Package NPOI -Version 2.5.1

Redis原理之分布式锁

上篇文章: Redis原理之缓存https://blog.csdn.net/sniper_fandc/article/details/149141968?fromshareblogdetail&sharetypeblogdetail&sharerId149141968&sharereferPC&sharesourcesniper_fandc&sharefromfrom_link​​​​​​​ 目录 1 …

网络基础19:OSPF单区域原理实验

一、实验拓扑二、设备配置AR1 配置<AR1> system-view [AR1] interface GigabitEthernet0/0/0 [AR1-GigabitEthernet0/0/0] ip address 192.168.1.1 24 [AR1-GigabitEthernet0/0/0] quit[AR1] ospf 1 router-id 0.0.0.1 [AR1-ospf-1] area 0 [AR1-ospf-1-area-0.0.0.0] ne…

【实战推荐】小白也能上手的多端陪玩系统平台项目源码

在当今的游戏市场中&#xff0c;游戏陪玩服务已经成为了一个热门领域。无论是寻找高手带自己升级、学习游戏技巧&#xff0c;还是仅仅想找人一起玩耍&#xff0c;越来越多的玩家倾向于通过专业的陪玩平台找到合适的伙伴。对于想要进入这个市场的创业者和开发者来说&#xff0c;…

[hot 100 ]最长连续序列-Python3

需要时间复杂度为O(n)&#xff0c;如果采用暴力求解则为O(n^2)1.在遍历hash表的时候检查是否当前值为连续序列的最小值,如果是&#xff0c;则跳过此次循环,这样使得原本需要对每个值进行一次遍历变成了对每个值只访问一次:2.使用set()和普通for num in nums的区别&#xff1a;

[element-plus] el-table show-overflow-tooltip 没有显示省略号

<el-table-columnprop"col2"label"列2"width"70"show-overflow-tooltip/> </el-table-column>不知道为什么没有省略号 再给加个样式 <el-table-column prop"col2" label"列2" width"70" show-ove…

网络基础19--OSPF路由协议单区域

一. RIP的不足跳数评估非最优路径&#xff1a;RIP以跳数作为度量值&#xff0c;不考虑带宽&#xff0c;可能导致次优路径选择。网络规模限制&#xff1a;最大跳数为16&#xff0c;限制了网络规模。收敛速度慢&#xff1a;更新周期长&#xff08;默认30秒&#xff09;&#xff0…

SpringBoot 整合 Langchain4j 实现会话记忆存储深度解析

目录 一、前言 二、AI大模型会话记忆介绍 2.1 AI 大模型的会话记忆是什么 2.2 AI 大模型为什么需要会话记忆 2.3 AI 大模型会话记忆常用实现方案 2.4 LangChain4j 会话记忆介绍 2.4.1 LangChain4j 会话记忆介绍 2.4.2 LangChain4j 会话记忆类型 三、Langchain4j 会话记…

《R 矩阵》

《R 矩阵》 引言 在数学与统计学领域&#xff0c;矩阵是一种强大的工具&#xff0c;它广泛应用于各种科学研究和实际应用中。本文将深入探讨 R 矩阵的概念、特性及其在数据分析中的应用。 R 矩阵的定义与特性 1. 定义 R 矩阵&#xff0c;全称为“实对称矩阵”&#xff0c;是指一…

从java到vue3:第二天

文章目录前言一、setup1.定义2.作用3.响应式数据1.ref2.reactive3.ref与reactive的区别4.toRefs5.computed二、Watch1.监视ref&#xff1a;基本数据2.监视ref&#xff1a;对象数据3.监视reactive&#xff1a;对象数据。4.监视ref或reactive中某个属性5.监视多个属性总结前言 s…

基于 JmsClient 的高效消息通信架构设计与实现

1. 引言 1.1 消息通信在分布式系统中的作用 随着企业级应用的复杂性不断提升,传统的同步调用方式已难以满足高并发、低延迟、高可用等需求。消息通信机制通过异步解耦的方式,提升了系统的可扩展性和容错能力。Java Message Service(JMS)作为一种标准的消息中间件接口,广…

2025.7.24

这题写了好一会, 因为遇到一些问题分糖分的是原来的糖果还是拿到了别人给的糖果加起来一起的?如果是分原来的糖果之后那就要再另外那一个数组存, 数组初始为0, 那么分完之后自己的那一份应该存进另一个数组, 是加法如果是分拿到了别人给的糖果加起来一起的, 那么分完之后不是直…

学习设计模式《十九》——享元模式

一、基础概念 享元模式的本质是【分离与共享】。 思考享元模式序号说明1 【分离】的是对象状态中变与不变的部分&#xff0c;【共享】的是对象中不变的部分&#xff1b; 享元模式的关键就在于【分离变与不变】把不变的部分作为享元对象的内部状态&#xff0c;而变化部分则作为外…

AI助力 三步实现电子发票发票号码的提取

小伙伴们&#xff0c;大家好今天我们来利用ollama本地大模型&#xff0c;三步实现电子发票发票号码的提取。 步骤1&#xff1a;安装Ollama访问官网https://ollama.com/ 下载相应的版本进行安装&#xff0c;下载属于自己平台的ollama&#xff0c;根据安装向导完成安装。…

告别下载中断:深入解析Tomcat JSP中的“远程主机强迫关闭连接”与“软件中止连接”

在Web开发中,提供文件下载功能是一项常见需求。然而,当用户在Tomcat JSP项目中尝试下载文件时,有时会遭遇令人头疼的错误提示:“远程主机强迫关闭了一个现有链接”(Remote host closed connection unexpectedly)或“您的主机中的软件中止了一个已建立的连接”(Software …

实战演练—基于Transformers的NLP解决方案总结

实战演练—基于Transformers的NLP解决方案总结 截至目前讲解的基础组件 以文本分类为例 Transformers显存优化 截至目前讲解的基础组件 Pipeline 流水线,用于模型推理,封装了完整的推理逻辑,包括数据预处理、模型预测及后处理 Tokenizer 分词器,用于数据预处理,将原始文本…

Java 解析前端上传 ZIP 压缩包内 Excel 文件的完整实现方案

使用zip压缩包上传excel文件的优点1、体积更小&#xff0c;节约带宽2、比excel直接读取更方便携带参数及修改3、可以一次性批量导入Java代码 ControllerPostMapping("/importData")ApiOperationSupport(order 3)ApiOperation(value "上传")public R impo…

【shell脚本编程】day1 备份指定文件类型

文章目录1、脚本要求2、脚本编写3、脚本解释4、脚本改进1、脚本要求 编写一个脚本&#xff0c;遍历/data/目录下的.txt文件将这些txt文件做一个备份备份的文件名增加一个年月日的后缀&#xff0c;比如将aming.txt备份为aming.txt_20231001 2、脚本编写 [rootlocalhost shell…