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

学习threejs,使用MeshLambertMaterial漫反射材质

👨‍⚕️ 主页: gis分享者
👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅!
👨‍⚕️ 收录于专栏:threejs gis工程师


文章目录

  • 一、🍀前言
    • 1.1 ☘️THREE.MeshLambertMaterial
      • 1.1.1 ☘️构造函数
      • 1.1.2 ☘️属性
      • 1.1.3 ☘️方法
  • 二、🍀使用MeshLambertMaterial漫反射材质
    • 1. ☘️实现思路
    • 2. ☘️代码样例


一、🍀前言

本文详细介绍如何基于threejs在三维场景中使用MeshLambertMaterial漫反射材质,亲测可用。希望能帮助到您。一起学习,加油!加油!

1.1 ☘️THREE.MeshLambertMaterial

一种非光泽表面的材质,没有镜面高光。
该材质使用基于非物理的Lambertian模型来计算反射率。 这可以很好地模拟一些表面(例如未经处理的木材或石材),但不能模拟具有镜面高光的光泽表面(例如涂漆木材)。
代码示例:
基本用法:

// 创建材质(绿色,带自发光)
const material = new THREE.MeshLambertMaterial({color: 0x00ff00,emissive: 0x004400, // 暗绿色自发光emissiveIntensity: 0.8
});// 应用材质到立方体
const geometry = new THREE.BoxGeometry();
const cube = new THREE.Mesh(geometry, material);
scene.add(cube);// 必须添加光源才能生效!
const light = new THREE.PointLight(0xffffff, 1);
light.position.set(10, 10, 10);
scene.add(light);

使用贴图:

// 加载漫反射贴图和环境遮挡贴图
const textureLoader = new THREE.TextureLoader();
const diffuseMap = textureLoader.load('textures/brick_diffuse.jpg');
const aoMap = textureLoader.load('textures/brick_ao.jpg');// 创建材质
const material = new THREE.MeshLambertMaterial({map: diffuseMap,aoMap: aoMap,aoMapIntensity: 0.5 // 调整环境遮挡强度
});

1.1.1 ☘️构造函数

MeshLambertMaterial( parameters : Object )
parameters - (可选)用于定义材质外观的对象,具有一个或多个属性。 材质的任何属性都可以从此处传入(包括从Material继承的任何属性)。

属性color例外,其可以作为十六进制字符串传递,默认情况下为 0xffffff(白色),内部调用Color.set(color)。

1.1.2 ☘️属性

共有属性请参见其基类Material。

属性类型默认值描述
colorTHREE.Color0xffffff材质基础颜色,接受十六进制、RGB 字符串或颜色名称。
emissiveTHREE.Color0x000000自发光颜色(不受光照影响),常用于模拟光源或发光体。
emissiveIntensitynumber1自发光强度(0.0 ~ 1.0),需配合 emissive 使用。
mapTHREE.Texturenull漫反射贴图(表面颜色纹理)。
lightMapTHREE.Texturenull光照贴图(预计算光照信息),需第二组 UV 坐标。
aoMapTHREE.Texturenull环境遮挡贴图(增强阴影细节),需第二组 UV 坐标。
specularMapTHREE.Texturenull无效属性(Lambert 模型无镜面反射)。保留仅为兼容性。
alphaMapTHREE.Texturenull透明度贴图(黑色透明,白色不透明)。
envMapTHREE.Texturenull环境贴图(反射周围环境),需场景设置立方体贴图。
wireframebooleanfalse是否以线框模式渲染几何体。
transparentbooleanfalse是否启用透明度(需配合 opacity)。
opacitynumber1不透明度(0.0 ~ 1.0),需 transparent: true 生效。
fogbooleantrue是否受场景雾效 (THREE.Fog) 影响。

.alphaMap : Texture
alpha贴图是一张灰度纹理,用于控制整个表面的不透明度。(黑色:完全透明;白色:完全不透明)。 默认值为null。

仅使用纹理的颜色,忽略alpha通道(如果存在)。 对于RGB和RGBA纹理,WebGL渲染器在采样此纹理时将使用绿色通道, 因为在DXT压缩和未压缩RGB 565格式中为绿色提供了额外的精度。 Luminance-only以及luminance/alpha纹理也仍然有效。

.aoMap : Texture
该纹理的红色通道用作环境遮挡贴图。默认值为null。aoMap需要第二组UV。

.aoMapIntensity : Float
环境遮挡效果的强度。默认值为1。零是不遮挡效果。

.bumpMap : Texture
用于创建凹凸贴图的纹理。黑色和白色值映射到与光照相关的感知深度。凹凸实际上不会影响对象的几何形状,只影响光照。如果定义了法线贴图,则将忽略该贴图。

.bumpScale : Float
凹凸贴图会对材质产生多大影响。典型范围是0-1。默认值为1。

.color : Color
材质的颜色(Color),默认值为白色 (0xffffff)。

.combine : Integer
如何将表面颜色的结果与环境贴图(如果有)结合起来。

选项为THREE.MultiplyOperation(默认值),THREE.MixOperation, THREE.AddOperation。如果选择多个,则使用.reflectivity在两种颜色之间进行混合。

.displacementMap : Texture
位移贴图会影响网格顶点的位置,与仅影响材质的光照和阴影的其他贴图不同,移位的顶点可以投射阴影,阻挡其他对象, 以及充当真实的几何体。位移纹理是指:网格的所有顶点被映射为图像中每个像素的值(白色是最高的),并且被重定位。

.displacementScale : Float
位移贴图对网格的影响程度(黑色是无位移,白色是最大位移)。如果没有设置位移贴图,则不会应用此值。默认值为1。

.displacementBias : Float
位移贴图在网格顶点上的偏移量。如果没有设置位移贴图,则不会应用此值。默认值为0。

.emissive : Color
材质的放射(光)颜色,基本上是不受其他光照影响的固有颜色。默认为黑色。

.emissiveMap : Texture
设置放射(发光)贴图。默认值为null。放射贴图颜色由放射颜色和强度所调节。 如果你有一个放射贴图,请务必将放射颜色设置为黑色以外的其他颜色。

.emissiveIntensity : Float
放射光强度。调节发光颜色。默认为1。

.envMap : Texture
环境贴图。默认值为null。

.flatShading : Boolean
定义材质是否使用平面着色进行渲染。默认值为false。

.fog : Boolean
材质是否受雾影响。默认为true。

.lightMap : Texture
光照贴图。默认值为null。lightMap需要第二组UV。

.lightMapIntensity : Float
烘焙光的强度。默认值为1。

.map : Texture
颜色贴图。可以选择包括一个alpha通道,通常与.transparent 或.alphaTest。默认为null。

.normalMap : Texture
用于创建法线贴图的纹理。RGB值会影响每个像素片段的曲面法线,并更改颜色照亮的方式。法线贴图不会改变曲面的实际形状,只会改变光照。 如果材质具有使用左手惯例创作的法线贴图,则应取反 normalScale 的 y 分量以补偿不同的手性。

.normalMapType : Integer
法线贴图的类型。

选项为THREE.TangentSpaceNormalMap(默认)和THREE.ObjectSpaceNormalMap。

.normalScale : Vector2
法线贴图对材质的影响程度。典型范围是0-1。默认值是Vector2设置为(1,1)。

.reflectivity : Float
环境贴图对表面的影响程度; 见.combine。默认值为1,有效范围介于0(无反射)和1(完全反射)之间。

.refractionRatio : Float
空气的折射率(IOR)(约为1)除以材质的折射率。它与环境映射模式THREE.CubeRefractionMapping 和THREE.EquirectangularRefractionMapping一起使用。 空气的折射率 (IOR)(大约 1)除以材料的折射率。它与环境映射模式 THREE.CubeRefractionMapping 一起使用。折射率不应超过1。默认值为0.98。

.specularMap : Texture
材质使用的高光贴图。默认值为null。

.wireframe : Boolean
将几何体渲染为线框。默认值为false(即渲染为平面多边形)。

.wireframeLinecap : String
定义线两端的外观。可选值为 ‘butt’,‘round’ 和 ‘square’。默认为’round’。

该属性对应2D Canvas lineJoin属性, 并且会被WebGL渲染器忽略。

.wireframeLinejoin : String
定义线连接节点的样式。可选值为 ‘round’, ‘bevel’ 和 ‘miter’。默认值为 ‘round’。

该属性对应2D Canvas lineJoin属性, 并且会被WebGL渲染器忽略。

.wireframeLinewidth : Float
控制线框宽度。默认值为1。

由于OpenGL Core Profile与 大多数平台上WebGL渲染器的限制,无论如何设置该值,线宽始终为1。

1.1.3 ☘️方法

共有方法请参见其基类Material。

二、🍀使用MeshLambertMaterial漫反射材质

1. ☘️实现思路

  • 1、初始化renderer渲染器。
  • 2、初始化Scene三维场景scene。
  • 3、初始化camera相机,定义相机位置 camera.position.set,设置相机方向camera.lookAt。
  • 4、创建THREE.AmbientLight环境光源ambientLight,设置环境光ambientLight颜色,scene场景加入环境光源ambientLight。创建THREE.SpotLight聚光灯光源spotLight,设置聚光灯光源位置和投影,scene场景加入spotLight。
  • 5、加载几何模型:创建二维平面网格对象groundMesh,设置groundMesh的旋转角度和位置,scene场景加入groundMesh。创建THREE.MeshLambertMaterial漫反射材质meshMaterial,使用该材质创建立方体网格对象cube、球体网格对象sphere、二维平面网格对象plane,设置sphere的位置,cube和plane的位置设置为sphere的位置,场景scene中添加cube。定义render方法,实现立方体cube、球体sphere和二维平面plane的旋转动画。具体代码参考下面代码样例。
  • 6、加入gui控件,控制meshMaterial材质不同参数效果。加入stats监控器,监控帧数信息。

2. ☘️代码样例

<!DOCTYPE html><html><head><title>学习threejs,使用MeshLambertMaterial漫反射材质</title><script type="text/javascript" src="../libs/three.js"></script><script type="text/javascript" src="../libs/stats.js"></script><script type="text/javascript" src="../libs/dat.gui.js"></script><script type="text/javascript" src="../libs/CanvasRenderer.js"></script><script type="text/javascript" src="../libs/Projector.js"></script><style>body {margin: 0;overflow: hidden;}</style>
</head>
<body><div id="Stats-output">
</div>
<!-- Div which will hold the Output -->
<div id="WebGL-output">
</div><!-- Js 代码块 -->
<script type="text/javascript">// 初始化function init() {var stats = initStats();// 创建三维场景var scene = new THREE.Scene();// 创建相机var camera = new THREE.PerspectiveCamera(45, window.innerWidth / window.innerHeight, 0.1, 1000);// 创建渲染器,设置颜色和大小var renderer;var webGLRenderer = new THREE.WebGLRenderer();webGLRenderer.setClearColor(new THREE.Color(0xEEEEEE, 1.0));webGLRenderer.setSize(window.innerWidth, window.innerHeight);webGLRenderer.shadowMapEnabled = true;// var canvasRenderer = new THREE.CanvasRenderer();// canvasRenderer.setSize(window.innerWidth, window.innerHeight);renderer = webGLRenderer;var groundGeom = new THREE.PlaneGeometry(100, 100, 4, 4);var groundMesh = new THREE.Mesh(groundGeom, new THREE.MeshBasicMaterial({color: 0x555555}));groundMesh.rotation.x = -Math.PI / 2;groundMesh.position.y = -20;scene.add(groundMesh);var sphereGeometry = new THREE.SphereGeometry(14, 20, 20);var cubeGeometry = new THREE.BoxGeometry(15, 15, 15);var planeGeometry = new THREE.PlaneGeometry(14, 14, 4, 4);var meshMaterial = new THREE.MeshLambertMaterial({color: 0x7777ff});var sphere = new THREE.Mesh(sphereGeometry, meshMaterial);var cube = new THREE.Mesh(cubeGeometry, meshMaterial);var plane = new THREE.Mesh(planeGeometry, meshMaterial);// 设置球体位置sphere.position.x = 0;sphere.position.y = 3;sphere.position.z = 2;cube.position = sphere.position;plane.position = sphere.position;// 添加立方体scene.add(cube);// 设置相机位置和方向camera.position.x = -20;camera.position.y = 30;camera.position.z = 40;camera.lookAt(new THREE.Vector3(10, 0, 0));// 创建环境光源,scene场景添加环境光var ambientLight = new THREE.AmbientLight(0x0c0c0c);scene.add(ambientLight);// 创建聚光灯光源spotLight,scene场景添加spotLight,设置spotLight的位置和投影var spotLight = new THREE.SpotLight(0xffffff);spotLight.position.set(-30, 60, 60);spotLight.castShadow = true;scene.add(spotLight);// 渲染器绑定html要素document.getElementById("WebGL-output").appendChild(renderer.domElement);var step = 0;var controls = new function () {this.rotationSpeed = 0.02;this.bouncingSpeed = 0.03;this.opacity = meshMaterial.opacity;this.transparent = meshMaterial.transparent;this.overdraw = meshMaterial.overdraw;this.visible = meshMaterial.visible;this.emissive = meshMaterial.emissive.getHex();this.ambient = meshMaterial.ambient.getHex();this.side = "front";this.color = meshMaterial.color.getStyle();this.wrapAround = false;this.wrapR = 1;this.wrapG = 1;this.wrapB = 1;this.selectedMesh = "cube";};var gui = new dat.GUI();var spGui = gui.addFolder("Mesh");spGui.add(controls, 'opacity', 0, 1).onChange(function (e) {meshMaterial.opacity = e});spGui.add(controls, 'transparent').onChange(function (e) {meshMaterial.transparent = e});spGui.add(controls, 'visible').onChange(function (e) {meshMaterial.visible = e});spGui.addColor(controls, 'ambient').onChange(function (e) {meshMaterial.ambient = new THREE.Color(e)});spGui.addColor(controls, 'emissive').onChange(function (e) {meshMaterial.emissive = new THREE.Color(e)});spGui.add(controls, 'side', ["front", "back", "double"]).onChange(function (e) {console.log(e);switch (e) {case "front":meshMaterial.side = THREE.FrontSide;break;case "back":meshMaterial.side = THREE.BackSide;break;case "double":meshMaterial.side = THREE.DoubleSide;break;}meshMaterial.needsUpdate = true;});spGui.addColor(controls, 'color').onChange(function (e) {meshMaterial.color.setStyle(e)});spGui.add(controls, 'selectedMesh', ["cube", "sphere", "plane"]).onChange(function (e) {scene.remove(plane);scene.remove(cube);scene.remove(sphere);switch (e) {case "cube":scene.add(cube);break;case "sphere":scene.add(sphere);break;case "plane":scene.add(plane);break;}scene.add(e);});spGui.add(controls, 'wrapAround').onChange(function (e) {meshMaterial.wrapAround = e;meshMaterial.needsUpdate = true;});spGui.add(controls, 'wrapR', 0, 1).step(0.01).onChange(function (e) {meshMaterial.wrapRGB.x = e;});spGui.add(controls, 'wrapG', 0, 1).step(0.01).onChange(function (e) {meshMaterial.wrapRGB.y = e;});spGui.add(controls, 'wrapB', 0, 1).step(0.01).onChange(function (e) {meshMaterial.wrapRGB.z = e;});render();function render() {stats.update();cube.rotation.y = step += 0.01;plane.rotation.y = step;sphere.rotation.y = step;requestAnimationFrame(render);renderer.render(scene, camera);}function initStats() {var stats = new Stats();stats.setMode(0);stats.domElement.style.position = 'absolute';stats.domElement.style.left = '0px';stats.domElement.style.top = '0px';document.getElementById("Stats-output").appendChild(stats.domElement);return stats;}}window.onload = init;
</script>
</body>
</html>

效果如下:
在这里插入图片描述

相关文章:

学习threejs,使用MeshLambertMaterial漫反射材质

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言1.1 ☘️THREE.MeshLambertMaterial…...

P41-指针进阶1、2

1.字符指针 2.数组指针 3.指针数组 4.数组传参和指针传参 5.函数指针 6.函数指针数组 7.指向函数指针数组的指针 8.回调函数 9.指针和数组面试题的解析 指针的主题&#xff0c;我们在初级阶段的《指针》章节已经接触过了&#xff0c;我们知道了指针的概念 1.指针就是个…...

旅游类小程序界面设计

产品概述 艾啦游是一款互联网旅游类小程序&#xff0c;致力于国内精品旅游&#xff0c;以及拥有自由行、专属热榜单、出行攻略等诸多功能&#xff0c;汇聚了许多国内的人气景点&#xff0c;与诸多城市的酒店也保持合作&#xff0c;打造一体式旅行服务&#xff0c;更有不断上新…...

探索具身多模态大模型:开发、数据集和未来方向(下)

25年2月来自广东人工智能和数字经济实验室、深圳大学、巴黎理工学院和巴黎高等师范学院、中山大学的论文“Exploring Embodied Multimodal Large Models: Development, Datasets, and Future Directions”。 近年来&#xff0c;具身多模态大模型 (EMLM) 因其在复杂的现实环境中…...

14 结构体

结构体 结构体是什么&#xff1f; 在前面我们学习过基础的数据类型int float char 等&#xff0c;都只能用来表示基础的数据类型&#xff0c;那么要怎么来表示复杂的数据类型呢&#xff1f; 比如学生信息&#xff1a; 学号姓名性别年龄总分数100maye男18666101椰汁女19555 …...

如何配置 Docker 以实现无需 sudo 使用

1. 背景知识&#xff1a;为什么需要 sudo&#xff1f; Docker 是一个容器化平台&#xff0c;其核心组件包括&#xff1a; Docker 守护进程&#xff08;dockerd&#xff09;&#xff1a;负责管理容器的创建、运行和销毁。Docker CLI&#xff1a;用户通过命令行工具&#xff08…...

嵌入式开发之STM32学习笔记day06

基于STM32F103C8T6的开发实践——从入门到精通01 1. 引言 STM32系列微控制器是STMicroelectronics推出的一款高性能、低功耗的32位微控制器&#xff0c;广泛应用于嵌入式系统中。STM32F103C8T6是其中非常受欢迎的一款&#xff0c;凭借其强大的性能、丰富的外设接口和低廉的价格…...

openocd C#桌面工具

文章目录 简介一、主界面二、文件列表三、rtl介绍四、虚拟示波器1、画线2、画点3、合并显示4、测试代码简介 基于廉价9.9包邮的DAP-Link,在IAR和Keil中下载和调试都没毛病。 可是不能单独使用。单独烧录固件用不了,也不能同jlink一样打印日志和显示波形。 openocd开源工具能…...

goland小问题报错及解决

报错信息&#xff1a; cannot use rw (variable of type *populateResponse) as ResponseWriter value in argument to t.fh.ServeHTTP: *populateResponse does not implement ResponseWriter (missing method Fprintf) cannot use rw (variable of type *http2responseWrite…...

AtCoder Beginner Contest 397 A - D题解

Tasks - OMRON Corporation Programming Contest 2025 (AtCoder Beginner Contest 397) 本文为 AtCoder Beginner Contest 397 A - D题解 题目A: 代码(C): #include <bits/stdc.h>int main() {double n;std::cin >> n;if (n > 38.0) {std::cout << 1;}…...

18年老牌软件,完美解锁pro!

很多小伙伴在学习、工作中都喜欢使用思维导图来整理和记录自己的思路&#xff0c;通过图形化的方式展示复杂概念和关系&#xff0c;使信息更加清晰易懂&#xff0c;有助于理解和记忆&#xff1b;其次&#xff0c;分层次和分类别的信息结构也能够快速理清思路&#xff0c;突出重…...

Power Apps 技术分享:画布应用使用表单控件

前言 表单控件&#xff0c;是画布应用里一个非常好用的控件&#xff0c;我们今天简单介绍下&#xff0c;如何使用这个控件。 正文 1.首先&#xff0c;我们需要有一个数据源&#xff0c;我们这里用上一篇博客新建的数据源&#xff0c;如下图&#xff1a; 2.新建一个页面&#xf…...

视频转音频, 音频转文字

Ubuntu 24 环境准备 # 系统级依赖 sudo apt update && sudo apt install -y ffmpeg python3-venv git build-essential python3-dev# Python虚拟环境 python3 -m venv ~/ai_summary source ~/ai_summary/bin/activate核心工具链 工具用途安装命令Whisper语音识别pip …...

ZLMediaKit源码分析——[1] 开篇:onceToken源码分析

系列文章目录 第一篇 基于SRS 的 WebRTC 环境搭建 第二篇 基于SRS 实现RTSP接入与WebRTC播放 第三篇 centos下基于ZLMediaKit 的WebRTC 环境搭建 第四篇 WebRTC学习一:获取音频和视频设备 第五篇 WebRTC学习二:WebRTC音视频数据采集 第六篇 WebRTC学习三:WebRTC音视频约束 …...

EasyRTC嵌入式音视频通话SDK:微信生态支持、轻量化架构与跨平台兼容性(Linix/Windows/ARM/Android/iOS/LiteOS)

随着WebRTC技术的不断发展&#xff0c;实时音视频通信在各个领域的应用越来越广泛。EasyRTC嵌入式音视频通话SDK作为一款基于WebRTC技术的实时通信解决方案&#xff0c;凭借其强大的功能和灵活的集成能力&#xff0c;受到了越来越多开发者的关注。 一、系统架构设计 纯C语言开…...

Python中使用vlc库实现视频播放功能

文章目录 前言1. 环境准备1.1Python安装1.2选择Python开发环境1.3安装必要库 2. 基础播放示例3. 常用播放控制功能4. 事件监听5. 播放网络流媒体6. 结合 GUI 库制作视频播放器&#xff08;以 Tkinter 为例&#xff09; 前言 本教程主要包含打开文件、播放和停止按钮&#xff0…...

Elasticsearch面试题

以下是150道Elasticsearch面试题及其详细回答&#xff0c;涵盖了Elasticsearch的基础知识、配置与优化、查询操作、集群管理、性能调优等多个方面&#xff0c;每道题目都尽量详细且简单易懂&#xff1a; Elasticsearch基础概念类 1. 什么是Elasticsearch&#xff1f; Elastics…...

Linux上位机开发实战(qt编译之谜)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 很多同学都喜欢用IDE&#xff0c;也能理解。因为不管是visual studio qt插件&#xff0c;还是qt creator其实都帮我们做了很多额外的工作。这里面最…...

SpringBoot3+Druid+MybatisPlus多数据源支持,通过@DS注解配置Service/Mapper/Entity使用什么数据源

在 Spring Boot 3 中结合 Druid 和 MyBatis-Plus 实现多数据源支持&#xff0c;并通过 DS 注解动态切换数据源&#xff0c;可以按照以下步骤进行配置&#xff1a; 官方文档&#xff1a;多数据源支持 | MyBatis-Plus 1. 引入依赖 在 pom.xml 中添加以下依赖&#xff1a; <…...

Java学习------内部类

1. 定义 定义在一个类中的类 2. 使用时机 当一个类需要用到另一个类&#xff0c;并且两个类的联系比较密切时就需要使用内部类内部类可以访问外部类的私有成员&#xff0c;这样可以将相关的类和接口隐藏在外部类的内部&#xff0c;提高封装性匿名内部类是没有名字的类&#…...

【QA】建造者模式在Qt有哪些应用

#设计模式 #Qt 一、QDomDocument&#xff08;XML 文档构建&#xff09; 模式角色&#xff1a; Builder&#xff1a;QDomDocument 本身Product&#xff1a;XML 文档对象Director&#xff1a;用户代码通过 QDomDocument 逐步构建文档结构 示例代码&#xff1a; QDomDocument…...

uniapp 多环境配置打包,比较优雅的解决方案,全网相对优解

uniapp 多环境配置打包&#xff0c;比较优雅的解决方案&#xff0c;全网相对优解 读取.env.[development|test|staging|production]配置文件进行打包&#xff0c;最终效果如下图可以看到多个环境&#xff0c; 并且我们可以自定义更多的环境配置 前言 由于uniapp的hbuilder开发…...

【量化科普】Liquidity,流动性

【量化科普】Liquidity&#xff0c;流动性 &#x1f680;量化软件开通 &#x1f680;量化实战教程 在金融市场中&#xff0c;流动性&#xff08;Liquidity&#xff09;是一个至关重要的概念。它指的是资产能够以多快的速度被买入或卖出而不显著影响其价格的能力。高流动性的…...

qt介绍图表 charts 一

qt chartsj基于Q的Graphics View框架&#xff0c;其核心组件是QChartView和QChart.QChartView是一个显示图表的独立部件&#xff0c;基类为QGraphicsView.QChar类管理图表的序列&#xff0c;图例和轴示意图。 绘制一个cos和sin曲线图&#xff0c;效果如下 实现代码 #include…...

如何图像去噪?(一)

喜欢可以在我的主页订阅专栏哟&#xff0c;至少更新6年~~&#xff0c;更到我上大学也可能会继续更~~ 第一章 图像去噪的基础知识与核心概念 1.1 图像噪声的数学模型与物理成因 定义扩展&#xff1a; 图像噪声是信号采集、传输或存储过程中引入的随机干扰&#xff0c;其本质为…...

【数据库】Data Model(数据模型)数据模型分析

理解图片中的 Data Model&#xff08;数据模型&#xff09;是学习数据库设计和应用程序开发的重要一步。作为初学者&#xff0c;你可以通过比喻和简单的解释来理解这些概念以及它们之间的联系。以下是对图片中数据模型的详细分析&#xff0c;以及如何理解它们之间的关系。 1. 数…...

win10 c++ VsCode 配置PCL open3d并显示

win10 c VsCode配置PCL open3d并显示 一、效果图二、配置步骤2.1 安装vscode2.2 pcl-open3d配置2.3 vscode中设置 三、测试代码四、注意事项及后续 一、效果图 二、配置步骤 2.1 安装vscode vscode下载链接 下载中文插件、c相关插件 2.2 pcl-open3d配置 1&#xff09;下载…...

Flask多参数模版使用

需要建立目录templates&#xff1b; 把建好的html文件放到templates目录里面&#xff1b; 约定好参数名字&#xff0c;单个名字可以直接使用&#xff1b;多参数使用字典传递&#xff1b; 样例&#xff1a; from flask import render_template # 模板 (Templates) #Flask 使用…...

python中a is None 和 a==None有区别吗

在 Python 中&#xff0c;a is None 和 a None 的区别如下&#xff1a; 1. a is None 这是身份&#xff08;identity&#xff09;比较&#xff0c;用于检查 a 是否就是 None 这个对象。None 是 Python 的单例对象&#xff0c;意味着在 Python 运行过程中&#xff0c;所有 No…...

Excel(函数篇):COUNTIF与CONUTIFS函数、SUMIF与SUMIFS函数、ROUND函数、MATCH与INDEX函数、混合引用与条件格式

目录 COUNTIF和COUNTIFS函数COUNTIF函数COUNTIFS函数SUMIF和SUMIFS函数SUMIF函数SUMIFS函数SUMIFS函数与控件实现动态年月汇总ROUND、ROUNDUP、ROUNDDOWN函数单元格混合引用条件格式与公式,标记整行数据MATCH和INDEX函数COUNTIF和COUNTIFS函数 COUNTIF函数 统计下“苏州”出现…...

C语言及内核开发中的回调机制与设计模式分析

在C语言以及操作系统内核开发中,回调机制是一种至关重要的编程模式。它通过注册框架和定义回调函数,实现了模块间的解耦和灵活交互,为系统的扩展性和可维护性提供了有力支持。本文将深入探讨这种机制的工作原理、应用场景以及与设计模式的关联。 一、回调机制的核心概念 (…...

SAP WORKFLOW BUSINESS PROCESS AUTOMATION

SAP WORKFLOW BUSINESS PROCESS AUTOMATION...

它,让机器人与HMI屏无缝对接

随着工业自动化向智能化发展&#xff0c;机器人与HMI屏的通信变得至关重要。本文将为您介绍一款创新的解决方案&#xff0c;它打破了通信协议的壁垒&#xff0c;实现机器人与HMI屏的无缝连接。 随着工业自动化向智能化的迈进&#xff0c;生产制造业正加速引入大量工业机器人以替…...

Vala语言基础知识-源文件和编译

源文件和编译 Vala代码‌以.vala为扩展名。与Java等语言不同&#xff0c;Vala‌不强制要求严格的文件结构‌——它没有类似Java的"包"&#xff08;package&#xff09;或"类文件"&#xff08;class file&#xff09;的概念&#xff0c;而是通过文件内的文本…...

《mc百科》小引

现在的年轻人&#xff0c;不是玩农药&#xff0c;就是在打和平&#xff0c;几乎每到街上&#xff0c;想就看见农药上号的&#xff0c;但这些游戏&#xff0c;虽然宜人&#xff0c;但随时都能让人异化。 但有一种游戏&#xff0c;可以说几乎涵盖了所有文化。早其自由度高达999%…...

java泛型通配符?及上下界(extends,super)保证安全性、灵活性、可读性

在 Java 中&#xff0c;泛型通配符&#xff08;?&#xff09;用于表示未知类型&#xff0c;通常用于增强泛型的灵活性。通配符可以与上下限结合使用&#xff0c;以限制泛型的范围。以下是通配符及上下限的使用示例&#xff1a; 1. 无界通配符 (?) 无界通配符表示可以接受任意…...

PyQt6内嵌http.server Web 和Flask Web服务器方法详解

PyQt6 可以内嵌一个简单的 Web 服务器。虽然 PyQt6 本身不提供直接的 Web 服务器功能&#xff0c;但可以结合 Python 的标准库&#xff08;如 http.server&#xff09;或其他 Web 框架&#xff08;如 Flask、FastAPI 等&#xff09;来实现。 示例&#xff1a;使用 http.server…...

【ProjectDiscovery 生态中核心工具 Subfinder、Httpx、Katana 和 Nuclei 的基础使用教程】

ProjectDiscovery 生态中核心工具 Subfinder、Httpx、Katana 和 Nuclei 的基础使用教程 一、Subfinder&#xff1a;子域名发现工具安装基础使用 二、Httpx&#xff1a;HTTP 探测与指纹识别安装基础使用 三、Katana&#xff1a;网络爬虫工具安装基础使用 四、Nuclei&#xff1a;…...

【Linux系统】进程地址空间详解

Linux系列 文章目录 Linux系列前言一、地址空间的区域划分二、进程地址空间的引入2.1 地址空间的概念2.2 地址空间2.3 进程地址空间的优点 三、页表3.1 区域权限管理3.2 惰性加载 总结 前言 进程地址空间是操作系统为每个运行中的进程分配的一个虚拟内存视图&#xff0c;它是所…...

使用Dependency Walker和Beyond Compare快速排查dll动态库损坏或被篡改的问题

目录 1、问题描述 2、用Dependency Walker工具打开qr.dll库&#xff0c;查看库与库的依赖关系以及接口调用情况&#xff0c;定位问题 3、使用Beyond Compare工具比较一下正常的msvcr100d.dll和问题msvcr100d.dll的差异 4、最后 C软件异常排查从入门到精通系列教程&#xff…...

蓝桥杯 刷题统计

问题描述 小明决定从下周一开始努力刷题准备蓝桥杯竞赛。他计划周一至周五每天 做 a 道题目, 周六和周日每天做 b 道题目。请你帮小明计算, 按照计划他将在 第几天实现做题数大于等于 n 题? 输入格式 输入一行包含三个整数 a,b和 n. 输出格式 输出一个整数代表天数。 样…...

019-RSA

RSA 一、RSA技术原理与流程&#xff08;附流程图&#xff09; 密钥生成流程 graph TDA[选择大质数p/q] --> B[计算np*q]B --> C[计算 “φ&#xff08;n&#xff09;p-1*q-1”]C --> D[选择e与φ&#xff08;n&#xff09;互质]D --> E[计算d满足ed≡1 mod φ&am…...

《 C++ 点滴漫谈: 三十一 》函数重载不再复杂:C++ 高效调试与性能优化实战

摘要 本篇博客深入探讨了 C 中的函数重载及其调试技巧。首先&#xff0c;介绍了函数重载的基本概念及其在 C 编程中的应用&#xff0c;强调了如何通过函数重载提高代码的灵活性和可读性。接着&#xff0c;我们讨论了函数重载的常见问题&#xff0c;如二义性、隐式类型转换和重…...

2024年消费者权益数据分析

&#x1f4c5; 2024年315消费者权益数据分析 数据见&#xff1a;https://mp.weixin.qq.com/s/eV5GoionxhGpw7PunhOVnQ 一、引言 在数字化时代&#xff0c;消费者维权数据对于市场监管、商家诚信和行业发展具有重要价值。本文基于 2024年315平台线上投诉数据&#xff0c;采用数…...

uniapp APP权限弹框

效果图 第一步 新建一个页面&#xff0c;设置透明 {"path": "pages/permissionDisc/permissionDisc","style": {"navigationBarTitleText": "","navigationStyle": "custom","app-plus": {&…...

【Weaviate】数据库:向量存储与搜索的新纪元

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《深度探秘&#xff1a;AI界的007》 &#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目录 一、引言 1、什么是Weaviate 2、Weaviate 能做什么&#xff1f; …...

机器学习之激活函数

什么是激活函数 激活函数是神经网络的关键组件&#xff0c;作用于神经元输出。神经元汇总输入并计算净输入值&#xff0c;激活函数将其非线性变换&#xff0c;生成神经元最终输出&#xff0c;该输出作为后续神经元输入在网络中传播。 为什么需要激活函数 引入非线性 无激活…...

ACWing:178. 第K短路 (A*算法)

178. 第K短路 - AcWing题库 ac代码&#xff1a; #include<iostream> #include<cstring> #include<queue> using namespace std; const int N1010; const int M20020; struct node{int d,end,d1;bool operator <(const node &x)const{return d>x.d…...

Windows 图形显示驱动开发-WDDM 3.0功能- 硬件翻转队列(一)

WDDM 3.0 之前的翻转队列模型 许多新式显示控制器支持对按顺序显示的多个帧排队的能力。 从 WDDM 2.1 开始&#xff0c;OS 支持将在下一个 VSync 中显示的多个未完成的翻转覆盖请求。 显示微型端口驱动程序 (KMD) 通过 DXGK_DRIVERCAPS 中的 MaxQueuedMultiPlaneOverlayFlipVS…...

本地仓库设置

将代码仓库初始化为远程仓库&#xff0c;主要涉及在服务器上搭建 Git 服务&#xff0c;并将本地代码推送到服务器上。以下是详细的步骤&#xff1a; 1. 选择服务器 首先&#xff0c;你需要一台服务器作为代码托管的远程仓库。服务器可以是本地服务器、云服务器&#xff0c;甚…...