WebGL-Vue3-TS-Threejs:基础练习 / Javascript 3D library / demo
一、理解Three.js
Three.js是一个用于WebGL渲染的JavaScript库。它提供了一组工具和类,用于创建和渲染3D图形和动画。简单理解(并不十分准确),Three.js之于WebGL,好比,jQuery.js之于JavaScript。
OpenGL 是一个跨平台3D/2D的绘图标准,WebGL则是OpenGL 在浏览器上的一个实现。
web前端开发人员可以直接用WebGL接口进行编程,但 WebGL只是非常基础的绘图API,需要编程人员有很多的数学知识、绘图知识才能完成3D编程任务,而且代码量巨大。Threejs 对 WebGL 进行了封装,让前端开发人员在不需要掌握很多数学知识和绘图知识的情况下,也能够轻松进行web 3D开发,降低了门槛,同时大大提升了效率。
WebGL:开始学习 / 理解 WebGL / WebGL 需要掌握哪些知识 / 应用领域 / 前端值得学WebGL吗_webgl培训-CSDN博客
Three.js的主要特点
序号 | 特点 | 描述 |
1 | 简单易用 | 它的API非常友好,易于理解和使用。 |
2 | 兼容性强 | 支持多种浏览器和设备,不需要其他插件和软件。 |
3 | 功能强大 | 提供了广泛的3D渲染功能,包括材质、灯光、相机等多种元素。 |
4 | 社区活跃 | 拥有庞大的开发者社区,可以找到大量的示例代码和教程。 |
通过Three.js,开发者可以快速创建并展示3D模型、场景、动画等内容。它支持多种文件格式,如obj、fbx、glb等,可以轻松导入和使用。同时,它还支持VR和AR等技术,可以创建更加沉浸式的体验。
关键词:场景、相机、光源、材质、贴图、建模、着色
二、文档
ThingJS 文档中心
https://threejs.org/
Three.js中文网
三、项目介绍
vue3 + ts + vite + three.js
四、安装
pnpm add three
pnpm add @types/three
"three": "^0.158.0",
"@types/three": "^0.154.0",
五、导入核心库,获取场景
<template><div class="container"><span>threejs</span></div>
</template><script setup lang="ts">
import * as THREE from 'three'
const scene = new THREE.Scene()
console.log('scene:', scene)</script><style scoped lang="less">
</style>
六、基础练习
6.1、绘制一条直线
<template><div ref="container" id="container" style="width: 200px;height: 200px;"></div>
</template><script setup lang="ts">
import * as THREE from 'three'
const container:any = ref(null)
onMounted(()=>{// 创建场景const scene = new THREE.Scene();scene.background = new THREE.Color(0xadacad);// 创建相机const camera = new THREE.PerspectiveCamera(45,container.value.clientWidth / container.value.clientHeight,0.1,100);camera.position.set(0, 0, 3);// 创建渲染器const renderer = new THREE.WebGLRenderer();console.log('24', container)renderer.setSize(container.value.clientWidth, container.value.clientHeight);container.value.appendChild(renderer.domElement);// 定义顶点数据const positions = [-1, 0, 0,0, 1, 0,];// 创建一个 BufferGeometry 对象const geometry = new THREE.BufferGeometry();const positionAttribute = new THREE.Float32BufferAttribute(positions, 3);geometry.setAttribute('position', positionAttribute);// 创建一个 LineLoop 对象const material = new THREE.LineBasicMaterial({ color: 0xf00, linewidth: 5 });const line = new THREE.LineLoop(geometry, material);// 将线条添加到场景中scene.add(line);// 开始渲染循环function render() {renderer.render(scene, camera);requestAnimationFrame(render);}render();
})
</script><style scoped lang="less">
</style>
6.2、通过直线,绘制画一个正方形
本例中,我们首先创建了一个 div
元素引用,它将用作 three.js 的渲染器容器。然后创建了场景、相机和渲染器,并将渲染器的输出添加到页面中。
接着,我们定义了闭合线条的顶点数据,并使用 THREE.BufferGeometry
创建了几何体。然后我们使用 THREE.LineLoop
创建了线条对象,并将其添加到场景中。
<template><div ref="container" id="container" style="width: 200px;height: 200px;"></div>
</template><script setup lang="ts">
import * as THREE from 'three'
const container:any = ref(null)
onMounted(()=>{// 创建场景const scene = new THREE.Scene();scene.background = new THREE.Color(0xadacad);// 创建相机const camera = new THREE.PerspectiveCamera(45,container.value.clientWidth / container.value.clientHeight,0.1,100);camera.position.set(0, 0, 3);// 创建渲染器const renderer = new THREE.WebGLRenderer();console.log('24', container)renderer.setSize(container.value.clientWidth, container.value.clientHeight);container.value.appendChild(renderer.domElement);// 定义顶点数据const positions = [-1, 0, 0,0, 1, 0,1, 0, 0,0, -1, 0,-1, 0, 0,];// 创建一个 BufferGeometry 对象const geometry = new THREE.BufferGeometry();const positionAttribute = new THREE.Float32BufferAttribute(positions, 3);geometry.setAttribute('position', positionAttribute);// 创建一个 LineLoop 对象const material = new THREE.LineBasicMaterial({ color: 0xf00, linewidth: 5 });const line = new THREE.LineLoop(geometry, material);// 将线条添加到场景中scene.add(line);// 开始渲染循环function render() {renderer.render(scene, camera);requestAnimationFrame(render);}render();
})
</script><style scoped lang="less">
</style>
6.3、 vue3 typescript项目 在script使用setup语法糖的方式下,使用最新 threejs api 创建文字
待补充
使用THREE.TextGeometry
创建文字的模型,并使用THREE.MeshBasicMaterial
和THREE.Mesh
将其渲染到场景中
6.4、绘制一个圆形
本例中,首先创建了一个Three.js场景、相机和渲染器。然后创建了一个圆形几何体和一个材质,并使用它们创建了一个网格。最后将圆形添加到场景中,并创建一个animate函数用于实现动画效果。
<template><div id="app"></div>
</template><script lang="ts">
import { defineComponent } from 'vue';
import * as THREE from 'three';export default defineComponent({name: 'HelloWorld',setup() {const scene = new THREE.Scene();const camera = new THREE.PerspectiveCamera(75,window.innerWidth / window.innerHeight,0.1,1000);const renderer = new THREE.WebGLRenderer();renderer.setSize(window.innerWidth, window.innerHeight);document.getElementById('app')?.appendChild(renderer.domElement);const geometry = new THREE.CircleGeometry(50, 32);const material = new THREE.MeshBasicMaterial({color: 0xff0000,wireframe: true,});const circle = new THREE.Mesh(geometry, material);scene.add(circle);camera.position.z = 100;const animate = function () {requestAnimationFrame(animate);circle.rotation.x += 0.01;circle.rotation.y += 0.01;renderer.render(scene, camera);};animate();return { scene, camera, renderer };},
});
</script>
6.5、绘制一个圆锥
<template><div id="app"></div>
</template><script lang="ts">
import { defineComponent } from 'vue';
import * as THREE from 'three';export default defineComponent({name: 'HelloWorld',setup() {const scene = new THREE.Scene();const camera = new THREE.PerspectiveCamera(75,window.innerWidth / window.innerHeight,0.1,1000);const renderer = new THREE.WebGLRenderer();renderer.setSize(window.innerWidth, window.innerHeight);document.getElementById('app')?.appendChild(renderer.domElement);const geometry = new THREE.ConeGeometry(50, 100, 32);const material = new THREE.MeshBasicMaterial({color: 0xff0000,wireframe: true,});const cone = new THREE.Mesh(geometry, material);scene.add(cone);camera.position.z = 100;const animate = function () {requestAnimationFrame(animate);cone.rotation.x += 0.01;cone.rotation.y += 0.01;renderer.render(scene, camera);};animate();return { scene, camera, renderer };},
});
</script>
6.6、绘制一个立方体
<template><div id="app"></div>
</template><script lang="ts">
import { defineComponent } from 'vue';
import * as THREE from 'three';export default defineComponent({name: 'HelloWorld',setup() {const scene = new THREE.Scene();const camera = new THREE.PerspectiveCamera(75,window.innerWidth / window.innerHeight,0.1,1000);const renderer = new THREE.WebGLRenderer();renderer.setSize(window.innerWidth, window.innerHeight);document.getElementById('app')?.appendChild(renderer.domElement);const geometry = new THREE.BoxGeometry(1, 1, 1);const material = new THREE.MeshBasicMaterial({ color: 0x00ff00 });const cube = new THREE.Mesh(geometry, material);scene.add(cube);camera.position.z = 5;const animate = function () {requestAnimationFrame(animate);cube.rotation.x += 0.01;cube.rotation.y += 0.01;renderer.render(scene, camera);};animate();return { scene, camera, renderer };},
});
</script>
6.7、绘制一个球体
<template><div ref="container"></div>
</template><script lang="ts">
import { defineComponent, onMounted, ref } from 'vue';
import * as THREE from 'three';export default defineComponent({setup() {const container = ref(null);onMounted(() => {// 创建渲染器const renderer = new THREE.WebGLRenderer();renderer.setSize(window.innerWidth, window.innerHeight);// 将渲染器添加到DOM中if(container.value) {container.value.appendChild(renderer.domElement);}// 创建场景const scene = new THREE.Scene();// 创建相机const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);camera.position.z = 5;// 添加环境光const ambientLight = new THREE.AmbientLight(0xffffff, 0.5);scene.add(ambientLight);// 添加点光源const pointLight = new THREE.PointLight(0xffffff, 1, 100);pointLight.position.set(0, 0, 5);scene.add(pointLight);// 创建红色球体const geometry = new THREE.SphereGeometry(1, 32, 32);const material = new THREE.MeshPhongMaterial({ color: 0xff0000, shininess: 100 });const sphere = new THREE.Mesh(geometry, material);scene.add(sphere);// 渲染场景const render = () => {requestAnimationFrame(render);sphere.rotation.x += 0.01;sphere.rotation.y += 0.01;renderer.render(scene, camera);};render();});return {container}}
});
</script>
在这个示例中,我们添加了一个点光源,并将球体的材质参数shininess设置为100,这使球体的表面更加光滑。
你还可以尝试调整环境光和点光源的强度和颜色,或者使用其他类型的光源和材质来改变球体的外观。
七、相关内容
canvas、canvas3D、playcanvas、tween、pixi、three.js、webGL、OpenGL
八、过程记录
8.1、学习目标
1、了解基础的3D数学和计算机图形学概念。学习向量、矩阵、坐标系、光照和着色器等基础知识。
2、熟悉WebGL技术,理解网页版3D渲染的基本原理,包括顶点着色器和片段着色器。
3、掌握Three.js的API,包括场景、相机、灯光、材质和几何体等基础概念,以及如何使用它们来创建3D图形。
4、学习如何使用Three.js创建复杂的3D场景,包括如何向场景添加3D模型、纹理、动画和粒子效果。
5、探索Three.js的高级功能,如阴影、反射、抗锯齿和后期处理。
6、将Three.js与其他技术集成,如HTML、CSS和JavaScript,以创建功能丰富且交互性强的3D应用程序。
7、学习如何与其他Web技术集成。将Three.js集成到Web应用程序中,并与其他技术,如HTML、CSS和JavaScript一起使用。
8、练习并参与开源项目,在实践中提高技能水平。
学习Three.js需要一定数学和图形学基础,需要耐心和实践。建议先从基础开始,逐步学习和实践,掌握基本概念和技能后再进行高级的应用。
8.2、Three.js之于WebGL,好比,jQuery.js之于JavaScript,,这样理解有合理性吗
这个比喻在某些方面是有合理性的,但不是完全准确的。
类比中的相似之处在于,jQuery.js在JavaScript世界中扮演了许多网站开发人员的角色。Three.js也在WebGL世界中扮演着相似的角色。jQuery.js使用DOM元素并操作它们,类似地,Three.js使用WebGL上下文并操作它们。这是比喻的相似之处。
然而,WebGL在功能和范围上远远超过了DOM操作,因此Three.js提供了比jQuery.js更加复杂的功能和API。Three.js的目的是演示和创建3D图形和交互式应用程序,并且具有原生优化的性能。与jQuery.js不同,Three.js是专注于3D图形编程的库。
因此,比喻可以作为一种简单的概括,但它并不完全准确,并且可以误导人们对Three.js和WebGL的理解。
8.3、使用Three.js创建一个简单的立方体场景的基本步骤
1、设置照相机 camera = new THREE.Camera(); 用于观察物体
2、设置场景 scene = new THREE.Scene() 用于承载物体
3、建立物体 geometry = new THREE.CubeGeometry(200, 200, 200);
4、创建网格 mesh = new THREE.Mesh(geometry, material) 5、渲染呈现 renderer.render(scene, camera) 这是啥
8.4、npm插件'three'和'@types/three'的区别如下
`npm`插件`three`是`Three.js`的`JavaScript`实现,是用于在`JavaScript`中创建和渲染`3D`图形的框架。
`@types/three`是TypeScript类型定义的`npm`包,它提供了`TypeScript`开发环境中`Three.js`库的类型定义文件。这些类型定义文件可以帮助`TypeScript`编译器检查代码类型,并提供提示和自动完成。
因此,`npm`插件`three`是`Three.js`库本身,而`@types/three`则提供了`TypeScript`开发环境所需的类型定义文件。如果你在使用`TypeScript`开发`Three.js`应用程序,则需要安装`npm`包`@types/three`,以获取`Three.js`库的类型定义文件,从而可以在开发过程中获得更好的类型安全支持和代码提示。如果你只是在使用标准的`JavaScript`进行开发,则只需要安装`npm`包`three`即可。
8.5、THREE.Geometry方法不存在新版本了吗
是的,从版本 r125 开始,three.js 废弃了 THREE.Geometry
,并引入了 THREE.BufferGeometry
作为建模的首选选择。这是为了提高性能,并使开发人员更容易控制顶点数据。
因此,如果您使用的是最新版本的 three.js,建议使用 THREE.BufferGeometry
来代替 THREE.Geometry
。
8.6、需要在onmounted声明周期,确保DOM元素已经加载完成
需要注意的是,在使用Three.js时,需要确保DOM元素已经加载完成,否则会出现错误。上述示例中使用了安全访问运算符(?.)和类型断言(!),以确保能够正确获取DOM元素。
8.7、playcanvas.js 和 three.js 有什么相同异同
PlayCanvas和Three.js都是用于创建和显示3D图形的JavaScript库,但它们有一些关键的区别。
序号 | 相同 |
1 | 两者都是用于创建和显示3D图形的JavaScript库 |
2 | 两者都提供了一系列的API来方便开发者创建和控制3D图形 |
3 | 两者都支持在浏览器中运行,而且都能很好地支持各种主流的浏览器 |
4 | 两者都提供了一些基本的3D功能,如3D模型的加载和呈现、材质和纹理的应用、动画和物理效果等 |
5 | 两者都是开源的项目,并且都有一个活跃的社区在支持和维护 |
序号 | 不同 |
1 | PlayCanvas.js的定位更多是在线多人游戏的开发,它在多人游戏的网络性能优化方面有更好的表现。而Three.js的应用范围更广泛,包括但不限于游戏开发,定位更多是用于3D呈现和交互式场景的创建。 |
2 | PlayCanvas提供了一套完整的游戏开发框架,包括物理引擎、碰撞检测、声音系统等,而Three.js主要专注于图形渲染。 |
3 | PlayCanvas提供了实时渲染功能,可以在浏览器中实现流畅的3D游戏体验,而Three.js虽然也支持实时渲染,但通常需要配合其他库(如WebGL或WebGPU)来实现更好的效果。 |
4 | PlayCanvas的文档和社区比Three.js更加完善,API更加简洁易用,对于开发者来说更容易上手和使用。而Three.js的API更加底层,需要开发者有一定的3D编程经验。 |
5 | PlayCanvas支持组件化开发,可以通过组合不同的组件来快速构建复杂的3D场景,而Three.js则需要更多的手动设置和调整。 |
6 | PlayCanvas支持多种输入方式(如键盘、鼠标、触摸等),适合开发各种类型的交互式应用,而Three.js则更侧重于图形渲染方面的输入控制。 |
九、老语法 --》新语法
序号 | 老语法 | 新语法 |
1 | new THREE.FontLoader() | TextureLoader THREE.TypefaceLoader |
2 | new THREE.TextGeometry() | THREE.TextBufferGeometry??? THREE.Mesh??? |
待补充 | 待补充 | 待补充 |
十、参考链接
补间动画tween.js_tween补间动画-CSDN博客
和我一起学 Three.js【初级篇】:2. 掌握几何体 - 知乎
关于javascript:Three.js新的THREE.TextBufferGeometry()无法读取未定义错误的属性’yMax’ | 码农家园
Three.js API手册 / LineBasicMaterial - 汇智网
Caught error TypeError: THREE.Geometry is not a constructor
Three.js中文网
https://www.cnblogs.com/tiandi/p/17053774.html
vue3项目中使用three.js的操作步骤_vue.js_脚本之家
开始第一个Hello world! | 码上动力
Lamborghini Huracán STO 2020
three.js全网最全最新入门课程(2023年10月更新)【搞定前端前沿技术】_哔哩哔哩_bilibili
threejs-vite-vue实战课程_哔哩哔哩_bilibili
带你入门three.js——从0到1实现一个3d可视化地图 - 知乎
相关文章:

WebGL-Vue3-TS-Threejs:基础练习 / Javascript 3D library / demo
一、理解Three.js Three.js是一个用于WebGL渲染的JavaScript库。它提供了一组工具和类,用于创建和渲染3D图形和动画。简单理解(并不十分准确),Three.js之于WebGL,好比,jQuery.js之于JavaScript。 OpenGL …...

2022年12月 Python(四级)真题解析#中国电子学会#全国青少年软件编程等级考试
Python等级考试(1~6级)全部真题・点这里 一、单选题(共25题,每题2分,共50分) 第1题 有n个按名称排序的商品,使用对分查找法搜索任何一商品,最多查找次数为5次,则n的值可能为?()(2分) A.5 B.15 C.30 D.35 答案:C 答案解析:对分查找最多查找次数m与个数之间n的…...

确定性 vs 非确定性:GPT 时代的新编程范式
分享嘉宾 | 王咏刚 责编 | 梦依丹 出品 | 《新程序员》编辑部 在 ChatGPT 所引爆的新一轮编程革命中,自然语言取代编程语言,在只需编写提示词/拍照就能出程序的时代,未来程序员真的会被简化为提示词的编写员吗?通过提示词操纵 …...

【Linux奇遇记】我和Linux的初次相遇
🌈个人主页: Aileen_0v0 🔥系列专栏:Linux奇遇记系列专栏💫"没有罗马,那就自己创造罗马~" 目录 前端和后端的介绍 1.前端 2.后端 3.前后端区别 Linux在前后端开发中的角色 如何学习Linux 去进行程序开发 Linux的常见根目…...

剪贴板劫持--PasteJacker的使用
启动 PasteJacker [1] Windows [2] Linux [3] Exit第一次是让我们选择要攻击针对的目标系统,这里以Windows系统为例,即我自己的物理机 因此键入 1 ,回车 [1] Download and execute a msfvenom backdoor using certutil (Web delivery Past…...
说一下vue2的响应式原理?
vue2采用数据代理数据劫持发布订阅模式的方法。 在初始化vue实例时,会把data对象和data对象的属性都添加到vm对象中,通过object.defineProperty()进行数据代理,用vm对象的属性来代理data对象的属性,并在Observer类中递归遍历data…...

如何使用CORS和CSP保护前端应用程序安全
前端应用在提供无缝用户体验方面起着核心作用。在当今互联网的环境中,第三方集成和API的普及使得确保强大的安全性至关重要。安全漏洞可能导致数据盗窃、未经授权访问以及品牌声誉受损。本文将向您展示如何使用CORS和CSP为您的网页增加安全性。 嗨,大家好…...

C/C++输出硬币翻转 2021年6月电子学会青少年软件编程(C/C++)等级考试一级真题答案解析
目录 C/C硬币翻转 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、程序说明 五、运行结果 六、考点分析 C/C硬币翻转 2021年6月 C/C编程等级考试一级编程题 一、题目要求 1、编程实现 假设有N个硬币(N为不大于5000的正整数),从1…...
ipad可能会在iOS 16中失去智能家居中心功能
在iOS 16测试版代码中发现的文本表明苹果将放弃对iPad家庭中心的支持 家庭app迎来重大改版,未来更将对智能家居互联互通标准Matter提供支持。 即使某一款智能家居设备再优秀,只要它没有接入HomeKit,那么就不能在苹果的家庭app中直接管理控制。…...
maven打包可运行jar
普通java程序 <build><finalName>JavaDeviceClient</finalName><plugins><plugin><artifactId>maven-compiler-plugin</artifactId><version>2.3.2</version><configuration><source>1.8</source><…...

Arcgis连接Postgis数据库(Postgre入门十)
效果 步骤 1、矢量数据首先有在postgis数据库中 这个postgis数据库中的一个空间数据,数据库名称是test3,数据表名称是test 2、Arcgis中连接postgis数据库中 3、成功连接 可以将数据拷贝或导入到gdb数据库中...

【蓝桥杯选拔赛真题17】C++时间换算 第十二届蓝桥杯青少年创意编程大赛C++编程选拔赛真题解析
目录 C/C++时间换算 一、题目要求 1、编程实现 2、输入输出 二、算法分析 <...

【腾讯云 HAI域探秘】探索AI绘画之路:利用腾讯云HAI服务打造智能画家
目录 前言1 使用HAI服务作画的步骤1.1 注册腾讯云账户1.2 创建算力服务器1.3 进入模型管理界面1.4 汉化界面1.5 探索AI绘画 2 模型参数的含义和调整建议2.1 模型参数的含义和示例2.2 模型参数的调整建议 3 调整参数作画的实践和效果3.1 实践说明3.2 实践效果13.3 实践效果23.4 …...
安卓常见设计模式10------责任链模式(Kotlin版)
1. W1 是什么,什么是责任链模式? 责任链模式(Chain of Responsibility Pattern)是一种行为型设计模式,它用于将请求的发送者和接收者解耦,并将请求沿着一个处理链进行传递,直到有一个处理者能…...
利用 Google Artifact Repository 构建maven jar 存储仓库
参考了google 官方文档 https://cloud.google.com/artifact-registry/docs/java/store-java#gcloud_1 首先 enable GAR api gcloud services enable artifactregistry.googleapis.com gcloud services list | grep -i artifact artifactregistry.googleapis.com Artifac…...

Facebook广告被暂停是什么原因?Facebook广告账号被封怎么办?
许多做海外广告投放的小伙伴经常遇到一个难题,那就是投放的Facebook广告被拒或 Facebook 广告帐户被关闭赞停的经历,随之而来的更可能是广告账户被封,导致资金的损失。本文将从我自身经验,为大家分享,Facebook广告被暂…...

Javaweb之javascript的BOM对象的详细解析
1.5.2 BOM对象 接下来我们学习BOM对象,BOM的全称是Browser Object Model,翻译过来是浏览器对象模型。也就是JavaScript将浏览器的各个组成部分封装成了对象。我们要操作浏览器的部分功能,可以通过操作BOM对象的相关属性或者函数来完成。例如:…...

使用Nginx和Spring Gateway为SkyWalking的增加登录认证功能
文章目录 1、使用Nginx增加认证。2、使用Spring Gateway增加认证 SkyWalking的可视化后台是没有用户认证功能的,默认下所有知道地址的用户都能访问,官网是建议通过网关增加认证。 本文介绍通过Nginx和Spring Gateway两种方式 1、使用Nginx增加认证。 生…...
Android 12.0 增加多张图片作为系统静态壁纸的功能实现
1.前言 在12.0的系统rom定制化开发中,在做系统定制化开发中,在对系统的静态壁纸做定制的时候,需要增加几种静态壁纸可以让用户自己设置壁纸,所以可以在壁纸的系统应用中 添加几种静态壁纸图片,然后配置好 就可以在选择壁纸的时候,作为静态壁纸,接下来看如何具体实现这个…...

无线优化之RRM模板
一、简介 RRM即,Radio Resource Management,射频资源管理 WLAN技术是以射频信号(如2.4G/5G的无线电磁波)作为传输介质,无线电磁波在传输过程中因周围环境导致无线信号衰减,从而影响无线用户上网的服务质量。 RRM模板主要用于保持最优的频射资源状态,自动检查周围无线…...
Python爬虫实战:研究MechanicalSoup库相关技术
一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...

(二)TensorRT-LLM | 模型导出(v0.20.0rc3)
0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述,后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作,其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...

聊聊 Pulsar:Producer 源码解析
一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台,以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中,Producer(生产者) 是连接客户端应用与消息队列的第一步。生产者…...

【机器视觉】单目测距——运动结构恢复
ps:图是随便找的,为了凑个封面 前言 在前面对光流法进行进一步改进,希望将2D光流推广至3D场景流时,发现2D转3D过程中存在尺度歧义问题,需要补全摄像头拍摄图像中缺失的深度信息,否则解空间不收敛…...

抖音增长新引擎:品融电商,一站式全案代运营领跑者
抖音增长新引擎:品融电商,一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中,品牌如何破浪前行?自建团队成本高、效果难控;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...
在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module
1、为什么要修改 CONNECT 报文? 多租户隔离:自动为接入设备追加租户前缀,后端按 ClientID 拆分队列。零代码鉴权:将入站用户名替换为 OAuth Access-Token,后端 Broker 统一校验。灰度发布:根据 IP/地理位写…...

PL0语法,分析器实现!
简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...

IT供电系统绝缘监测及故障定位解决方案
随着新能源的快速发展,光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域,IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选,但在长期运行中,例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...
什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南
文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果
Map相关知识
数据结构 二叉树 二叉树,顾名思义,每个节点最多有两个“叉”,也就是两个子节点,分别是左子 节点和右子节点。不过,二叉树并不要求每个节点都有两个子节点,有的节点只 有左子节点,有的节点只有…...