3D个人简历网站 4.小岛
1.模型素材
在Sketchfab上下载狐狸岛模型,然后转换为素材资源asset,嫌麻烦直接在网盘链接下载素材,
- Fox’s islands
- https://sketchfab.com/3d-models/foxs-islands-163b68e09fcc47618450150be7785907
- https://gltf.pmnd.rs/
素材夸克网盘:
链接:https://pan.quark.cn/s/f02d30f07286
提取码:Yn3k
在 vite.config.js 或 vite.config.ts 文件里添加 assetsInclude 配置项,让 Vite 把 .glb 文件当作静态资源处理。
vite.config.js
import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'// https://vite.dev/config/
export default defineConfig({plugins: [react()],assetsInclude: ['**/*.glb']
})
2.小岛代码
src下创建文件夹models,models下创建Island.jsx
Island.jsx
/*** IMPORTANT: 将 glTF 模型加载到 Three.js 场景中是一项复杂的工作。* 在我们能够配置或动画化模型的网格之前,需要遍历模型网格的每个部分并单独保存。** 但幸运的是,有一个工具可以将 gltf 或 glb 文件转换为 jsx 组件。* 对于这个模型,请访问 https://gltf.pmnd.rs/ * 获取代码,然后添加其余内容。* 你不必从零开始编写所有代码*/// 从 @react-spring/three 库导入 a 组件,用于创建动画效果
import { a } from "@react-spring/three";
// 从 react 库导入 useEffect 和 useRef 钩子,useEffect 用于处理副作用,useRef 用于创建可变引用
import { useEffect, useRef } from "react";
// 从 @react-three/drei 库导入 useGLTF 钩子,用于加载 glTF 模型
import { useGLTF } from "@react-three/drei";
// 从 @react-three/fiber 库导入 useFrame 和 useThree 钩子,useFrame 用于在每一帧更新时执行代码,useThree 用于获取 Three.js 上下文
import { useFrame, useThree } from "@react-three/fiber";// 导入岛屿模型的 glb 文件
import islandScene from "../assets/3d/island.glb";/*** Island 组件,用于渲染 3D 岛屿模型,并处理模型的旋转交互和阶段设置。* @param {Object} props - 组件的属性对象* @param {boolean} props.isRotating - 指示岛屿是否正在旋转的状态* @param {Function} props.setIsRotating - 用于设置岛屿旋转状态的函数* @param {Function} props.setCurrentStage - 用于设置当前阶段的函数* @param {*} props.currentFocusPoint - 当前焦点点* @returns {JSX.Element} 渲染的 3D 岛屿模型元素*/
export function Island({isRotating,setIsRotating,setCurrentStage,currentFocusPoint,...props
}) {// 创建一个 ref 用于引用岛屿模型const islandRef = useRef();// 使用 useThree 钩子获取 Three.js 渲染器和视口信息const { gl, viewport } = useThree();// 使用 useGLTF 钩子加载岛屿模型,获取模型的节点和材质const { nodes, materials } = useGLTF(islandScene);// 创建一个 ref 用于存储上一次鼠标的 x 坐标const lastX = useRef(0);// 创建一个 ref 用于存储旋转速度const rotationSpeed = useRef(0);// 定义阻尼因子,用于控制旋转减速效果const dampingFactor = 0.95;// 处理指针(鼠标或触摸)按下事件const handlePointerDown = (event) => {// 阻止事件冒泡和默认行为event.stopPropagation();event.preventDefault();// 设置岛屿为旋转状态setIsRotating(true);// 根据事件类型(触摸或鼠标)获取当前指针的 x 坐标const clientX = event.touches ? event.touches[0].clientX : event.clientX;// 存储当前指针的 x 坐标,供后续计算使用lastX.current = clientX;};// 处理指针(鼠标或触摸)抬起事件const handlePointerUp = (event) => {// 阻止事件冒泡和默认行为event.stopPropagation();event.preventDefault();// 设置岛屿为停止旋转状态setIsRotating(false);};// 处理指针(鼠标或触摸)移动事件const handlePointerMove = (event) => {// 阻止事件冒泡和默认行为event.stopPropagation();event.preventDefault();if (isRotating) {// 如果岛屿正在旋转,根据事件类型(触摸或鼠标)获取当前指针的 x 坐标const clientX = event.touches ? event.touches[0].clientX : event.clientX;// 计算指针在水平方向上的移动距离,相对于视口宽度的比例const delta = (clientX - lastX.current) / viewport.width;// 根据指针移动距离更新岛屿的旋转角度islandRef.current.rotation.y += delta * 0.01 * Math.PI;// 更新上一次指针的 x 坐标lastX.current = clientX;// 更新旋转速度rotationSpeed.current = delta * 0.01 * Math.PI;}};// 处理键盘按下事件const handleKeyDown = (event) => {if (event.key === "ArrowLeft") {// 如果按下左箭头键,且岛屿未旋转,则设置为旋转状态if (!isRotating) setIsRotating(true);// 向左旋转岛屿islandRef.current.rotation.y += 0.005 * Math.PI;// 设置旋转速度rotationSpeed.current = 0.007;} else if (event.key === "ArrowRight") {// 如果按下右箭头键,且岛屿未旋转,则设置为旋转状态if (!isRotating) setIsRotating(true);// 向右旋转岛屿islandRef.current.rotation.y -= 0.005 * Math.PI;// 设置旋转速度rotationSpeed.current = -0.007;}};// 处理键盘抬起事件const handleKeyUp = (event) => {if (event.key === "ArrowLeft" || event.key === "ArrowRight") {// 如果松开左箭头键或右箭头键,设置岛屿为停止旋转状态setIsRotating(false);}};// 处理触摸开始事件,用于移动设备const handleTouchStart = (e) => {// 阻止事件冒泡和默认行为e.stopPropagation();e.preventDefault();// 设置岛屿为旋转状态setIsRotating(true);// 获取触摸点的 x 坐标const clientX = e.touches ? e.touches[0].clientX : e.clientX;// 存储当前触摸点的 x 坐标lastX.current = clientX;}// 处理触摸结束事件,用于移动设备const handleTouchEnd = (e) => {// 阻止事件冒泡和默认行为e.stopPropagation();e.preventDefault();// 设置岛屿为停止旋转状态setIsRotating(false);}// 处理触摸移动事件,用于移动设备const handleTouchMove = (e) => {// 阻止事件冒泡和默认行为e.stopPropagation();e.preventDefault();if (isRotating) {// 如果岛屿正在旋转,获取触摸点的 x 坐标const clientX = e.touches ? e.touches[0].clientX : e.clientX;// 计算触摸点在水平方向上的移动距离,相对于视口宽度的比例const delta = (clientX - lastX.current) / viewport.width;// 根据触摸移动距离更新岛屿的旋转角度islandRef.current.rotation.y += delta * 0.01 * Math.PI;// 更新上一次触摸点的 x 坐标lastX.current = clientX;// 更新旋转速度rotationSpeed.current = delta * 0.01 * Math.PI;}}// 使用 useEffect 钩子添加和移除事件监听器useEffect(() => {// 获取 Three.js 渲染器的画布元素const canvas = gl.domElement;// 添加指针按下、抬起、移动事件监听器canvas.addEventListener("pointerdown", handlePointerDown);canvas.addEventListener("pointerup", handlePointerUp);canvas.addEventListener("pointermove", handlePointerMove);// 添加键盘按下、抬起事件监听器window.addEventListener("keydown", handleKeyDown);window.addEventListener("keyup", handleKeyUp);// 添加触摸开始、结束、移动事件监听器canvas.addEventListener("touchstart", handleTouchStart);canvas.addEventListener("touchend", handleTouchEnd);canvas.addEventListener("touchmove", handleTouchMove);// 组件卸载时移除事件监听器,避免内存泄漏return () => {canvas.removeEventListener("pointerdown", handlePointerDown);canvas.removeEventListener("pointerup", handlePointerUp);canvas.removeEventListener("pointermove", handlePointerMove);window.removeEventListener("keydown", handleKeyDown);window.removeEventListener("keyup", handleKeyUp);canvas.removeEventListener("touchstart", handleTouchStart);canvas.removeEventListener("touchend", handleTouchEnd);canvas.removeEventListener("touchmove", handleTouchMove);};}, [gl, handlePointerDown, handlePointerUp, handlePointerMove]);// 使用 useFrame 钩子在每一帧更新时执行代码useFrame(() => {// 如果岛屿未旋转,应用阻尼效果使旋转逐渐减速if (!isRotating) {// 应用阻尼因子,降低旋转速度rotationSpeed.current *= dampingFactor;// 当旋转速度非常小时,停止旋转if (Math.abs(rotationSpeed.current) < 0.001) {rotationSpeed.current = 0;}// 根据旋转速度更新岛屿的旋转角度islandRef.current.rotation.y += rotationSpeed.current;} else {// 当岛屿正在旋转时,根据岛屿的朝向确定当前阶段const rotation = islandRef.current.rotation.y;/*** 对旋转值进行归一化处理,确保其保持在 [0, 2 * Math.PI] 范围内。* 目的是保证旋转值在特定范围内,避免出现非常大或负的旋转值导致的潜在问题。* 以下是这段代码的分步解释:* 1. rotation % (2 * Math.PI) 计算旋转值除以 2 * Math.PI 的余数。* 这实际上会在旋转值达到一整圈(360 度)时将其环绕,使其保持在 0 到 2 * Math.PI 的范围内。* 2. (rotation % (2 * Math.PI)) + 2 * Math.PI 将步骤 1 的结果加上 2 * Math.PI。* 这样做是为了确保即使在步骤 1 的取模运算后结果为负,该值仍然为正且在 0 到 2 * Math.PI 的范围内。* 3. 最后,((rotation % (2 * Math.PI)) + 2 * Math.PI) % (2 * Math.PI) 对步骤 2 得到的值再次应用取模运算。* 这一步保证了该值始终保持在 0 到 2 * Math.PI 的范围内,这在弧度制中相当于一整圈。*/const normalizedRotation =((rotation % (2 * Math.PI)) + 2 * Math.PI) % (2 * Math.PI);// 根据岛屿的朝向设置当前阶段switch (true) {case normalizedRotation >= 5.45 && normalizedRotation <= 5.85:setCurrentStage(4);break;case normalizedRotation >= 0.85 && normalizedRotation <= 1.3:setCurrentStage(3);break;case normalizedRotation >= 2.4 && normalizedRotation <= 2.6:setCurrentStage(2);break;case normalizedRotation >= 4.25 && normalizedRotation <= 4.75:setCurrentStage(1);break;default:setCurrentStage(null);}}});return (// {岛屿 3D 模型来源: https://sketchfab.com/3d-models/foxs-islands-163b68e09fcc47618450150be7785907}// 使用 a.group 组件包裹岛屿模型,支持动画效果<a.group ref={islandRef} {...props}><meshgeometry={nodes.polySurface944_tree_body_0.geometry}material={materials.PaletteMaterial001}/><meshgeometry={nodes.polySurface945_tree1_0.geometry}material={materials.PaletteMaterial001}/><meshgeometry={nodes.polySurface946_tree2_0.geometry}material={materials.PaletteMaterial001}/><meshgeometry={nodes.polySurface947_tree1_0.geometry}material={materials.PaletteMaterial001}/><meshgeometry={nodes.polySurface948_tree_body_0.geometry}material={materials.PaletteMaterial001}/><meshgeometry={nodes.polySurface949_tree_body_0.geometry}material={materials.PaletteMaterial001}/><meshgeometry={nodes.pCube11_rocks1_0.geometry}material={materials.PaletteMaterial001}/></a.group>);
}// 导出 Island 组件作为默认导出,方便其他文件引入使用
export default Island
3.主页代码
Home.jsx
// 导入 React 库和 Suspense 组件,Suspense 用于处理异步组件加载
// 当异步组件还未加载完成时,可显示一个 fallback 组件
import React, { Suspense } from 'react'
// 从 @react-three/fiber 库中导入 Canvas 组件,用于创建 Three.js 渲染上下文,
// 借助该组件能在 React 应用里渲染 3D 场景
import { Canvas } from '@react-three/fiber'
// 从 ../components/Loader 路径导入 Loader 组件,该组件会在异步加载时显示加载状态
import Loader from '../components/Loader'
// 从 ../models/Island 路径导入 Island 组件,此组件用于渲染 3D 岛屿模型
import { Island } from "../models/Island"// <div className='absolute top-28 left-0 right-0 z-10 flex items-center justify-center'>
// 弹出窗口
// </div>/*** Home 组件,作为应用的主页组件。* 该组件会依据屏幕尺寸对 Island 组件的缩放、位置和旋转进行调整,* 并且在 Canvas 中渲染 Island 组件,同时处理异步加载状态。* @returns {JSX.Element} 渲染后的 JSX 元素*/
const Home = () => {/*** 根据屏幕尺寸调整 Island 组件的缩放、位置和旋转。* @returns {Array} 包含屏幕缩放比例、位置和旋转值的数组*/const adjustIslandForScreenSize = () => {// 初始化屏幕缩放比例,初始值设为 nulllet screenScale = null// 初始化 Island 组件的位置,默认值为 [0, -6.5, -43]let screenPosition = [0, -6.5, -43]// 初始化 Island 组件的旋转值,默认值为 [0.1, 4.7, 0]let rotation = [0.1, 4.7, 0]// 判断当前窗口宽度是否小于 768pxif (window.innerWidth < 768) {// 若窗口宽度小于 768px,将屏幕缩放比例设置为 [0.9, 0.9, 0.9]screenScale = [0.9, 0.9, 0.9];} else {// 若窗口宽度大于等于 768px,将屏幕缩放比例设置为 [1, 1, 1]screenScale = [1, 1, 1];}// 返回包含屏幕缩放比例、位置和旋转值的数组return [screenScale, screenPosition, rotation];}// 调用 adjustIslandForScreenSize 函数,获取调整后的岛屿缩放、位置和旋转参数const [islandScale, islandPosition, islandRotation] = adjustIslandForScreenSize();return (// 创建一个 section 元素,宽度和高度占满整个屏幕,且采用相对定位<section className='w-full h-screen relative'>{/* 创建 Three.js 渲染画布,宽度和高度占满整个屏幕,背景透明,并设置相机的近裁剪面和远裁剪面 */}<CanvasclassName='w-full h-screen bg-transparent'camera={{ near:0.1, far:1000 }}>{/* 使用 Suspense 组件处理异步加载,当 Island 组件未加载完成时,显示 Loader 组件 */}<Suspense fallback={<Loader/>}>{/* 添加定向光,为场景提供有方向的光照 */}<directionalLight/>{/* 添加环境光,为场景提供全局均匀的光照 */}<ambientLight />{/* 添加点光源,从一个点向四周发射光线 */}<pointLight />{/* 添加聚光灯,发射出类似圆锥形的光线 */}<spotLight />{/* 添加半球光,模拟天空和地面的光照效果 */}<hemisphereLight />{/* 渲染 Island 组件,设置其位置、缩放和旋转属性 */}<Islandposition={islandPosition}scale={islandScale}rotation={islandRotation}/></Suspense></Canvas></section>)
}// 导出 Home 组件,供其他文件引入使用
export default Home
4.安装依赖运行
npm install @react-spring/three
npm run dev
相关文章:

3D个人简历网站 4.小岛
1.模型素材 在Sketchfab上下载狐狸岛模型,然后转换为素材资源asset,嫌麻烦直接在网盘链接下载素材, Fox’s islandshttps://sketchfab.com/3d-models/foxs-islands-163b68e09fcc47618450150be7785907https://gltf.pmnd.rs/ 素材夸克网盘&a…...

创建型:原型模式
目录 1、核心思想 2、实现方式 2.1 基本结构 2.2 代码示例(Java) 3、适用场景 4、new与clone实际场景建议 1、核心思想 目的:通过复制(克隆)现有对象来创建新对象,而不是通过new关键字实例化。对于那…...
浅谈“量子计算应用:从基础原理到行业破局”
量子计算应用:从基础原理到行业破局 引言:量子计算为何成为科技革命新引擎? 量子计算利用量子力学原理(叠加态、纠缠态、量子干涉)突破经典计算的极限,在特定领域可实现指数级加速。根据中研普华预测,2025年全球量子计算市场规模将突破80亿美元,2035年可达8117亿美元。…...
Java面试攻略:从Spring Boot到微服务架构的深入探讨
Java面试攻略:从Spring Boot到微服务架构的深入探讨 场景设定 在一家知名互联网大厂的会议室里,资深面试官王老师正在对一位求职者谢飞机进行技术面试。谢飞机是一位幽默风趣的程序员,他的回答有时让人捧腹大笑。 第一轮:核心技…...
关于文件分片的介绍和应用
文件分片,顾名思义,就是将一个大文件分割成多个小的文件块(chunk)。每个文件块都是原始文件的一部分,并可以通过特定的方式将这些小文件块重新组装成原始文件。 1. 基本原理: 文件分片从底层来看,主要是对…...

Tapered Off-Policy REINFORCE_ 如何为LLM实现稳定高效的策略优化?
Tapered Off-Policy REINFORCE: 如何为LLM实现稳定高效的策略优化? 在大语言模型(LLM)的微调领域,强化学习(RL)正成为提升复杂任务性能的核心方法。本文聚焦于一篇突破性论文,其提出的Tapered …...
使用lvm进行磁盘分区
使用lvm进行磁盘分区 目的: 使用/dev/vdb创建一个5g的逻辑卷挂载到/mnt/lvmtest 前提: /dev/vdb是一块干净的空磁盘,数据会被清空!!! 1. 创建物理卷(PV): pvcreate /dev/sdb2. 验证…...

[Java实战]Spring Boot整合Elasticsearch(二十六)
[Java实战]Spring Boot整合Elasticsearch(二十六) 摘要:本文通过完整的实战演示,详细讲解如何在Spring Boot项目中整合Elasticsearch,实现数据的存储、检索和复杂查询功能。包含版本适配方案、Spring Data Elasticsea…...

图像分割(1)U-net
一、整体结构 虽然说是几年前的产品,但是现在还在用,因为深度学习很多时候越是简单的网络用起来效果越好,而且一般是目标比较小的时候产生的分割问题。u-net的优势就是网络结构简单,适合小目标分割,所以一直用到现在&a…...
数位和:从定义到编程实现
1. 定义 数位和(Digit Sum)是指一个数的每一位数字相加的总和。例如: 123 的数位和:1 2 3 645 的数位和:4 5 9 2. 计算方法 计算数位和的通用步骤: 提取每一位数字:从右到左&…...

2025抓包工具Reqable手机抓包HTTPS亲测简单好用-快速跑通
前言 自安卓7.0高版本系统不在信任用户证书,https抓包方式市面查找方法太过复杂手机要root等,前置条件要求太高太复杂,看的头痛,今天一台电脑按步骤操作完即可抓包https,给大家搞定抓包https问题。支持直接编辑修改请求参…...

使用 Auto-Keras 进行自动化机器学习
使用 Auto-Keras 进行自动化机器学习 了解自动化机器学习以及如何使用 auto-keras 完成它。如今,机器学习并不是一个非常罕见的术语,因为像 DataCamp、Coursera、Udacity 等组织一直在努力提高他们的效率和灵活性,以便将机器学习的教育带给普…...
python 自动化教程
文章目录 前言整数变量字符串变量列表变量算术操作比较操作逻辑操作if语句for循环遍历列表while循环定义函数调用函数导入模块使用模块中的函数启动Chrome浏览器打开网页定位元素并输入内容提交表单关闭浏览器发送GET请求获取网页内容使…...

简单使用Slidev和PPTist
简单使用Slidev和PPTist 1 简介 前端PPT制作有很多优秀的工具包,例如:Slidev、revealjs、PPTist等,Slidev对Markdown格式支持较好,适合与大模型结合使用,选哟二次封装;revealjs适合做数据切换,…...

RISC-V 开发板 MUSE Pi Pro V2D图像加速器测试,踩坑介绍
视频讲解: RISC-V 开发板 MUSE Pi Pro V2D图像加速器测试,踩坑介绍 今天测试下V2D,这是K1特有的硬件级别的2D图像加速器,参考如下文档,但文档中描述的部分有不少问题,后面会讲下 https://bianbu-linux.spa…...
人工智能100问☞第26问:什么是贝叶斯网络?
贝叶斯网络是基于有向无环图和条件概率表构建的概率图模型,用于表达变量间的条件依赖关系并进行不确定性推理。 一、通俗解释 想象你玩侦探游戏,要通过零散线索推理真相。贝叶斯网络就像一张"因果关系地图"——用箭头把事件连起来,并标注每个事件发生的概率。比…...

c++多线程debug
debug demo 命令行查看 ps -eLf|grep cam_det //查看当前运行的轻量级进程 ps -aux | grep 执行文件 //查看当前运行的进程 ps -aL | grep 执行文件 //查看当前运行的轻量级进程 pstree -p 主线程ID //查看主线程和新线程的关系 查看线程栈结构 pstack 线程ID 步骤&…...

如何畅通需求收集渠道,获取用户反馈?
要畅通需求收集渠道、有效获取用户反馈,核心在于多样化反馈入口、闭环反馈机制、用户分层管理、反馈数据结构化分析等四个方面。其中,多样化反馈入口至关重要,不同用户有不同的沟通偏好,只有覆盖多个反馈路径,才能捕捉…...
标准库、HAl库和LL库(PC13初始化)
标准库 (Standard Peripheral Library) c #include "stm32f10x.h"void GPIO_Init_PC13(void) {GPIO_InitTypeDef GPIO_InitStruct;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);GPIO_InitStruct.GPIO_Pin GPIO_Pin_13;GPIO_InitStruct.GPIO_Mode GPIO_…...
LangGraph深度解析:构建持久化、可观测的智能体工作流
一、项目概述与技术定位 1.1 LangGraph核心价值 LangGraph是由LangChain团队推出的开源框架(GitHub仓库:https://github.com/langchain-ai/langgraph),专为构建持久化、状态化的智能体工作流设计。作为LangChain生态系统的战略补充,它解决了传统LLM应用在以下方面的关键…...

设备预测性维护的停机时间革命:中讯烛龙如何用AI重构工业设备管理范式
在工业4.0的智能化浪潮中,非计划停机每年吞噬企业3%-8%的产值。中讯烛龙预测性维护系统通过多模态感知矩阵分布式智能体的创新架构,实现设备健康管理的范式跃迁,帮助制造企业将停机时间压缩70%以上。本文将深度解析技术实现路径与行业级实践方…...
day29 python深入探索类装饰器
目录 一、类装饰器的初步理解 二、类装饰器与函数装饰器的对比 三、类装饰器的实现与应用 (一)为类添加日志功能 (二)动态方法绑定的两种方式 四、手动调用装饰器:类的“后天改造” 五、总结与展望 一、类装饰器…...

Python数据分析三剑客:NumPy、Pandas与Matplotlib安装指南与实战入门
Python数据分析三剑客:NumPy、Pandas与Matplotlib安装指南与实战入门 1. 引言 Python数据分析生态:NumPy、Pandas、Matplotlib是数据科学领域的核心工具链。适用场景:数值计算、数据处理、可视化分析(如金融分析、机器学习、科研…...
二:操作系统之进程控制块(PCB)
进程的身份证与状态记录:深入理解进程控制块 (PCB) 在我们之前的博客中,我们探讨了进程是什么——程序的一次执行实例,以及进程在其生命周期中会经历的各种状态(新建、就绪、运行、等待、终止)。我们知道,…...

Spring-Beans的生命周期的介绍
目录 1、Spring核心组件 2、Bean组件 2.1、Bean的定义 2.2、Bean的生命周期 1、实例化 2、属性填充 3、初始化 4、销毁 2.3、Bean的执行时间 2.4、Bean的作用域 3、常见问题解决方案 4、与Java对象区别 前言 关于bean的生命周期,如下所示: …...

Android 自定义悬浮拖动吸附按钮
一个悬浮的拨打电话按钮,使用CardViewImageView可能会出现适配问题,也就是图片显示不全,出现这种问题,就直接替换控件了,因为上述的组合控件没有FloatingActionButton使用方便,还可以有拖动和吸附效果不是更…...
通过串口设备的VID PID动态获取串口号(C# C++)
摘要 本篇文章主要介绍分别通过C#和C++使用设备VID PID如何动态获取COM口 目录 1 简述 2 VID PID查看方式 3 C#实现通过串口设备的VID PID动态获取串口号 3.1 辅助类实现 3.2 调用实例 4 C++实现通过串口设备的VID PID动态获取串口号 4.1 辅助类实现 4.2 调用实例 1 简…...
[创业之路-361]:企业战略管理案例分析-2-战略制定-使命、愿景、价值观的失败案例
一、失败案例 1、使命方面的失败案例 真功夫创业者内乱:真功夫在创业过程中,由于股权结构不合理,共同创始人及公司大股东潘宇海与实际控制人、董事长蔡达标产生管理权矛盾。双方在公司发展方向、管理改革等方面无法达成一致,导致…...
Window远程连接Linux桌面版
Window远程连接Linux桌面版 卸载RealVNC Server 一、确认是否安装了 VNC Server 先检查是否已安装: which vncserver # 或 dpkg -l | grep vnc # 或 rpm -qa | grep vnc二、在 Debian / Ubuntu 上卸载(.deb 安装) 1. 卸载 RealVNC Serve…...

一种开源的高斯泼溅实现库——gsplat: An Open-Source Library for Gaussian Splatting
一种开源的高斯泼溅实现库——gsplat: An Open-Source Library for Gaussian Splatting 文章目录 一种开源的高斯泼溅实现库——gsplat: An Open-Source Library for Gaussian Splatting摘要Abstract1. 基本思想1.1 设计1.2 特点 2. Nerfstudio&Splatfacto2.1 Nerfstudio2.…...