thirty-two(模型点击展示)react-three-fiber
模型点击蒙版展示
点击展示目的(用户需要看见模型中更加多的内容信息)
使用技术 ThreeJs、React-three-fiber、React-three-drei、React、css
整体思路:
1、在展示模型中点击模型将模型数据和visible信息存储
2、将模型数据和visible数据传入蒙版显示页面
3、蒙版层点击关闭,模型层浮于蒙版层之上
<Canvas orthographic camera={{ zoom: 600 }}>
具体实现:
场景模型中点击
<mesh
onClick={(eve) => {
if (data.name.includes('layer') && !data.name.includes('interlayer01')) {
eve.stopPropagation();
showBox(data);
}
}} >
const showBox = (data: any) => {
setModul(data);
setBoxModulVisible(true);
};
需要蒙版显示
显示与隐藏
import { Clone, useGLTF } from '@react-three/drei';
import { Canvas } from '@react-three/fiber';
import classNames from 'classnames/bind';
import { cloneDeep } from 'lodash-es';
import { useThreeContext } from '../../context/ThreeContext';
import styles from '../../styles/model.module.scss';
const cx = classNames.bind(styles);
const Ge = () => {
const { setBoxModulVisible, boxModulVisible, modul } = useThreeContext();
const copyData = cloneDeep(modul);
delete copyData.position;
delete copyData.rotation;
const { nodes }: any = useGLTF('./box-20.gltf');
const box = nodes[`box-20`];
delete box.position;
delete box.rotation;
return (
<>
{JSON.stringify(copyData) !== '{}' && (
<>
<div
className={cx('show')}
onClick={() => setBoxModulVisible(false)}
style={{ display: boxModulVisible ? '' : 'none' }}
></div>
<div className={cx('content')} style={{ display: boxModulVisible ? '' : 'none' }}>
<Canvas orthographic camera={{ zoom: 600 }}>
<pointLight position={[0, 1, 4]} />
<ambientLight />
<mesh rotation={[0.05, -0.05, 0]}>
<Clone object={copyData} />
</mesh>
<mesh rotation={[0.05, -0.05, 0]} position-y={-0.165} position-x={-0.435}>
<Clone object={box} />
</mesh>
</Canvas>
</div>
</>
)}
</>
);
};
export default Ge;
css样式
底层模板
.show {
width: 100%;
height: 100%;
position: absolute;
z-index: 999999998;
top: 0;
left: 0;
right: 0;
background-color: #000;
opacity: 0.4;
color: #f00;
}
模型层
.content {
z-index: 999999999;
height: 300px;
width: 600px;
position: absolute;
top: 50%;
bottom: 50%;
left: 0;
right: 0;
margin: auto;
background-color: #fff;
}
ps:想要实现的功能基本实现,之前使用antd的modul发现每次渲染出的canvas大小来回变(具体问题还未查明)
thirty-two(模型点击展示)react-three-fiber的更多相关文章
- cesium加载gltf模型点击以及列表点击定位弹窗
前言 cesium 官网的api文档介绍地址cesium官网api,里面详细的介绍 cesium 各个类的介绍,还有就是在线例子:cesium 官网在线例子,这个也是学习 cesium 的好素材. 之 ...
- 手写React的Fiber架构,深入理解其原理
熟悉React的朋友都知道,React支持jsx语法,我们可以直接将HTML代码写到JS中间,然后渲染到页面上,我们写的HTML如果有更新的话,React还有虚拟DOM的对比,只更新变化的部分,而不重 ...
- jquery特效(1)—点击展示与隐藏全文
下班了~~~我把今天整理的一个jquery小特效发一下,个人觉得比较简单,嗖嗖的就写出来了~~~ 下面先来看最终的动态效果: 一.来看一下主体框架程序: <!DOCTYPE html> & ...
- osg fbx模型点击节点,对应节点染色
class CPickHandler :public osgGA::GUIEventHandler { public: CPickHandler(osgViewer::Viewer *viewer) ...
- tp5 商品模型的添加展示
路由 //商品模型展示的路由 Route::get('type','/pyg/good/listType'); //将type_id传送至/pyg/good/addType的路由 Route::get ...
- 《TensorFlow2深度学习》学习笔记(四)对笔记二中的模型增加正确率展示
全部代码如下:(红色部分为与笔记二不同之处) #1.Import the neccessary libraries needed import numpy as np import tensorflo ...
- ThreeJS模型展示为黑色,模型出不来
选取gltf格式时,出现模型为黑色,模型出不来 原因: 我们设计部可能是用maya或者3dmax去做:在模型导出时,没有gltf格式:如果maya或者3dmax导出obj然后导进blender,再导出 ...
- React: 认识React
一.简介 React-Native是Facebook开源的跨平台框架,用于实现前端和原生进行混合开发.React-Native开发可以很好的使用原生UI构建用户界面,与传统的使用WebView相比,不 ...
- 个人关于React的一些理解
##React背景 React是当前前端最火的框架,它的理念思想及构建方法比AngularJS更适合做webApp. 它是由facebook团队研发并开源到社区,所以它有很强大的技术背景,而且它的架构 ...
- React和ES6(二)ES6的类和ES7的property initializer
React与ES6系列: React与ES6(一)开篇介绍 React和ES6(二)ES6的类和ES7的property initializer React与ES6(三)ES6类和方法绑定 React ...
随机推荐
- 最大K段和
题目大意 有一个长度为 \(N\) 的序列 \(A\) .他希望从中选出不超过 \(K\) 个连续子段,满足它们两两不相交,求总和的最大值(可以一段也不选,答案为 \(0\)). 分析 很容易想到 \ ...
- [EULAR文摘] 滑膜HIF-1a与类风湿关节炎的关节破坏
滑膜HIF-1a与类风湿关节炎的关节破坏 Wei XN, et al. EULAR 2015. Present ID: OP0070. 背景:低氧诱导因子(HIF)-1α是缺氧条件下细胞反应的一个关键 ...
- 代码随想录算法训练营day03 | LeetCode 203/707/206
基础知识 数据结构初始化 // 链表节点定义 public class ListNode { // 结点的值 int val; // 下一个结点 ListNode next; // 节点的构造函数(无 ...
- vue-seamless-scroll滚动加点赞衔接处数据不同步问题
VUE使用vue-seamless-scroll自动滚动加点赞,因为有两个overhidden导致点击不同同步dom,在代码中会出现两处vue-seamless-scroll上下悬接,悬接处点赞触发没 ...
- 基于Python的OpenGL 06 之摄像机
1. 引言 本文基于Python语言,描述OpenGL的摄像机 前置知识可参考: 基于Python的OpenGL 05 之坐标系统 - 当时明月在曾照彩云归 - 博客园 (cnblogs.com) 笔 ...
- Cesium加载三维路线
1. 概述 将路线加载到三维地图中,能直观显示道路的坡度变化,协同DEM和遥感影像,能极大丰富道路的可视化效果 本文此处基于Cesium,加载地形数据,叠加遥感影像,再叠加路网数据,形成三维地图,效果 ...
- .NET 中创建录音机和播放器应用
前言 在本博客中,你将了解如何在 .NET MAUI 中开发录音机和播放器.音频播放器将录制和播放音频文件.此应用程序可以在Android和iOS上部署和使用. 预览 以下是该录音机和播放录音的应用程 ...
- 13.OpenFeign测试远程调用
以会员服务调用优惠券服务为例 引入依赖 在之前创建微服务模块时已经引入了这个依赖,就不需要重复引入了 添加要被member微服务调用的coupon微服务的coupon的方法 在member微服务添加一 ...
- wibu软授权(五)
本篇将尝试根据RAU的asn1定义手动生成一份自定义的RAU文件,看看能不能通过wibu软授权系统的验证 准备工具 python3 asn1tools Ubuntu 18.04 CodeMeter R ...
- element-ui的collapse中嵌套table表格 的 高度跳跃 问题
<script src="//unpkg.com/vue@2.6.10/dist/vue.js"></script><script src=" ...