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

临沂外贸网站建设制作网站代码

临沂外贸网站建设,制作网站代码,成都网站备案,本公司经营网站建设射线拾取封装代码: import * as THREE from three; // 点击事件// 1.坐标转化(鼠标单击的屏幕坐标转标准设备坐标)// 2.射线计算(通过鼠标单击位置相机参数计算射线值)// 3.射线交叉计算// ObjectsArr是用来做射线拾取的对象数组,一个二维数组 export f…

射线拾取封装代码:

import * as THREE from 'three';
// 点击事件// 1.坐标转化(鼠标单击的屏幕坐标转标准设备坐标)// 2.射线计算(通过鼠标单击位置+相机参数计算射线值)// 3.射线交叉计算// ObjectsArr是用来做射线拾取的对象数组,一个二维数组
export function rayChoose(event,width, height, camera, ObjectsArr) {// .offsetY、.offsetX以canvas画布左上角为坐标原点,单位pxconst px = event.offsetX;const py = event.offsetY;//屏幕坐标px、py转WebGL标准设备坐标x、y//width、height表示canvas画布宽高度const x = (px / width) * 2 - 1;const y = -(py / height) * 2 + 1;//创建一个射线投射器`Raycaster`const raycaster = new THREE.Raycaster();//.setFromCamera()计算射线投射器`Raycaster`的射线属性.ray// 形象点说就是在点击位置创建一条射线,射线穿过的模型代表选中raycaster.setFromCamera(new THREE.Vector2(x, y), camera);// 未选中对象返回空数组[],选中一个对象,数组1个元素,选中两个对象,数组两个元素const intersects = raycaster.intersectObjects(ObjectsArr);// intersects.length大于0说明,说明选中了模型let choosedObj = null;if (intersects.length > 0) {// 选中模型的第一个模型choosedObj = intersects[0].object;} else {choosedObj = null;}return choosedObj;
}

首先得获取射线拾取的对象集合,放在二位数组里,不同的模型,获取集合方式不同,具体要结合模型来写代码,提前跟建模师沟通好物体名称。

例如以下方法:

model.js

import * as THREE from 'three';
// 引入gltf模型加载库GLTFLoader.js
import {GLTFLoader
} from 'three/addons/loaders/GLTFLoader.js';export const model = new THREE.Group();
const loader = new GLTFLoader();
export const granaryArr = []; //所有粮仓模型对象的集合,export导出用于射线拾取loader.load("models/粮仓.glb", function(gltf) {//把gltf.scene中的所有模型添加到model组对象中model.add(gltf.scene);// 所有粮仓模型的父对象名称:'粮仓'const group = gltf.scene.getObjectByName('粮仓');//console.log('粮仓', group);group.traverse(function(obj) {if (obj.type === 'Mesh') {granaryArr.push(obj);}})
});

在vue文件里,rayChoose要放在addEventListener里使用。

index.vue

<template><!-- 封装射线拾取案例 -->
</template><script setup>import {model,granaryArr} from './model.js'; //模型对象import {renderer,scene,camera,width,height} from './init.js';import {rayChoose} from '../../utils/rayChoose.js';scene.add(model); //模型对象添加到场景中renderer.domElement.addEventListener('click', function(event) {// choosedObj只能放在addEventListener内部使用const choosedObj = rayChoose(event, width,height,camera,granaryArr);console.log(choosedObj);})
</script><style>
</style>

获取到choosedObj后,可以对其进一步处理,比如高光描边,弹出一个信息框等等。

http://www.dtcms.com/wzjs/361467.html

相关文章:

  • 做恋足的视频网站seo关键词分析表
  • wordpress 360cdn关键词seo资源
  • 可靠的赣州网站建设排名app
  • 网站开发做网站seo最好的工具
  • 网站备案的要求是什么情况恢复正常百度
  • 网站开发项目可行性产品推广计划怎么写
  • wordpress淘宝模板电脑优化大师官方免费下载
  • 微软网站怎么做的海南网站网络推广
  • 哪家做网站公司域名注册服务网站
  • 政府办工作网站建设工作计划网站免费下载安装
  • 网站建设会计分录怎么做百度一下知道首页
  • 个人网站备案后做游戏外贸网站建设案例
  • apache 多网站seo优化方向
  • apache 网站建设源码网
  • 网盘建网站开发一个网站的步骤流程
  • 濮阳网站建设熊掌号盘古搜索
  • 网站建设信息线上推广app
  • h5做网站教程百度快速排名点击器
  • 网页设计与制作的岗位职责虞城seo代理地址
  • 更新备案 网站 打开seo网络优化公司
  • c 博客网站开发教程搜索词分析
  • 上海网站建设内容更新建立网站需要什么
  • 电子商务与网站建设怎样制作一个网站
  • 垫江网站建设电商怎么做
  • p2p平台网站开发百度搜图匹配相似图片
  • 做澳洲外贸的网站有哪些百度推广账户登录首页
  • 郑州专业做网站推广技巧
  • 怎么跟网站建设公司谈怎么免费自己做推广
  • 中国建盏品牌形象设计大赛爱站网站长seo综合查询
  • 网站开发语言分类企业seo排名外包