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

babylon.js-3:了解STL网格模型

网格模型上色

本篇文章主要介绍如何在 BabylonJS 中实现STL网格模型上色。

文章目录

    • 网格模型上色
      • 运用场景
      • 概要
      • 延申
      • 正文
        • 加载器库的支持
        • 认识 OBJ 和 STL 文件
        • GUI 色板选择器
        • 网格模型异步加载
        • 加载动画
        • 网格模型上色
        • 官方即将弃用 `ImportMesh` 而推荐使用 `ImportMeshAsync` 说明
        • OBJ 或 STL 文件 第三方资源
      • 总结

  • .STL文件:从官方上的叫法应该叫“标准三角面片文件”。但是为了易懂,我们下面称它为“网格模型”。当然,在场景渲染后它就是一个Mesh(网格)。

  • 图片
    在这里插入图片描述

运用场景

  • 产品私有化选型定制

概要

  • 加载器库
  • 初识 OBJ 和 STL 文件
  • GUI色板选择器
  • 网格模型异步加载
  • 加载动画
  • 网格模型上色
  • 官方即将弃用 ImportMesh 而推荐使用 ImportMeshAsync 说明
  • OBJ 或 STL 文件 第三方资源

延申

  • 网格模型局部部件上色

正文

加载器库的支持
  • CDN 引用

    <script src="https://cdn.babylonjs.com/loaders/babylonjs.loaders.min.js"></script>
    
  • npm 安装

    # @see: https://www.npmjs.com/search?q=babylonjs-loaders
    npm install babylonjs-loaders
    

    更多Vue支持请看: 如何在 Vue 中使用 BabylonJS

认识 OBJ 和 STL 文件

在这里插入图片描述

  • OBJ 文件
    • 定义:OBJ(Object)文件是一种三维对象文件格式,它是一种文本文件,包含了几何信息,如顶点位置、纹理坐标、法线向量和三角形面片信息等。
    • 用途:常用于在不同的三维软件和渲染引擎之间交换三维模型数据,广泛应用于 3D 建模、动画制作、游戏开发等领域,因为它可以存储丰富的几何信息,支持多面体几何图形,并且可以包含材质和纹理信息。
    • 结构:文件中通常以 v 开头的行表示顶点坐标,vt 表示纹理坐标,vn 表示法线,f 表示面信息,这些信息可以组合成一个完整的 3D 模型的几何形状。
    • 示例
      # Blender v2.79 (sub 0) OBJ File: ''
      # www.blender.org
      o Cube
      v 1.000000 -1.000000 -1.000000
      v 1.000000 -1.000000 1.000000
      ...vt 0.625000 0.500000vt 0.875000 0.500000
      ...vn 0.0000 0.0000 1.0000vn 0.0000 0.0000 -1.0000
      ...f 1/1/1 2/2/1 3/3/1f 3/3/1 4/4/1 1/1/1
      

在这里插入图片描述

  • STL 文件
    • 定义:STL(Stereolithography)文件有两种格式,一种是二进制格式,另一种是文本格式,主要用于描述三维表面几何形状,仅包含三角形面片信息,不包含颜色、纹理和其他属性。
    • 用途:主要用于快速成型系统,如 3D 打印,因为它的简单性和对表面几何形状的准确描述,使它成为 3D 打印机的标准输入文件之一。
    • 结构(文本格式):以 solid 开头,包含多个 facet normal 描述三角形面片的法线,然后是 outer loop 包含三角形的三个顶点,以 endloopendfacet 结束一个面片,最后以 endsolid 结束整个文件。
    • 示例(文本格式)
      solid Cube
      facet normal 0.0 0.0 1.0outer loopvertex 1.0 1.0 1.0vertex -1.0 1.0 1.0vertex -1.0 -1.0 1.0endloop
      endfacet
      ...
      endsolid Cube
      

二、VSCode 相关插件

在这里插入图片描述

  • 3D Viewer for VSCode:在 VSCode 中,可以使用 3D Viewer for VSCode 插件,它可以让你在编辑器中预览 STL 文件。安装该插件后,打开 STL 文件,在编辑器的侧边栏会出现一个 3D 视图,可以旋转、缩放和平移查看 STL 模型。
  • 市场:3dviewer
GUI 色板选择器

在这里插入图片描述

这里的颜色选择面板我们选用BABYLONJS内置原滋原味的GUI面板控件:ColorPicker

具体实现:

// 创建一个全屏的动态纹理
const advancedTexture = BABYLON.GUI.AdvancedDynamicTexture.CreateFullscreenUI("UI");
// 创建一个颜色选择器
const colorPicker = new BABYLON.GUI.ColorPicker();
// 设置颜色选择器的添加位置
advancedTexture.addControl(colorPicker);

注意:请务必添加GUI库,否则浏览器会报错,找不到 AdvancedDynamicTexture 属性

<!-- 引入 BabylonJS GUI 库 -->
<script src="https://cdn.babylonjs.com/gui/babylon.gui.min.js"></script>
网格模型异步加载

由于网格模型过大,正如素材里面的“vaze2.STL”文件165MB。所以在场景中加载的时候需要采用异步加载。

实现代码:

const result = await BABYLON.SceneLoader.ImportMeshAsync('meshName', './3066-vase-3d-model/', 'vaze2.STL', scene, (event) => {})
const newMeshes = result.meshes; // meshes是一个数组集
if (newMeshes.length > 0) {importedMesh = newMeshes[0];
}

参数剖析:

  • lengthComputable:用于检查是否可以计算进度的准确百分比。

    • 注意:为什么需要进入if (event.lengthComputable)这个判断作为前提?
    • event.lengthComputabletrue 时,意味着文件的总大小是已知的,并且可以计算出加载进度的准确百分比。这是因为有些文件的大小可能无法提前得知,例如在某些跨域请求或服务器没有正确设置 Content-Length 头信息时,文件的总大小是不确定的。
  • loaded:表示已经加载的数据量。

  • total:表示文件的总大小。

那么,通过获取以上参数,可以准确的计算当前网格模型加载的进度和展现进度百分比情况。同时可以控制加载完成后,网格模型与加载动画的显示与隐藏。

加载动画

加载动画的思路是一贯的,所以下面给出简单的逻辑和具体实现代码:

  1. 绘制进度条背景
    // 绘制进度背景
    const progressBar = new BABYLON.GUI.Rectangle();
    progressBar.width = "200px"; // 宽度200px
    progressBar.background = "gray";// 底色为灰色
    progressBar.horizontalAlignment = BABYLON.GUI.Control.HORIZONTAL_ALIGNMENT_CENTER; // 水平居中
    progressBar.verticalAlignment = BABYLON.GUI.Control.VERTICAL_ALIGNMENT_CENTER; // 垂直居中
    
  2. 绘制进度条
    // 绘制进度条
    const progressBarFill = new BABYLON.GUI.Rectangle();
    progressBarFill.width = "0px"; // 默认宽度为0
    progressBarFill.background = "blue"; // 底色为蓝色
    progressBarFill.horizontalAlignment = BABYLON.GUI.Control.HORIZONTAL_ALIGNMENT_LEFT; // 水平左对齐(不然会从中间向两天展开)
    
  3. 计算当前进度
    // 计算当前进度
    if (event.lengthComputable) {const progress = event.loaded / event.total;
    }
    
  4. 绘制进度和进度值
    // 宽度为当前进度乘以200
    progressBarFill.width = progress * 200 + "px"; 
    // 显示当前进度
    progressText.text = Math.floor(progress * 100) + "%"; 
    
  5. 加载完毕动作
    // 隐藏进度条
    progressBar.isVisible = false;
    
网格模型上色

颜色选择器绑定一个选择监视器事件,当选择颜色的时候,就给网格模型上色。

具体实现:

colorPicker.onValueChangedObservable.add((value) => {importedMesh.material.diffuseColor = new BABYLON.Color3(value.r, value.g, value.b);
});
官方即将弃用 ImportMesh 而推荐使用 ImportMeshAsync 说明

各自的参数说明就不在赘述了,感兴趣的可以去官方查看,这里主要说明两者的运用场景,就目前环境下谁更好。

  • 使用方法比较

    • ImportMesh

      BABYLON.SceneLoader.ImportMesh("", "path/to/your/models/", "yourModel.obj", scene, function (newMeshes, particleSystems, skeletons) {if (newMeshes.length > 0) {const mesh = newMeshes[0];// 对导入的网格进行操作,例如设置位置和旋转mesh.position = new BABYLON.Vector3(0, 0, 0);mesh.rotation = new BABYLON.Vector3(0, Math.PI, 0);}
      }, function (event) {if (event.lengthComputable) {console.log(`Loaded ${event.loaded} of ${event.total} bytes`);}
      }, function (error) {console.error("Error loading mesh:", error);
      });
      
    • ImportMeshAsync

      const importMeshAsync = async function() {try {const result = await BABYLON.SceneLoader.ImportMeshAsync("", "path/to/your/models/", "yourModel.obj", scene, function (event) {if (event.lengthComputable) {console.log(`Loaded ${event.loaded} of ${event.total} bytes`);}});const newMeshes = result.meshes;if (newMeshes.length > 0) {const mesh = newMeshes[0];// 对导入的网格进行操作,例如设置位置和旋转mesh.position = new BABYLON.Vector3(0, 0, 0);mesh.rotation = new BABYLON.Vector3(0, Math.PI, 0);}} catch (error) {console.error("Error loading mesh:", error);}
      };
      importMeshAsync();
      
  • 区别和优点

    • ImportMesh 是一个传统的回调函数风格的方法,而 ImportMeshAsync 是一个返回 Promise 的异步方法,使用 async/await.then() 处理结果,更符合现代 JavaScript 的异步编程风格。

    • ImportMeshAsync 在使用时可以利用 try...catch 语句来捕获错误,代码结构更清晰,避免了回调函数的嵌套,使代码更易读和维护。

  • 使用场景

    • ImportMesh
      • 适用于传统的回调函数风格的编程,如果你更熟悉这种风格,或者项目中已经大量使用回调函数,可以使用 ImportMesh
      • 在不支持 async/await 的旧环境中使用。
    • ImportMeshAsync
      • 适用于现代 JavaScript 开发,使用 async/await 可以使代码更加简洁,避免回调地狱。
      • 在需要处理多个异步操作时,使用 async/await 可以让代码更易读,更容易组合和管理多个异步操作。
OBJ 或 STL 文件 第三方资源
  • 下载模型的站点:
    • creazilla

总结

  • 案例特点
    在加载大型网格模型,进度条让用户了解加载的进度,提高用户体验。 用户可以通过颜色选择器为模型上色,实现个性化定制。

  • 价值
    可以用于展示各种3D模型,如产品设计、建筑模型、艺术作品等,让用户可以从不同角度查看模型的细节,这在产品设计、游戏开发等领域非常有用。

  • 实现效果展示
    在这里插入图片描述

相关文章:

babylon.js-3:了解STL网格模型

网格模型上色 本篇文章主要介绍如何在 BabylonJS 中实现STL网格模型上色。 文章目录 网格模型上色运用场景概要延申正文加载器库的支持认识 OBJ 和 STL 文件GUI 色板选择器网格模型异步加载加载动画网格模型上色官方即将弃用 ImportMesh 而推荐使用 ImportMeshAsync 说明OBJ …...

面向对象设计(大三上)--往年试卷题+答案

目录 1. UML以及相关概念 1.1 动态图&静态图 1.2 交互图 1.3 序列图 1.4 类图以及关联关系 1.4.1类图 1.4.2 关系类型 (1) 用例图中的包含、扩展关系(include & extend) (2) 类图中的聚合、组合关系(aggragation & composition) 1.5 图对象以及职责划…...

Java基础知识总结(二十四)--Collections

它的出现给集合操作提供了更多的功能。这个类不需要创建对象&#xff0c;内部提供的都是静态方法。 静态方法&#xff1a; Collections.sort(list);//list集合进行元素的自然顺序排序。 Collections.sort(list,new ComparatorByLen());//按指定的比较器方法排序。 class Co…...

大语言模型的API接口如何操作

选择大语言模型 根据自身需求和应用场景选择合适的大语言模型&#xff0c;如 OpenAI 的 GPT 系列、百度的文心一言、智谱的 GLM 等。需要考虑模型的性能、功能特点、适用领域、成本等因素。 获取 API 密钥和凭证 注册账号&#xff1a;访问所选大语言模型的官方平台或相关开发…...

【漫话机器学习系列】067.希腊字母(greek letters)-写法、名称、读法和常见用途

希腊字母&#xff08;Greek Letters&#xff09; 希腊字母在数学、科学、工程学和编程中广泛使用&#xff0c;常用于表示变量、常量、参数、角度等。以下是希腊字母的完整列表及其常见用途。 大写与小写希腊字母表 大写小写名称&#xff08;英文&#xff09;名称&#xff08;…...

Kotlin判空辅助工具

1&#xff09;?.操作符 //执行逻辑 if (person ! null) {person.doSomething() } //表达式 person?.doSomething() 2&#xff09;?:操作符 //执行逻辑 val c if (a ! null) {a } else {b } //表达式 val c a ?: b 3&#xff09;!!表达式 var message: String? &qu…...

【Python-办公自动化】实现自动化输出json数据类型的分析报告和正逆转换

分析报告 import json from pprint import pprint, PrettyPrinterdef analyze_energy_data(file_path):"""能源数据分析与结构查看函数参数:file_path (str): JSON文件路径功能:1. 加载并解析JSON数据2. 显示数据结构概览3. 交互式结构探索"""…...

深入理解指针(2)

数组名的理解 什么是数组名&#xff1f;在计算机编程中&#xff0c;数组名是用于标识一个数组的名称。那应当如何来理解数组名呢&#xff1f;事实上&#xff0c;在数组中数组名就是数组首元素的地址。 示例1&#xff1a; #include<stdio.h> int main() {int arr[10] …...

SOME/IP--协议英文原文讲解3

前言 SOME/IP协议越来越多的用于汽车电子行业中&#xff0c;关于协议详细完全的中文资料却没有&#xff0c;所以我将结合工作经验并对照英文原版协议做一系列的文章。基本分三大块&#xff1a; 1. SOME/IP协议讲解 2. SOME/IP-SD协议讲解 3. python/C举例调试讲解 Note: Thi…...

计算机网络之计算机网络主要性能

一、速率与带宽 速率&#xff1a; 定义&#xff1a;数据的传送速率&#xff0c;也称数据率或比特率&#xff0c;表示单位时间内传输的比特数。 单位&#xff1a;比特/秒&#xff08;bit/s&#xff09;&#xff0c;常用单位有千比特/秒&#xff08;kb/s&#xff09;、兆比特/秒…...

家居 EDI:Haverty‘s EDI 需求分析

Havertys 成立于 1885 年&#xff0c;是一家历史悠久的美国家具零售商。公司致力于为客户提供高品质的家具和家居饰品&#xff0c;其产品线涵盖客厅、卧室、餐厅及办公家具等多个领域。 电子数据交换&#xff08;EDI&#xff09;是一种通过标准化电子格式在商业伙伴之间进行数据…...

JavaScript - Web APIs(上)

Web API 介绍 严格意义上讲&#xff0c;我们在 JavaScript 阶段学习的知识绝大部分属于 ECMAScript 的知识体系&#xff0c;ECMAScript 简称 ES 它提供了一套语言标准规范&#xff0c;如变量、数据类型、表达式、语句、函数等语法规则都是由 ECMAScript 规定的。浏览器将 ECM…...

【漫话机器学习系列】068.网格搜索(GridSearch)

网格搜索&#xff08;Grid Search&#xff09; 网格搜索&#xff08;Grid Search&#xff09;是一种用于优化机器学习模型超参数的技术。它通过系统地遍历给定的参数组合&#xff0c;找出使模型性能达到最优的参数配置。 网格搜索的核心思想 定义参数网格 创建一个包含超参数值…...

MySQL 的索引类型【图文并茂】

基本分类 文本生成MindMap:https://app.pollyoyo.com/planttext <style> mindmapDiagram {node {BackgroundColor yellow}:depth(0) {BackGroundColor SkyBlue}:depth(1) {BackGroundColor lightGreen} } </style> * MySQL 索引** 数据结构角度 *** B树索引*** 哈…...

OSCP:发送钓鱼电子邮件执行客户端攻击

概述 在渗透测试领域&#xff0c;钓鱼攻击是一种有效的客户端攻击手段&#xff0c;尤其在目标用户缺乏安全意识或系统存在未修复漏洞时&#xff0c;成功率较高。针对Windows平台&#xff0c;滥用Windows库文件&#xff08;.Library-ms&#xff09;是一种技术性较强但易于实施的…...

Oracle 普通用户连接hang住处理方法

一、现象说明 $ sqlplus / as sysdbaSQL*Plus: Release 19.0.0.0.0 - Production on Wed Dec 18 16:49:19 2024 Version 19.11.0.0.0Copyright (c) 1982, 2020, Oracle. All rights reserved.Connected to: Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Pro…...

C++ ——— 学习并使用 priority_queue 类

目录 何为 priority_queue 类 学习并使用 priority_queue 类 实例化一个 priority_queue 类对象 插入数据 遍历堆&#xff08;默认是大堆&#xff09; 通过改变实例化的模板参数修改为小堆 何为 priority_queue 类 priority_queue 类为 优先级队列&#xff0c;其本质就是…...

JVM--类加载器

概念 类加载器&#xff1a;只参与加载过程中的字节码获取并加载到内存中的部分&#xff1b;java虚拟机提供给应用程序去实现获取类和接口字节码数据的一种技术&#xff0c;也就是说java虚拟机是允许程序员写代码去获取字节码信息 类加载是加载的第一步&#xff0c;主要有以下三…...

【C++】类与对象初级应用篇:打造自定义日期类与日期计算器(2w5k字长文附源码)

文章目录 一、日期类的实现1. 日期类的默认成员函数的分析与实现构造函数其它默认成员函数 2. 各种逻辑比较运算符重载3. 日期加与减天数日期加天数系列日期减天数系列日期加减天数的最后修定和- -系列 4. 日期减日期方法一方法二 5. 流插入与流提取重载流插入重载流提取重载(含…...

ROS应用之SwarmSim在ROS 中的协同路径规划

SwarmSim 在 ROS 中的协同路径规划 前言 在多机器人系统&#xff08;Multi-Robot Systems, MRS&#xff09;中&#xff0c;SwarmSim 是一个常用的模拟工具&#xff0c;可以对多机器人进行仿真以实现复杂任务的协同。除了任务分配逻辑以外&#xff0c;SwarmSim 在协同路径规划方…...

Shell特殊位置变量以及常用内置变量总结

目录 1. 特殊的状态变量 1.1 $?&#xff08;上一个命令的退出状态&#xff09; 1.2 $$&#xff08;当前进程的 PID&#xff09; 1.3 $!&#xff08;后台进程的 PID&#xff09; 1.4 $_&#xff08;上一条命令的最后一个参数&#xff09; 2.常用shell内置变量 2.1 echo&…...

【ollama通过命令行启动后如何在网页端查看运行】

ollama通过命令行启动后如何在网页端查看运行 http://localhost:11434/...

【MySQL】初始MySQL、库与表的操作

目录 基本使用 使用案例 SQL分类 存储引擎 库的操作 字符集和校验规则 查看系统默认字符集和校验规则 查看数据库支持的字符集 查看数据库支持的字符集校验规则 指定编码常见数据库 校验规则对数据库的影响 操纵数据库 库的备份与恢复 表的操作 创建表 查看表 …...

信息学奥赛一本通 1342:【例4-1】最短路径问题

【题目描述】 平面上有n个点&#xff08;n<100&#xff09;&#xff0c;每个点的坐标均在-10000~10000之间。其中的一些点之间有连线。 若有连线&#xff0c;则表示可从一个点到达另一个点&#xff0c;即两点间有通路&#xff0c;通路的距离为两点间的直线距离。现在的任务是…...

芯片AI深度实战:基础篇之langchain

基于ollama, langchain,可以构建一个自己的知识库&#xff0c;比如这个 Build Your Own RAG App: A Step-by-Step Guide to Setup LLM locally using Ollama, Python, and ChromaDB | HackerNoon 这是因为&#xff1a; 以上范例就实现了这样一个流程&#xff1a; 系列文章&…...

Autogen_core 测试代码:test_cache_store.py

目录 原始代码测试代码代码中用到的typing注解 原始代码 from typing import Dict, Generic, Optional, Protocol, TypeVarT TypeVar("T")class CacheStore(Protocol, Generic[T]):"""This protocol defines the basic interface for store/cache o…...

AI大模型开发原理篇-1:语言模型雏形之N-Gram模型

N-Gram模型概念 N-Gram模型是一种基于统计的语言模型&#xff0c;用于预测文本中某个词语的出现概率。它通过分析一个词语序列中前面N-1个词的出现频率来预测下一个词的出现。具体来说&#xff0c;N-Gram模型通过将文本切分为长度为N的词序列来进行建模。 注意&#xff1a;这…...

Haproxy入门学习二

一、Haproxy的算法 1.haproxy通过固定参数balance指明对后端服务器的调度算法&#xff0c;其中balance参数可以配置在listen或backend选项中 2.haproxy的调度算法分为静态和动态调度算法&#xff0c;其中有些算法可以根据参数在静态和动态算法中相互转换 3.静态算法&#xff1a…...

【C++题解】1014. 编程求1+1/2+1/3+...+1/n

问题&#xff1a;1014. 编程求11/21/3…1/n 类型&#xff1a;简单循环 题目描述&#xff1a; 编程求 11/21/3⋯1/n 。 输入&#xff1a; 输入一行&#xff0c;只有一个整数 n(1≤n≤200) 。 输出&#xff1a; 输出只有一行&#xff08;这意味着末尾有一个回车符号&#x…...

Java基础知识-第14章-Java注解

1、注解(Annotation)概述 从JDK5.0开始&#xff0c;Java增加了对元数据(MetaData) 的支持&#xff0c;也就是Annotation(注解)Annotation其实就是代码里的特殊标记&#xff0c;这些标记可以在编译&#xff0c;类加载&#xff0c;运行时被读取&#xff0c;并执行相应的处理。通…...

python算法和数据结构刷题[1]:数组、矩阵、字符串

一画图二伪代码三写代码 LeetCode必刷100题&#xff1a;一份来自面试官的算法地图&#xff08;题解持续更新中&#xff09;-CSDN博客 算法通关手册&#xff08;LeetCode&#xff09; | 算法通关手册&#xff08;LeetCode&#xff09; (itcharge.cn) 面试经典 150 题 - 学习计…...

【javaweb项目idea版】蛋糕商城(可复用成其他商城项目)

该项目虽然是蛋糕商城项目&#xff0c;但是可以复用成其他商城项目或者购物车项目 想要源码的uu可点赞后私聊 技术栈 主要为&#xff1a;javawebservletmvcc3p0idea运行 功能模块 主要分为用户模块和后台管理员模块 具有商城购物的完整功能 基础模块 登录注册个人信息编辑…...

人格分裂(交互问答)-小白想懂Elasticsearch

通过交互式追问了解一个中间件 ? 啥是Elasticsearch ! 分布式搜索和分析引擎 ? 为啥是分布式搜索&#xff0c;单体难道用不了吗 ? 实际上是说这个东西可以分布式部署 ! 单机可用但扩展性差&#xff0c;分布式通过分片、副本和负载均衡实现海量数据存储与高并发处理 ? 提…...

独立开发者日刊 | Deepseek 统一多模态 AI Janus 开源 |语音秒变文章 | 免费 AI 视频答案引擎

独立开发者产品日刊&#xff0c;每日汇集 ProductHunt 热榜产品介绍&#xff0c;⚡️ 1句Slogan榨干产品灵魂&#xff0c;⚡️ 3秒 get 全球独立开发者的爆款灵感。关注小前&#xff0c;每日捕获全球产品灵感。 Jotform for Canva 标语&#xff1a;为 Canva 创建强大表单类别&a…...

1999-2020年 全国各地区-财政状况分析-一般预算收入-各项税收-个人所得税

1999-2020年 全国各地区-财政状况分析-一般预算收入-各项税收-个人所得税https://download.csdn.net/download/2401_84585615/89575946 https://download.csdn.net/download/2401_84585615/89575946 一般预算收入是指各级政府按照预算法规定&#xff0c;将预计取得的各项收入纳…...

基础项目实战——3D赛车(c++)

目录 前言一、渲染引擎二、关闭事件三、梯形绘制四、轨道绘制五、边缘绘制六、草坪绘制七、前后移动八、左右移动​九、曲线轨道​十、课山坡轨道​十一、循环轨道​十二、背景展示​十三、引入速度​十四、物品绘制​十五、课数字路障​十六、分数展示​十七、重新生成​十八、…...

AboutDialog组件的功能和用法

文章目录 1 概念介绍2 使用方法3 示例代码 我们在上一章回中介绍了AlertDialog Widget相关的内容,本章回中将介绍AboutDialog Widget.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1 概念介绍 我们在这里说的AboutDialog是一种弹出式窗口&#xff0c;和上一章回中介绍的Al…...

hdfs之读写流程

写入流程&#xff1a; 客户端Client想将文件a.txt上传至hdfs&#xff0c;首先向Namenode发送请求进行权限校验&#xff0c;Namenode通过后会计算出来三个节点&#xff0c;并将这三个节点告知客户端&#xff0c;客户端将输入进行切割成块&#xff0c;一个一个的块进行传输&…...

链表的介绍

目录 引言优缺点与链表相似的数据结构注意事项单向链表的实现基础实现创建类创建成员变量创建特殊方法 增加数据push_back方法insert方法 删除数据del_back方法del_index方法 clear方法查询数据at方法与重载的中括号运算符toArray方法indexOf方法 修改数据获取链表大小测试方法…...

背着开发板回家过年~

大家好&#xff0c;我是bug菌~ 小明&#xff0c;过年了&#xff0c; 别再死磕什么STM32底层驱动、linux平台总线驱动框架、嵌入式实时操作系统源码这些了。 你背着电脑和开发板回家&#xff0c;压根没一点实际用处。 发小们潇洒地出入各种娱乐场所&#xff0c;唱着歌&#xff0…...

Kafka 日志存储 — 磁盘存储

Kafka 依赖与磁盘来存储和缓存消息&#xff0c;采用文件追加的方式来写入消息。顺序写盘的速度快于随机写内存。 1 磁盘存储 除顺序写入外&#xff0c;Kafka中大量使用了页缓存、零拷贝等技术来进一步提升吞吐性能。 1.1 页缓存 页缓存是操作系统实现的一种磁盘缓存&#x…...

【机器学习】自定义数据集 使用tensorflow框架实现逻辑回归并保存模型,然后保存模型后再加载模型进行预测

一、使用tensorflow框架实现逻辑回归 1. 数据部分&#xff1a; 首先自定义了一个简单的数据集&#xff0c;特征 X 是 100 个随机样本&#xff0c;每个样本一个特征&#xff0c;目标值 y 基于线性关系并添加了噪声。tensorflow框架不需要numpy 数组转换为相应的张量&#xff0…...

RK3568中使用QT opencv(显示基础图像)

文章目录 一、查看对应的开发环境是否有opencv的库二、QT使用opencv 一、查看对应的开发环境是否有opencv的库 在开发板中的/usr/lib目录下查看是否有opencv的库&#xff1a; 这里使用的是正点原子的ubuntu虚拟机&#xff0c;在他的虚拟机里面已经安装好了opencv的库。 二、…...

Brave132 编译指南 Windows 篇:获取源码(六)

1. 引言 在 Brave 浏览器 132 版本的编译过程中&#xff0c;获取源代码是至关重要的第一步。源代码包含了 Brave 浏览器的所有核心功能、特性和组件的实现细节&#xff0c;是深入理解、定制和优化 Brave 的基础。通过获取和管理源代码&#xff0c;开发者能够深入探索 Brave 的…...

解决 pip install 出现 error: subprocess-exited-with-error 错误的方法

解决 pip install 出现 error: subprocess-exited-with-error 错误的方法_pip安装报错 subprocess-CSDN博客文章浏览阅读10w次&#xff0c;点赞62次&#xff0c;收藏86次。通过上述步骤&#xff0c;我们成功解决了 pip install 时出现的 error: subprocess-exited-with-error 错…...

网络安全攻防实战:从基础防护到高级对抗

&#x1f4dd;个人主页&#x1f339;&#xff1a;一ge科研小菜鸡-CSDN博客 &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; 引言 在信息化时代&#xff0c;网络安全已经成为企业、政府和个人必须重视的问题。从数据泄露到勒索软件攻击&#xff0c;每一次…...

DeepSeek大模型技术解析:从架构到应用的全面探索

一、引言 在人工智能领域&#xff0c;大模型的发展日新月异&#xff0c;其中DeepSeek大模型凭借其卓越的性能和广泛的应用场景&#xff0c;迅速成为业界的焦点。本文旨在深入剖析DeepSeek大模型的技术细节&#xff0c;从架构到应用进行全面探索&#xff0c;以期为读者提供一个…...

Deepseek的api调用报错乱码问题

最近的deepseek也是很火&#xff0c;但是在调用api的过程中也会出现一些大大小小的问题&#xff0c;所以这里也给出一种问题和他的解决方案&#xff0c;报错的类型如下图所示 API Streaming Failed Command failed with exit code 1: powershell (Get-CimInstance -ClassName W…...

.NET Core 中依赖注入的使用

ASP.NET Core中服务注入的地方 在ASP.NET Core项目中一般不需要自己创建ServiceCollection、IServiceProvider。在Program.cs的builder.Build()之前向builder.Services中注入。在Controller中可以通过构造方法注入服务。 低使用频率的服务 把Action用到的服务通过Action的参…...

Mysql Resultset 解析记录

Mysql Resultset 解析记录 结果集消息头字段定义结果数据完整spicy文件 结果集消息头 消息头由消息体长度消息序列号消息体组成&#xff1b;消息头长度为3字节&#xff0c;消息序列号长度为1字节。 结果集的消息头消息体内容为结果集的列数。 结果集消息头的spicy1格式如下&a…...