three.js 精灵模型Sprite作为标签

效果:

 

<template><div><el-container><el-main><div class="box-card-left"><divid="threejs"style="border: 1px solid red; position: relative"></div></div></el-main></el-container></div>
</template>
<script>
// 引入轨道控制器扩展库OrbitControls.js
import { OrbitControls } from "three/examples/jsm/controls/OrbitControls.js";
import { GLTFLoader } from "three/examples/jsm/loaders/GLTFLoader.js";
// 效果制作器
import { EffectComposer } from "three/examples/jsm/postprocessing/EffectComposer.js";
// 渲染通道
import { RenderPass } from "three/examples/jsm/postprocessing/RenderPass.js";
// 发光描边OutlinePass
import { OutlinePass } from "three/examples/jsm/postprocessing/OutlinePass.js";
import {CSS2DObject,CSS2DRenderer,
} from "three/examples/jsm/renderers/CSS2DRenderer.js";
import {CSS3DObject,CSS3DSprite,CSS3DRenderer,
} from "three/examples/jsm/renderers/CSS3DRenderer.js";export default {data() {return {name: "",scene: null,camera: null,renderer: null,css3DRenderer: null,effectComposer: null,mesh: null,geometry: null,group: null,material: null,texture: null,position: null,outlinePass: null,canvasWidth: 1000,canvasHeight: 800,color: [],meshArr: [],};},created() {},mounted() {this.name = this.$route.query.name;this.init();},methods: {goBack() {this.$router.go(-1);},init() {// 创建场景对象this.scene = new this.$three.Scene();const axesHelper = new this.$three.AxesHelper(50);this.scene.add(axesHelper);// 形状缓冲几何体(ShapeGeometry)const pointers = [new this.$three.Vector2(0,0),new this.$three.Vector2(10,0),new this.$three.Vector2(0,10),]const shape = new this.$three.Shape(pointers);// 创建形状缓冲几何体对象,ShapeGeometry 只能是自定义二维的几何体,参数是Shape类型this.geometry = new this.$three.ShapeGeometry(shape);this.material = new this.$three.MeshBasicMaterial({color: 0xff99aa,side: this.$three.DoubleSide});this.mesh = new this.$three.Mesh(this.geometry, this.material);this.scene.add(this.mesh);// 创建盒模型对象const geometry = new this.$three.BoxGeometry(5,20,10);const boxMesh = new this.$three.Mesh(geometry, this.material);this.scene.add(boxMesh);// 创建textLoader加载器对象const textureLoader = new this.$three.TextureLoader();const texture = textureLoader.load('/img/threejs.jpeg')const spriteMaterial = new this.$three.SpriteMaterial({map: texture})// 创建精灵模型对象const sprite = new this.$three.Sprite(spriteMaterial);sprite.position.y += 12.2;sprite.scale.set(5,5,5);// 网格模型中添加精灵模型对象this.mesh.add(sprite);// 创建相机对象this.camera = new this.$three.PerspectiveCamera(60,1,0.01,2000);this.camera.position.set(20,15,20);this.camera.lookAt(0,0,0);// 创建渲染器对象this.renderer = new this.$three.WebGLRenderer();this.renderer.setSize(1000,800);this.renderer.render(this.scene, this.camera);window.document.getElementById("threejs").appendChild(this.renderer.domElement);// 创建空间轨道控制器对象const controls = new OrbitControls(this.camera, this.renderer.domElement);controls.addEventListener("change", e => {this.renderer.render(this.scene, this.camera);})this.renderFun();},renderFun() {this.renderer.render(this.scene, this.camera);requestAnimationFrame(this.renderFun);}},
};
</script>
<style lang="less" scoped>
.box-card-left {display: flex;align-items: flex-start;flex-direction: row;position: relative;width: 100%;.box-right {img {width: 500px;user-select: none;}}
}
</style>

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++ 动态规划 线性DP 最长共同子序列

给定两个长度分别为 N 和 M 的字符串 A 和 B &#xff0c;求既是 A 的子序列又是 B 的子序列的字符串长度最长是多少。 输入格式 第一行包含两个整数 N 和 M 。 第二行包含一个长度为 N 的字符串&#xff0c;表示字符串 A 。 第三行包含一个长度为 M 的字符串&#xff0c;表…

excel给数据库初始化/旧数据处理(自动sql拼装)

思路&#xff1a; 首先导出数据到excel编写单条数据操作的sql利用excel CONCATENATE 函数自动生成&#xff0c;每一行数据的操作sql 小技巧:对于需要套娃的字段值&#xff0c;可以加一个临时列同样使用CONCATENATE函数进行sql拼装 案例&#xff1a; 1.临时列:CONCATENATE(C2, …

MyBatis笔记梳理

文章目录 什么是 MyBatis&#xff1f;前期准备依赖配置文件mapper利用注解 增、删、改、查查增改删#{} 和 ${} 的区别类型别名 动态sqlwhere ifforeachsql引用不常用标签 多表查询多对一&#xff08;一对一&#xff09;一对多多对多多表查询 个人理解 延迟加载概念使用场景延迟…

下载、安装Jenkins

进入官网 下载Jenkins https://www.jenkins.io 直接点击Download 一般是下长期支持版 因为它是java写的&#xff0c;你要运行它&#xff08;Jenkins.war&#xff09;肯定要有java环境 有两种方式去运行它&#xff0c;一种是下载Tomcat&#xff08;是很经典的java容器或者jav…

顺序表:数据结构的建筑积木

朋友们大家好啊&#xff0c;本节内容我们进入数据结构的第二节&#xff0c;顺序表有关内容&#xff0c;同步我们会学习计组原理与cpp相关知识&#xff0c;求三连啊&#xff01; 本节我们重点探讨动态顺序表关于插入数据和删除数据的多种情况的分析 顺序表 线性表顺序表静态顺序…

2024-01-07-AI 大模型全栈工程师 - 做自己的产品经理

摘要 2024-01-07 周日 杭州 阴 本节内容: a. 如何做好独立开发设计&#xff0c;实现财富自由&#xff1b; 课程内容 1. 独立开发者 英文 indie hacker&#xff0c;是指独立开发软件产品的人&#xff1b;一人承担一个项目产品的所有工作&#xff1b; 2. 创业机会 云计算设…

在 Windows 和 Mac 上恢复已删除文件的 8 种方法

如果您最近才删除该文件&#xff0c;通常可以从回收站 (PC) 或垃圾箱 (Mac) 快速恢复它。只要您备份计算机&#xff0c;您就应该能够从最近的备份之一恢复已删除的文件。如果您没有其他选择&#xff0c;您可以使用 Recuva (Windows) 或 Disk Drill (Mac) 等文件恢复软件来增加恢…

【Linux系统化学习】进程替换

目录 进程程序替换 替换原理 ​编辑替换函数 函数解释 命名理解 函数使用 execl execlp execv execvp 调用其它程序 进程程序替换 替换原理 用fork创建子进程后执行的是和父进程相同的程序(但有可能执行不同的代码分支),子进程往往要调用一种exec函数以执行另一个…

《计算机网络简易速速上手小册》第9章:物联网(IoT)与网络技术(2024 最新版)

文章目录 9.1 IoT 架构与通信协议 - 打造智能世界的秘诀9.1.1 基础知识9.1.2 重点案例&#xff1a;使用 Python 和 MQTT 实现智能家居照明系统准备工作Python 脚本示例发布者&#xff08;灯光控制&#xff09;订阅者&#xff08;灯光状态接收&#xff09;&#xff1a; 9.1.3 拓…

网络异常案例二_RST

IP冲突导致的内网服务器访问异常问题 问题现象&#xff0c;个人台式机某天访问内网服务器异常&#xff0c;反馈给运维同学。 运维同学答复正常&#xff0c;他本地可以访问&#xff0c;自己用笔记本验证也可以正常访问。 没有头绪&#xff0c;抓包分析&#xff0c;发现请求全部…

Facebook的数字合作愿景:创新与未来发展

随着科技的飞速发展&#xff0c;Facebook一直处于数字创新的前沿&#xff0c;致力于构建开放、智能、社交的数字社交体验。本文将深入探讨Facebook的数字合作愿景&#xff0c;探索其在创新与未来发展方面的雄心壮志。 引言 在当今数字化时代&#xff0c;社交媒体不仅是人们沟通…

C++内存管理详解

目录 一、C/C内存分布 2.C语言中动态内存管理方式&#xff1a;malloc/calloc/realloc/free 2.1malloc 2.2calloc 2.3realloc 2.4free 3.C内存管理方式 3.1new和malloc 3.2new和delete操作自定义类型 3.3operator new和operator delete 3.4new和delete的实现原理 3.4.1内置类型 …