Three.js css2d Css3D的使用

news/2024/12/16 14:19:07/

Three.js css2d Css3D的使用在这里插入图片描述

import * as THREE from 'three'
import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js'
import { CSS2DRenderer, CSS2DObject } from 'three/examples/jsm/renderers/CSS2DRenderer.js'
import { CSS3DRenderer, CSS3DObject } from 'three/examples/jsm/renderers/CSS3DRenderer.js'const DOM = document.getElementById('box')const scene = new THREE.Scene()const camera = new THREE.PerspectiveCamera(75, DOM.clientWidth / DOM.clientHeight, 0.1, 1000)camera.position.set(10, 10, 10)const renderer = new THREE.WebGLRenderer()renderer.setSize(DOM.clientWidth, DOM.clientHeight)DOM.appendChild(renderer.domElement)new OrbitControls(camera, renderer.domElement)scene.add(new THREE.AxesHelper(500))// Css3DOM
const css3DRender = setCss3DRenderer(DOM)// Css2DOM
const css2DRender = setCss2DRenderer(DOM)const setCss2dDOM = (DOM, position) => {DOM.style.pointerEvents = 'auto'const mesh = new CSS2DObject(DOM)mesh.position.copy(position)scene.add(mesh)return mesh}const setCss3dDOM = (DOM, position) => {const mesh = new CSS3DObject(DOM)mesh.position.copy(position)scene.add(mesh)return mesh}for (let i = 0; i < 5; i++) {setCss2dDOM(createDom('2D' + i), { x: 0, y: 0, z: i * 2 }) // 2d domsetCss3dDOM(createDom('3D' + i), { x: 0, y: i * 2, z: 0 }).scale.multiplyScalar(0.02) // 3d dom}animate()function animate() {requestAnimationFrame(animate)renderer.render(scene, camera)css3DRender.render(scene, camera) // Css3D渲染css2DRender.render(scene, camera) // Css2D渲染}window.onresize = () => {renderer.setSize(box.clientWidth, box.clientHeight)camera.aspect = box.clientWidth / box.clientHeightcamera.updateProjectionMatrix()css3DRender.resize()css2DRender.resize()}// 创建dom
function createDom(text) {const div = document.createElement('div')const img = document.createElement('img')img.src = `https://threehub.cn/` + '/files/author/z2586300277.png'img.style.width = '50px'img.style.height = '50px'div.appendChild(img)div.innerHTML += textdiv.style.color = 'white'return div}/* css2d渲染 */
function setCss2DRenderer(DOM) {const css2DRender = new CSS2DRenderer()css2DRender.resize = () => {css2DRender.setSize(DOM.clientWidth, DOM.clientHeight)css2DRender.domElement.style.zIndex = 0css2DRender.domElement.style.position = 'relative'css2DRender.domElement.style.top = -DOM.clientHeight * 2 + 'px'css2DRender.domElement.style.height = DOM.clientHeight + 'px'css2DRender.domElement.style.width = DOM.clientWidth + 'px'css2DRender.domElement.style.pointerEvents = 'none'}css2DRender.resize()DOM.appendChild(css2DRender.domElement)return css2DRender}/* css3d 渲染 */
function setCss3DRenderer(DOM) {const css3DRender = new CSS3DRenderer()css3DRender.resize = () => {css3DRender.setSize(DOM.clientWidth, DOM.clientHeight)css3DRender.domElement.style.zIndex = 0css3DRender.domElement.style.position = 'relative'css3DRender.domElement.style.top = -DOM.clientHeight + 'px'css3DRender.domElement.style.height = DOM.clientHeight + 'px'css3DRender.domElement.style.width = DOM.clientWidth + 'px'css3DRender.domElement.style.pointerEvents = 'none'}css3DRender.resize()DOM.appendChild(css3DRender.domElement)return css3DRender}/*** 名称: CSS元素* 作者: 优雅永不过时 https://github.com/z2586300277
*/

http://www.ppmy.cn/news/1555603.html

相关文章

【操作系统】实验二:观察Linux,使用proc文件系统

实验二 观察Linux&#xff0c;使用proc文件系统 实验目的&#xff1a;学习Linux内核、进程、存储和其他资源的一些重要特征。读/proc/stat文件&#xff0c;计算并显示系统CPU占用率和用户态CPU占用率。&#xff08;编写一个程序使用/proc机制获得以及修改机器的各种资源参数。…

网站被间歇性扫描,IP不断更换,我的应对方法

文章目录 背景应对方式封ip自动不响应策略代码为啥不上其他防护软件呢&#xff1f; 背景 我负责的一个网站&#xff0c;不出名&#xff0c;平时也没多少流量。1天有几百个就不错了。没想到&#xff0c;这么不起眼的网站也有被人盯上的时候。 一天&#xff0c;后台使用人员告诉…

OpenCV 功能函数介绍

一&#xff0c; 二值化函数 功能&#xff1a; 用于对图像进行二值化处理 参数&#xff1a; cv2.threshold(输入你的图像所对应的灰度图&#xff0c; 阈值&#xff1a;是浮点还是整数取决予图像的数据类型 最大值;高于阈值的像素值&#xff0c; 阈值类型&#xff1a;cv2.THR…

Spring Boot 3.0与Jakarta EE 10的深度解析

随着Java生态的不断演进&#xff0c;Spring Boot和Jakarta EE始终是现代Java开发中的两大核心框架。在2023年&#xff0c;Spring Boot 3.0与Jakarta EE 10的发布标志着Java技术又迈上了一个新的台阶。这篇文章将为您详细解析这些新技术的关键更新&#xff0c;并探讨如何将其应用…

DDR5 中的数据反馈判决均衡(DFE):全面解析与展望

目录 一、引言二、DFE原理三、DFE架构四、实现方案五、测试方法六、DFE效果七、成本与收益八、具体应用九、技术发展趋势十、参考文献 一、引言 DDR5 作为新一代内存标准&#xff0c;其中的数据反馈判决均衡&#xff08;DFE&#xff09;技术更是引人注目。DFE即判决反馈均衡&a…

110.【C语言】数据结构之判断是否为完全二叉树

目录 1.知识回顾 2.分析 完全二叉树队列示意图 非完全二叉树队列示意图 区别 3.代码 执行过程 完整代码 运行结果 1.知识回顾 完全二叉树和非完全二叉树参见100.【C语言】数据结构之二叉树的基本知识文章 2.分析 使用层序遍历(队列),核心思想参见109.【C语言】数据结…

ArcGIS教程(007):制作中国行政区划图

文章目录 000:数据准备001:利用地理数据制作中国行政区划图000:数据准备 通过网盘分享的文件:ArcGIS教程(007):中国行政区划图教程练习数据.zip 链接: https://pan.baidu.com/s/1nMiRYD-dbv2S0DoeQzR87g?pwd=3535 提取码: 3535001:利用地理数据制作中国行政区划图 ne_…

【安卓开发】【Android Studio】启动时报错“Unable to access Android SDK add-on list”

一、问题描述 在启动Android Studio时&#xff0c;软件报错&#xff1a;Unable to access Android SDK add-on list&#xff0c;报错截图如下&#xff1a; 二、原因及解决方法 初步推测是由于网络节点延迟&#xff0c;无法接入谷歌导致的。点击Cancel取消即可。