Three.js加载PLY文件

 这是官方的例子

three.js webgl - PLY

我在Vue3中使用,测试了好久始终不显示点云数据。在网上查询后发现ply文件要放置在public目录下才行

			<el-row>
				<el-button type="primary" class="el-btn" @click="IniThree1">PLY</el-button>


				<div id="my-three" style="height:600px;width:100%"></div>

			</el-row>


<script setup lang="ts" name="Camera3DScan">
import { ref, onMounted, watch } from 'vue'
import axios from 'axios'
import { ElMessage } from 'element-plus';
import * as THREE from "three";
import { OrbitControls } from "three/examples/jsm/controls/OrbitControls";
import { PLYLoader } from 'three/examples/jsm/loaders/PLYLoader'

const scene = new THREE.Scene();
//创建一个透视相机,窗口宽度,窗口高度
const width = window.innerWidth, height = window.innerHeight;
const camera = new THREE.PerspectiveCamera(45, width / height, 1, 1000);
//创建一个WebGL渲染器
const renderer = new THREE.WebGLRenderer()

const IniThree1 = async () => {

	console.log('initThree --')

	// 添加多个模型(添加圆形)
	// const  geometry2 = new THREE.SphereGeometry(60, 40, 40);
	// const  material2 = new THREE.MeshLambertMaterial({
	//     color: 0xffff00
	// });
	// const mesh2 = new THREE.Mesh(geometry2, material2); //网格模型对象Mesh
	// // mesh3.translateX(120); //球体网格模型沿Y轴正方向平移120
	// mesh2.position.set(120,0,0);//设置mesh3模型对象的xyz坐标为120,0,0
	// scene.add(mesh2);
	scene.add(new THREE.HemisphereLight(0x8d7c7c, 0x494966, 3));
	//添加光源 //会照亮场景里的全部物体(氛围灯),前提是物体是可以接受灯光的,这种灯是无方向的,即不会有阴影。
	const ambient = new THREE.AmbientLight(0xffffff, 0.4);
	const light = new THREE.PointLight(0xffffff, 1);//点光源,color:灯光颜色,intensity:光照强度

	scene.add(ambient);
	light.position.set(200, 300, 400);
	scene.add(light);


	//设置相机位置
	camera.position.set(300, 300, 300);
	//设置相机方向
	camera.lookAt(0, 0, 0);

	//创建辅助坐标轴
	const axesHelper = new THREE.AxesHelper(200);//参数200标示坐标系大小,可以根据场景大小去设置
	scene.add(axesHelper);

	const loader = new PLYLoader();
	try {
		//在此运行代码
		//let s = '../../plublic/Static/ply/Lucy100k'
		//let s = './assets/ply/Result.ply'
		let s ='../public/Static/ply/Result.ply'

		loader.load(s,
			function (geometry) {
				console.log('loader.load ');
				//import {aa} from s;

				console.log(geometry);
				geometry.computeVertexNormals();

	

				const  material2 = new THREE.PointsMaterial({ size: 0.01 });
				//const material.vertexColors = true;
				let mesh2 = new THREE.Points(geometry, material2);
				mesh2.position.x = 0;
				mesh2.position.y = -1;
				mesh2.position.z = 0;
				mesh2.scale.multiplyScalar(0.2);
				mesh2.castShadow = true;
				mesh2.receiveShadow = true;
				scene.add(mesh2);

				scene.background = new THREE.Color(0x52645b);
				console.log('loader.load OK');

				// //创建一个物体(形状)
				// const geometry1 = new THREE.BoxGeometry(100, 200, 100);//长宽高都是100的立方体
				// console.log(geometry1);
				// // const geometry = new THREE.SphereGeometry(60,40,40);//半径是60的圆
				// //widthSegments, heightSegments:水平方向和垂直方向上分段数。widthSegments最小值为3,默认值为8。heightSegments最小值为2,默认值为6。
				// //创建材质(外观)
				// const material = new THREE.MeshLambertMaterial({
				// 	// color: 0x0000ff,//设置材质颜色(蓝色)
				// 	color: 0x00ff00,//(绿色)
				// 	transparent: true,//开启透明度
				// 	opacity: 0.5 //设置透明度
				// });
				// //创建一个网格模型对象
				// const mesh = new THREE.Mesh(geometry1, material);//网络模型对象Mesh
				// //把网格模型添加到三维场景
				// scene.add(mesh);//网络模型添加到场景中

			},
			function (xhr) {
				console.log((xhr.loaded / xhr.total) * 100 + "% loaded");
			},
			function (err) {
				console.error(err);
			}
		);
		console.log('loader ok')
	}
	catch (err) {
		//在此处理错误
		console.log(err)
	}
	console.log('loader ok end')

	
	renderer.setSize(width, height)//设置渲染区尺寸
	renderer.render(scene, camera)//执行渲染操作、指定场景、相机作为参数

	const controls = new OrbitControls(camera, renderer.domElement)//创建控件对象
	controls.addEventListener('change', () => {
		renderer.render(scene, camera)//监听鼠标,键盘事件
		console.log('mouse ')
	})

	document.getElementById('my-three')?.appendChild(renderer.domElement)
} 



//let cameraTarget, renderer;//scene: { background: any; fog: any; add: (arg0: any) => void; }, camera,


onMounted(() => {


	IniThree1()

})

最终效果

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Go 如何按行读取(大)文件?尝试 bufio 包提供的几种方式

嗨&#xff0c;大家好&#xff01;我是波罗学。本文是系列文章 Go 技巧第十七篇&#xff0c;系列文章查看&#xff1a;Go 语言技巧。 本文将介绍 Go 如何按行读取文件&#xff0c;基于此会逐步延伸到如何按块读取文件。 引言 我们将要介绍的按行读取文件的方式其实是非常适合…

每日OJ题_二叉树dfs⑥_力扣257. 二叉树的所有路径

目录 力扣257. 二叉树的所有路径 解析代码 力扣257. 二叉树的所有路径 257. 二叉树的所有路径 难度 简单 给你一个二叉树的根节点 root &#xff0c;按 任意顺序 &#xff0c;返回所有从根节点到叶子节点的路径。 叶子节点 是指没有子节点的节点。 示例 1&#xff1a; 输…

电路设计(27)——交通信号灯的multisim仿真

1.功能要求 使用数字芯片设计一款交通信号灯&#xff0c;使得&#xff1a; 主干道的绿灯时间为60S&#xff0c;红灯时间为45S 次干道的红灯时间为60S&#xff0c;绿灯时间为45S 主、次干道&#xff0c;绿灯的最后5S内&#xff0c;黄灯闪烁 使用数码管显示各自的倒计时时间。 按…

go-zero微服务入门教程

go-zero微服务入门教程 本教程主要模拟实现用户注册和用户信息查询两个接口。 准备工作 安装基础环境 安装etcd&#xff0c; mysql&#xff0c;redis&#xff0c;建议采用docker安装。 MySQL安装好之后&#xff0c;新建数据库dsms_admin&#xff0c;并新建表sys_user&#…

Springboot--整合定时任务quartz--集群篇

文章目录 前言一、quartz 的集群&#xff1a;1.1 服务集群带来的定时任务问题&#xff1a;1.2 服务集群定时任务解决思路&#xff1a; 二、quartz 集群实现&#xff1a;2.1 引入jar2.2 配置文件&#xff1a;2.3 定义quartz 数据源&#xff1a;2.4 集群测试&#xff1a;2.4.1 定…

介绍 CI / CD

目录 一、介绍 CI / CD 1、为什么要 CI / CD 方法简介 1、持续集成 2、持续交付 3、持续部署 2、GitLab CI / CD简介 3、GitLab CI / CD 的工作原理 4、基本CI / CD工作流程 5、首次设置 GitLab CI / CD 6、GitLab CI / CD功能集 一、介绍 CI / CD 在本文档中&#x…

【Pytorch深度学习开发实践学习】B站刘二大人课程笔记整理lecture07多维输入

lecture07多维输入 课程网址 Pytorch深度学习实践 部分课件内容&#xff1a; import torch import numpy as npxy np.loadtxt(diabetes.csv.gz, delimiter,, dtypenp.float32) x_data torch.from_numpy(xy[:,:-1]) #第一列开始最后一列不要 y_data torch.from_numpy(…

【Python_Zebra斑马打印机编程学习笔记(一)】实现标贴预览的两种方式

实现标贴预览的两种方式 实现标贴预览的两种方式前言一、调用 Labelary Online ZPL Viewer API 方法实现标贴预览功能1、Labelary Online ZPL Viewer API 案例介绍2、生成 PNG 格式3、Parameters 二、通过 zpl 的 label.preview() 方法实现标贴预览功能1、实现步骤2、代码示例 …

gitlab,从A仓库迁移某个工程到B仓库,保留提交记录

从A仓库&#xff0c;拷贝 git clone --bare ssh://git192.168.30.88:22/framework/platform.git 在B仓库新建工程&#xff0c;注意&#xff1a;一定要去掉默认的生成README文件进入platform.git 文件夹下&#xff0c;推送到B仓库 git push --mirror ssh://git192.168.30.100…

怎么用sora赚第一桶金?

&#x1f31f;解锁文字变视频的强大功能&#xff01;&#x1f31f; ✨欢迎来到 Sora Cand&#xff0c;一个革命性的网站&#xff0c;利用 OpenAI 的 Sora 模型帮你把文字变成酷炫的视频&#xff01;✨ 想象一下&#xff0c;你的文字从纸上跳出来&#xff0c;变成引人入胜的视觉…

全志T527国产核心板及米尔配套开发板批量上市!

2023年12月&#xff0c;米尔电子联合战略合作伙伴全志科技&#xff0c;率先业内发布了国产第一款T527核心板及开发板。这款高性能、高性价比、八核A55的国产核心板吸引了广大客户关注&#xff0c;为积极响应客户需求&#xff0c;米尔基于全志T527核心板现已批量上市&#xff0c…

RabbitMQ 部署方式选择

部署模式 RabbitMQ支持多种部署模式&#xff0c;可以根据应用的需求和规模选择适合的模式。以下是一些常见的RabbitMQ部署模式&#xff1a; 单节点模式&#xff1a; 最简单的部署方式&#xff0c;所有的RabbitMQ组件&#xff08;消息存储、交换机、队列等&#xff09;都运行在…

Java项目:21 基于SSM实现的图书借阅管理系统

作者主页&#xff1a;舒克日记 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 基于SSM实现的图书借阅管理系统设计了两个角色&#xff0c;分别是管理员、用户&#xff0c;在数据表user中以ident字段区分&#xff0c;为1表示管理员…

Math方法,以及三角函数计算

abs(x) 返回参数的绝对值 var xMath.abs(-5) //5floor(x) 向下舍入为最接近的整数。 var xMath.floor(2.1) //2ceil(x) 向上舍入为最接近的整数。 var xMath.ceil(2.1) //3fround(x) 最接近的&#xff08;32 位单精度&#xff09;浮点表示。 var xMath.fround(2.60) //2.59…

企业动态|上海航空工业集团殷舜晖部长一行到访同创永益

1月24日上午&#xff0c;中国商飞上海航空工业集团采购中心殷舜晖部长一行4人到访同创永益北京总部。同创永益COO马青山、营销副总经理刘翔、总经办主任田东陪同参观&#xff0c;并介绍了公司的发展历程与近年来的突出成绩。 在随后的会议中&#xff0c;马青山向殷舜晖部长一行…

AppBox快速开发框架(开源)开发流程介绍

目前很多低代码平台都是基于Web用拖拽方式生成界面&#xff0c;确实可以极大的提高开发效率&#xff0c;但也存在一些问题&#xff1a; 大部分平台灵活性不够&#xff0c;特殊需求需要较大的自定义开发&#xff1b; 解析json配置的执行效率不是太高&#xff1b; 大部分平台缺…

统计图雷达图绘制方法

统计图雷达图绘制方法 常用的统计图有条形图、柱形图、折线图、曲线图、饼图、环形图、扇形图。 前几类图比较容易绘制&#xff0c;饼图环形图绘制较难。 还有一种雷达图的绘制也较难&#xff0c;今提供雷达图的绘制方法供参考。 本方法采用C语言的最基本功能&#xff1a; &am…

k8s(2)

目录 一.二进制部署k8s 常见的K8S安装部署方式&#xff1a; k8s部署 二进制与高可用的区别 二.部署k8s 初始化操作&#xff1a; 每台node安装docker&#xff1a; 在 master01 节点上操作; 准备cfssl证书生成工具:&#xff1a; 执行脚本文件&#xff1a; 拉入etcd压缩包…

【目标检测新SOTA!v7 v4作者新作!】YOLO v9 思路复现 + 全流程优化

YOLO v9 思路复现 全流程优化 提出背景&#xff1a;深层网络的 信息丢失、梯度流偏差YOLO v9 设计逻辑可编程梯度信息&#xff08;PGI&#xff09;&#xff1a;使用PGI改善训练过程广义高效层聚合网络&#xff08;GELAN&#xff09;&#xff1a;使用GELAN改进架构 对比其他解法…

Airtest-Selenium实操小课③:下载可爱猫猫图片

1. 前言 那么这周我们看看如何实现使用Airtest-Selenium实现自动搜索下载可爱的猫猫图片吧~ 2. 需求分析和准备 整体的需求大致可以分为以下步骤&#xff1a; 打开chrome浏览器 打开百度网页 搜索“可爱猫猫图片” 定位图片元素 创建存储图片的文件夹 下载可爱猫猫图片…
最新文章