Qt Quick 3D渲染

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方向光(如太陽光)direction,?castsShadow,?shadowFactor陽光、月光
PointLight點光源(如燈泡)constantFade,?linearFade,?quadraticFade燈泡、蠟燭
SpotLight聚光燈coneAngle,?innerConeAngle手電筒、舞臺燈
AreaLight區域光width,?height熒光燈、燈箱
AmbientLight環境光color,?brightness全局基礎照明

?方向光示例?:創建帶陰影的太陽光

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粒子發射器emitRate,?lifeSpan,?particleScale
ParticleModel3D粒子模型model,?fadeInDuration,?fadeOutDuration
ParticleDirection3D粒子方向控制direction,?directionVariation

?示例?:創建雪花粒子效果

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…