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.MeshBasicMaterialTHREE.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两者都是开源的项目,并且都有一个活跃的社区在支持和维护
序号不同
1PlayCanvas.js的定位更多是在线多人游戏的开发,它在多人游戏的网络性能优化方面有更好的表现。而Three.js的应用范围更广泛,包括但不限于游戏开发,定位更多是用于3D呈现和交互式场景的创建。
2PlayCanvas提供了一套完整的游戏开发框架,包括物理引擎、碰撞检测、声音系统等,而Three.js主要专注于图形渲染。
3PlayCanvas提供了实时渲染功能,可以在浏览器中实现流畅的3D游戏体验,而Three.js虽然也支持实时渲染,但通常需要配合其他库(如WebGL或WebGPU)来实现更好的效果。
4PlayCanvas的文档和社区比Three.js更加完善,API更加简洁易用,对于开发者来说更容易上手和使用。而Three.js的API更加底层,需要开发者有一定的3D编程经验。
5PlayCanvas支持组件化开发,可以通过组合不同的组件来快速构建复杂的3D场景,而Three.js则需要更多的手动设置和调整。
6PlayCanvas支持多种输入方式(如键盘、鼠标、触摸等),适合开发各种类型的交互式应用,而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可视化地图 - 知乎

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

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

相关文章

在Google Kubernetes集群创建分布式Jenkins(二)

上一篇博客在Google Kubernetes集群创建分布式Jenkins(一)-CSDN博客我介绍了如何在GCP的K8S集群上部署一个分布式的Jenkins&#xff0c;并实现了一个简单的Pipeline的运行。 在实际的开发中&#xff0c;我们通常都会按照以下的CICD流程来设置Pipeline 在我司的实际实践中&…

ubuntu18-recvfrom接收不到广播报文异常分析

目录 前言 一、UDP广播接收程序 二、异常原因分析 总结 前言 在ubuntu18.04系统中&#xff0c;编写udp接收程序发现接收不到广播报文&#xff0c;使用抓包工具tcpdump可以抓取到广播报文&#xff0c;在此对该现象分析解析如下文所示。 一、UDP广播接收程序 UDP广播接收程序如…

接收表单数据

如果您尝试按下提交按钮&#xff0c;浏览器将显示“Method Not Allowed”错误。这是因为到目前为止&#xff0c;前一节中的登录视图函数完成了一半的工作。它可以在网页上显示表单&#xff0c;但是还没有逻辑来处理用户提交的数据。这是Flask-WTF使工作变得非常简单的另一个领域…

实战!工作中常用的设计模式

文章目录 前言一、策略模式1.1、 业务场景1.2 、策略模式定义1.3、 策略模式使用1.3.1、一个接口&#xff0c;两个方法1.3.2、不同策略的差异化实现1.3.3、使用策略模式 二、责任链模式2.1、业务场景2.2、责任链模式定义2.3、责任链模式使用2.3.1、一个接口或者抽象类2.3.2、每…

【springboot配置项动态刷新】与【yaml文件转换为java对象】

文章目录 一&#xff0c;序言二&#xff0c;准备工作1. pom.xml引入组件2. 配置文件示例 三&#xff0c;自定义配置项动态刷新编码实现1. 定义自定义配置项对象2. 添加注解实现启动时自动注入3. 实现yml文件监听以及文件变化处理 四&#xff0c;yaml文件转换为java对象1. 无法使…

大容量疯了!居然想把磁带放到硬盘,100TB+是否可以实现?

1.引言 上一篇关于大容量硬盘的文章&#xff08;HDD最后的冲刺&#xff1a;大容量硬盘的奋力一搏&#xff09;中&#xff0c;我们针对大容量硬盘研发状态&#xff0c;小编最近又有了新发现。WDC希望可以通过HDD和磁带结合&#xff0c;把盘的容量提升到100TB。 2.数据大爆炸的…

问题描述:64位计算机的寻址能力是多少TB

问题描述&#xff1a;64位计算机的寻址能力是多少TB 我在看到一个32位电脑的寻址能力计算时&#xff0c;看到是这么计算的。 虚拟内存的大小受到计算机地址位数的限制&#xff0c; 那么32位电脑的寻址能力计算应该是这样 为什么网上百度到的是16TB呢&#xff0c;如下图所示 中…

大数据毕业设计选题推荐-农作物观测站综合监控平台-Hadoop-Spark-Hive

✨作者主页&#xff1a;IT毕设梦工厂✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Py…

Web实验总

目录 网站需求&#xff1a; 思路&#xff1a; 实验步骤&#xff1a; 第一步&#xff1a;准备工作 第二步&#xff1a;新建一个存储网页的目录 第三步&#xff1a;修改本地hosts映射 第四步&#xff1a;修改配置文件&#xff0c;建立基于http服务的网站 1)创建用户song和…

宠物医院信息展示预约小程序的效果如何

养宠家庭越来越多&#xff0c;随之带来的就是宠物健康问题&#xff0c;生活条件稍微好点的家庭&#xff0c;只要宠物生病或洗护、寄养、美容等就会前往宠物医院&#xff0c;而近些年来&#xff0c;市场中的宠物医院也在连年增加&#xff0c;可以预见市场需求度较高。 而对宠物…

打开ps提示,计算机中丢失d3dcompiler_47.dll怎么解决?

“d3dcompiler_47.dll丢失5个解决办法”。相信很多同事在工作或者娱乐的过程中&#xff0c;都遇到过这个错误提示。那么&#xff0c;究竟什么是d3dcompiler_47.dll文件&#xff1f;为什么会丢失呢&#xff1f;又该如何解决这个问题呢&#xff1f;接下来&#xff0c;我将为大家详…

【CMU 15-445】Proj1 Buffer Pool Manager

Buffer Pool Manager 通关记录Task1 LRU-K Replacement PolicyTask2 Disk SchedulerTask3 Buffer Pool ManagerFlushPageFlushAllPagesUnpinPageNewPageFetchPageDeletePage Optimizations CMU-15445汇总 本文对应的project版本为CMU-Fall-2023的project1 由于Andy要求&#xf…

JavaEE初阶学习:Linux 基本使用和 web 程序部署

1.Linux的基本认识 Linux 是一个操作系统.(搞管理的系统) 和Windows都是同类产品~~ Linux 实际的场景: 1.服务器 2.嵌入式设备 3.移动端(手机)Android 其实就是Linux 1991年,还在读大学的 芬兰人 Linus Benedict Torvalds,搞了一个Linux 这样的系统0.01版,正式发布了~ 后…

基于pytorch使用特征图输出进行特征图可视化

使用特征图输出进行特征图可视化 文章目录 前言效果展示获取某一层特征图输出原图方法一&#xff1a;使用IntermediateLayerGetter类方法二&#xff1a;使用hook机制&#xff08;推荐&#xff09; 总结 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 例…

【 云原生 | K8S 】kubectl 详解

目录 1 kubectl 2 基本信息查看 2.1 查看 master 节点状态 2.2 查看命名空间 2.3 查看default命名空间的所有资源 2.4 创建命名空间app 2.5 删除命名空间app 2.6 在命名空间kube-public 创建副本控制器&#xff08;deployment&#xff09;来启动Pod&#xff08;nginx-wl…

大数据-之LibrA数据库系统告警处理(ALM-12036 license文件即将过期)

告警解释 系统每天零点检查一次当前系统中的license文件&#xff0c;如果当前时间距离过期时间不足60天&#xff0c;则license文件即将过期&#xff0c;产生该告警。 当重新导入一个正常license&#xff0c;告警恢复。 说明&#xff1a; 如果当前集群使用节点数小于等于10节…

RLHF的替代算法之DPO原理解析:从Zephyr的DPO到Claude的RAILF

前言 本文的成就是一个点顺着一个点而来的&#xff0c;成文过程颇有意思 首先&#xff0c;如上文所说&#xff0c;我司正在做三大LLM项目&#xff0c;其中一个是论文审稿GPT第二版&#xff0c;在模型选型的时候&#xff0c;关注到了Mistral 7B(其背后的公司Mistral AI号称欧洲…

049-第三代软件开发-软件部署脚本(一)

第三代软件开发-软件部署脚本(一) 文章目录 第三代软件开发-软件部署脚本(一)项目介绍软件部署脚本(一)其他方式 关键字&#xff1a; Qt、 Qml、 bash、 shell、 脚本 项目介绍 欢迎来到我们的 QML & C 项目&#xff01;这个项目结合了 QML&#xff08;Qt Meta-Object…

nfs配置

1.NFS介绍 NFS就是Network File System的缩写&#xff0c;它最大的功能就是可以通过网络&#xff0c;让不同的机器、不同的操 作系统可以共享彼此的文件。 NFS服务器可以让PC将网络中的NFS服务器共享的目录挂载到本地端的文 件系统中&#xff0c;而在本地端的系统中来看&#…

【Git】Gui图形化管理、SSH协议私库集成IDEA使用

一、Gui图形化界面使用 1、根据自己需求打开管理器 2、克隆现有的库 3、图形化界面介绍 1、首先在本地仓库更新一个代码文件&#xff0c;进行使用&#xff1a; 2、进入图形管理界面刷新代码资源&#xff1a; 3、点击Stage changed 跟踪文件&#xff0c;将文件处于暂存区 4、通过…