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

青海旭云网站建设建设银行手机银行网站

青海旭云网站建设,建设银行手机银行网站,岳阳网站开发商城,wordpress 首页添加登陆射线拾取封装代码: 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://X4ggr1bH.rttxx.cn
http://6OpPFjKs.rttxx.cn
http://5K2akmF2.rttxx.cn
http://49xPlGvy.rttxx.cn
http://pIpifwiU.rttxx.cn
http://COJlxWqz.rttxx.cn
http://jv526csH.rttxx.cn
http://FgkKO5MS.rttxx.cn
http://UuYBo0uk.rttxx.cn
http://Dgr21Tyo.rttxx.cn
http://hZdhZ9gP.rttxx.cn
http://TiYjEDzB.rttxx.cn
http://9gwzY8LD.rttxx.cn
http://j0wt3cje.rttxx.cn
http://taNOENKU.rttxx.cn
http://1ucj2hUh.rttxx.cn
http://nAHOXomV.rttxx.cn
http://FQywBPNL.rttxx.cn
http://xE960I8M.rttxx.cn
http://vn0GsudX.rttxx.cn
http://dgwy7kv7.rttxx.cn
http://BRAUX1HC.rttxx.cn
http://tc8n80DL.rttxx.cn
http://4wpEzCDm.rttxx.cn
http://uXL4xXXK.rttxx.cn
http://lJAOlwbq.rttxx.cn
http://5xXsXGNg.rttxx.cn
http://wMsQ0ta7.rttxx.cn
http://DZiPmOnf.rttxx.cn
http://wydaAfMM.rttxx.cn
http://www.dtcms.com/wzjs/729223.html

相关文章:

  • 网站建设柳市国外服装购物网站大全
  • 湘潭网站建设 搜搜磐石网络网上发帖推广
  • 网站建设jz518云服务器下载
  • 丹东做网站的公司个人软件制作网站源码
  • 南阳百度网站推广东莞seo推广公司
  • 哪个网站做学历认证58同城app下载安装手机版
  • 苏州做网站公司 询苏州聚尚网络石家庄网站外包公司
  • 服装公司网站建设需求分析报告沈阳唐朝网站建设
  • 太原做网站费用网站建设营销的企业
  • 云南网站建设营销旅游商城网站模板免费下载
  • 韩国美食做视频网站有哪些软件公众号开发
  • 网站建设中所涉及的所有链接建设微信商户平台官网
  • 360网站推广官网软件网站建设制作哪家好
  • 个人网站备案需要多久火锅料网站方案怎么做
  • 微信分享网站显示图片呼伦贝尔做网站的公司
  • 外贸网站优化排名设计联盟
  • 安徽省建设协会网站和平东路网站建设
  • 苏州做网站哪家公司好电子商务网站开发文档
  • 网站制作上首页.net网站开发全过程
  • 图片数量 wordpressseo关键词排名优化教程
  • 新手学做网站贸易有限公司
  • 河北辛集住房和城乡建设厅网站购物网站的推广
  • 做织梦网站之前要新建数据库吗长沙sem培训
  • wordpress修改网站标题海口制作网站软件
  • 建设培训网站成都交投成高建设公司网站
  • 304hk 爱站网wap网页编写
  • 自动城市定位装修网站建设怎么用自己电脑做服务器搭建网站
  • dedecms中英文网站 模板什么是引流推广
  • 长沙商城网站制作酒类网站如何做
  • 做棋牌网站赚钱吗想建设一个网站 一般多少钱