threejs创建多个立方体,并支持鼠标点击选中

本文档详细介绍了如何使用three.js库创建多个立方体,并实现鼠标点击选中特定立方体的功能。从引入插件到创建渲染器、相机、视图控制器、场景,再到添加立方体和光照,最后实现渲染效果和展示完整代码,为读者提供了一个完整的three.js三维场景交互示例。
摘要由CSDN通过智能技术生成

threejs创建多个立方体,并支持鼠标点击选中


引入所需的插件

<script src="https://cdn.bootcss.com/three.js/r83/three.min.js"></script>
<!--该插件主要用于完成鼠标拖动改变相机视角-->
<script src="libs/OrbitControls.js"></script>

创建渲染器Renderer

把三维的场景渲染到显示屏上

renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth,window.innerHeight);
//container:浏览器画图区域对应的dom元素
container.appendChild(renderer.domElement);

创建相机Camera

相当于人的眼睛,看到物体的大小远近与相机的位置和设置有关

/*
        创建相机【远景相机,与人眼观察类似,近大远小】
        param1:视角【视角越大  物体渲染到屏幕时则看着越小,反之越大】
        param2:相机拍摄面的长宽比
        param3:近裁剪面,相机与物体的距离小于该值后将不在屏幕上显示
        param4:远裁剪面,相机与物体的距离大于该值后将不在屏幕上显示
*/
camera = new THREE.PerspectiveCamera(75,window.innerWidth/window.innerHeight,0.1,2000);
camera.position.set(10,10,800);

创建视图控制器OrbitControls

通过鼠标拖动和滑轮移动自动改变相机的位置,调整视角,重新渲染页面

controls = new THREE.OrbitControls( camera, renderer.domElement );
controls.addEventListener( 'change', render );

创建场景Scene

用于添加空间范围内需要显示的物体

scene = new THREE.Scene();
scene.background = new THREE.Color(0xf0f0f0);

创建辅助坐标轴AxisHelper

通过 X(屏幕右边) 、 Y(屏幕上边) 、 Z(屏幕由内到外) 三条轴线帮助你了解物体空间位置坐标

var axes = new THREE.AxisHelper(800);//参数设置了三条轴线的长度
scene.add(axes);

添加地面网格GirdHelper

在指定位置条件指定长度、数量的网格图形

/**
 * size 网格总边长
 * step 网格个数
 * colorCenterLine  网格中心线颜色
 * colorGrid    网格其他线颜色
 */
var gridHelper = new THREE.GridHelper( 300, 10, 'red', 'gray' );
gridHelper.position.y = -100;
gridHelper.position.x = 0;
scene.add( gridHelper );

添加空间正方体BoxGeometry Mesh

var geometry = new THREE.BoxGeometry(20,20,
Three.js是一个用于JavaScript的3D图形库,它允许你在Web浏览器上创建交互式的3D场景。要创建一个立方体并添加鼠标移入事件,你可以按照以下步骤操作: 1. **导入Three.js库**: 首先,在HTML文件中引入Three.js库: ```html <script src="https://threejs.org/build/three.min.js"></script> ``` 2. **初始化场景、相机和渲染器**: ```javascript const scene = new THREE.Scene(); const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000); const renderer = new THREE.WebGLRenderer(); renderer.setSize(window.innerWidth, window.innerHeight); document.body.appendChild(renderer.domElement); ``` 3. **创建立方体模型**: 使用`THREE.BoxGeometry`和`THREE.MeshBasicMaterial`创建一个基础的立方体: ```javascript const geometry = new THREE.BoxGeometry(1, 1, 1); const material = new THREE.MeshBasicMaterial({ color: 0x00ff00 }); const cube = new THREE.Mesh(geometry, material); scene.add(cube); ``` 4. **添加鼠标移入事件监听器**: 使用`THREE.Object3D`的`addEventListener`方法来监听鼠标移入事件,当鼠标指针移到立方体上时执行某些回调函数: ```javascript cube.addEventListener('mouseover', function() { cube.material.color.setHex(0xff0000); // 立方体颜色变为红色 }); cube.addEventListener('mouseout', function() { cube.material.color.setHex(0x00ff00); // 移开时恢复原色 }); ``` 这里`setHex`函数用来改变立方体表面的着色。 5. **设置动画和渲染循环**: 定义一个渲染函数并在窗口加载完成后启动它: ```javascript function animate() { requestAnimationFrame(animate); camera.position.z += 0.1; // 每次渲染移动摄像机一点远离立方体 renderer.render(scene, camera); } animate(); ```
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值