首页 > 其他分享 >threeJS代码示例(004): 监听键盘空格键,切换两个不同的几何体

threeJS代码示例(004): 监听键盘空格键,切换两个不同的几何体

时间:2025-01-22 09:29:35浏览次数:3  
标签:threeJS scene 示例 THREE currentMesh new 几何体

作者: 还是大剑师兰特 ,曾为美国某知名大学计算机专业研究生,现为国内GIS领域高级前端工程师,CSDN知名博主,深耕openlayers、leaflet、mapbox、cesium,canvas,echarts等技术开发,欢迎加微信(gis-dajianshi),一起交流。

查看本专栏目录 - 本文是第 004个示例

文章目录

一、示例效果图

二、示例简介

本threeJS示例通过不同的Geometry创建两个几何体,一个box,另一个球体,通过监听键盘的空格键,来切换显示不同的几何体。

三、配置说明

1)查看基础设置:https://dajianshi.blog.csdn.net/article/details/141936765
2)将示例源代码,粘贴到src/views/Home.vue中,npm run serve 运行即可。

四、示例源代码(共105行)

/*
* @Author: 大剑师兰特(xiaozhuanlan),还是大剑师兰特(CSDN)
* @此源代码版权归大剑师兰特所有,可供学习或商业项目中借鉴,未经授权,不得重复地发表到博客、论坛,问答,git等公共空间或网站中。
* @Email: 2909222303@qq.com
* @First published in xiaozhuanlan
* @Second published in CSDN
* @First published time: 2024-09-24
*/
<template>
	<div class="container">
		<h3>ThreeJS示例(004): 监听键盘空格键,切换两个不同的几何体</h3>
		<p>大剑师兰特, 还是大剑师兰特</p>
		<div id="vue-three"></div>
	</div>
</template>

<script>
	import * as THREE from "three";
	export default {
		data() {
			return {
			}
		},
		methods: {
			initThree() {
				// 创建场景
				var scene = new THREE.Scene();
				// 创建相机
				var camera = new THREE.PerspectiveCamera(75, 96 / 53, 0.1, 1000);
				camera.position.z = 5;

				// 创建渲染器
				var renderer = new THREE.WebGLRenderer();
				renderer.setSize(960, 530);
				let dom = document.getElementById('vue-three');
				dom.appendChild(renderer.domElement);

				// 创建两个几何体
				const boxGeometry = new THREE.BoxGeometry(1.2, 1.2, 1.2);
				const sphereGeometry = new THREE.SphereGeometry(0.5, 32, 32);

				const material = new THREE.MeshBasicMaterial({
					color: 0x00ff00
				});

				// 默认显示一个几何体
				let currentMesh = new THREE.Mesh(boxGeometry, material);
				scene.add(currentMesh);
				// 创建另一个几何体备用
				const boxMesh = currentMesh;
				const sphereMesh = new THREE.Mesh(sphereGeometry, material);

				// 切换几何体
				function switchGeometry() {
					if (currentMesh === boxMesh) {
						// 如果当前是box,则切换成sphere
						scene.remove(currentMesh);
						currentMesh = sphereMesh;
						scene.add(currentMesh);
					} else {
						// 如果当前是sphere,则切换成box
						scene.remove(currentMesh);
						currentMesh = boxMesh;
						scene.add(currentMesh);
					}
				}

				// 监听键盘事件
				document.addEventListener('keydown', function(event) {
					if (event.key === ' ') { // 当按下空格键时切换几何体
						switchGeometry();
					}
				});

				// 渲染函数
				function animate() {
					requestAnimationFrame(animate);
					renderer.render(scene, camera);
				}
				animate();

			},
		},
		mounted() {
			this.initThree();
		}

	}
</script>
<style scoped>
	.container {
		width: 1000px;
		height: 660px;
		margin: 10px auto;
		border: 1px solid #42B983;
	}

	#vue-three {
		width: 960px;
		height: 530px;
		margin: 0 auto;
		border: 1px solid #42B983;
		position: relative;
	}
</style>


五、相关文章参考

https://dajianshi.blog.csdn.net/article/details/141935205

标签:threeJS,scene,示例,THREE,currentMesh,new,几何体
From: https://blog.csdn.net/cuclife/article/details/143405086

相关文章

  • threeJS代码示例(002):两种方法更改Scene的颜色
    作者:还是大剑师兰特,曾为美国某知名大学计算机专业研究生,现为国内GIS领域高级前端工程师,CSDN知名博主,深耕openlayers、leaflet、mapbox、cesium,canvas,echarts等技术开发,欢迎加微信(gis-dajianshi),一起交流。查看本专栏目录-本文是第002个示例文章目录一、......
  • threeJS代码示例(003): 添加地面并铺上草坪
    作者:还是大剑师兰特,曾为美国某知名大学计算机专业研究生,现为国内GIS领域高级前端工程师,CSDN知名博主,深耕openlayers、leaflet、mapbox、cesium,canvas,echarts等技术开发,欢迎加微信(gis-dajianshi),一起交流。查看本专栏目录-本文是第003个示例文章目录一、......
  • threejs避免重复创建CSS2DObject
    代码如下:constcss2DObjects=[];constcreateLabelObj=(idText,)=>{letdiv=document.getElementById(idText);for(vari=0;i<css2DObjects.length;i++){constpreDiv=css2DObjects[i].element;if(preDiv.id===idTex......
  • 一个简单的PHP单文件路由类示例
    <?phpclassRouter{protected$routes=array();protected$basePath;publicfunction__construct($basePath=null){if($basePath){$this->basePath=rtrim($basePath,'/');}else{......
  • 鸿蒙HarmonyOS开发:自适应布局的介绍,使用场景、实现方式与示例解析
    文章目录一、布局简介二、自适应拉伸1、左右拉伸2、均分拉伸三、自适应缩放1、完整缩放2、占比缩放四、自适应延伸1、同功能内容延伸2、不同功能内容延伸或隐藏五、自适应折行一、布局简介自适应布局是通过设定元素与外部容器的相对关系实现的。当外部容器大小......
  • xe-utils 函数库使用示例
    xe-utils是一个功能丰富的JavaScript工具库,提供了大量的实用函数来简化常见的编程任务。它特别适用于与vxe-table(一个基于Vue.js的表格组件库)结合使用,但也可以独立应用于任何JavaScript项目中。安装xe-utils你可以通过npm或yarn安装xe-utils:npminstallxe-utils......
  • js原型链理解示例
    a函数继承b函数,b函数继承c函数,那a函数的实例abc可以直接读取c函数的prototype属性吗?在JavaScript中,函数可以通过原型链继承其他函数的属性和方法。上面提到“a函数继承b函数,b函数继承c函数”,通常是指构造函数之间的继承关系,这涉及到原型链的层级结构。在这种情况下,a的实例可以......
  • 使用 Java 获取淘宝推荐商品列表 API 接口的示例代码解析
    在电商领域,推荐系统是提升用户体验和促进销售的重要工具。淘宝开放平台提供了taobao.item.recommend接口,允许开发者根据用户行为、搜索关键词或分类ID获取推荐商品列表。本文将详细介绍如何使用Java调用该接口,并解析返回的数据。一、淘宝推荐商品接口简介taobao.item.reco......
  • Vue2_了解核心概念和一个示例工程
    Vue2_了解核心概念和一个示例工程写文的目的是为了梳理知识,正如某一位面试官所说:会写并不牛,懂原理才牛下面开始:vue具有较好的可维护性和可测试性vue是一个渐进式框架(请忽略我这灵魂画手......
  • 配置基于VLAN的VLAN Mapping示例(2 to 1)
    此举例是2to1VLANMapping中的N:1场景,因为外层和内层VLANTag不同的业务报文,外层映射到了同一个VLAN。如图10-7所示,用户通过家庭网关、楼道交换机和小区交换机接入汇聚层网络,为了节省运营商网络VLAN资源,及实现不同用户相同业务在传输过程中相互隔离,可以在楼道交换机上部署Q......