javascript - 跟随鼠标光标three.js的3d模型
问题描述
我最近发现了这个three.js
图书馆,我已经用了几天来试验它。我想在项目中添加一个鼠标事件,实际上与此示例完全相同,即跟随光标的头骨,只是我只想使用我的 JSON 3D 模型(而在示例中也有模型的眼睛和下巴动画来模拟咬合)
这是示例的链接: https ://codepen.io/interaktiv-ca/pen/XayZPx
我尝试了几次,通过这个例子,在我的项目中实现它,但结果总是负面的。
我的基本设置如下:
var scene = new THREE.Scene();
var camera = new THREE.PerspectiveCamera ( 50, window.innerWidth / window.innerHeight, 1, 1000 );
camera.position.z = 15;
var renderer = new THREE.WebGLRenderer();
renderer.setSize( window.innerWidth, window.innerHeight);
document.body.appendChild ( renderer.domElement );
controls = new THREE.OrbitControls ( camera, renderer.domElement );
var loader = new THREE.ObjectLoader();
loader.load("/model/skull.json",function ( obj ) {
var box = new THREE.Box3().setFromObject ( obj );
var center = new THREE.Vector3();
box.getCenter( center );
obj.position.sub ( center );
obj.rotation.y = Math.PI;
scene.add ( obj );
});
var animate = function () {
requestAnimationFrame( animate );
renderer.render( scene, camera );
}
animate();
解决方案
您必须定义 raycaster 以了解对象的新位置。您可以在下面使用我的示例代码
onMouseMove(event) {
const that = this;
const mouse = this.mouse;
mouse.x = (event.clientX / window.innerWidth) * 2 - 1;
mouse.y = -(event.clientY / window.innerHeight) * 2 + 1;
raycaster.setFromCamera(mouse, this.camera);
const objectListSelect = [];
objectListSelect.push(this.plane); // your object will moving around this plane
const intersects = raycaster.intersectObjects(objectListSelect);
const item = intersects[i];
yourobject.position.copy(item.point);
}
推荐阅读
- c# - ASP.Net 中的错误
- javascript - Vue.js 渲染页面是如何发生的?
- java - 谁将垃圾收集或卸载垃圾收集器
- python - 正则表达式捕获正则表达式匹配上方的 2 行
- android - 需要旧版本的 gradle 错误
- java - 改为配置 Spring 事务或 EJB CMT
- angular - store.select subscribe 中的更改检测需要 markForCheck。为什么?
- python - 没有名为 QtOpenGL 的模块
- javascript - Angular 2+ 在元素之间切换,基于点击
- c# - 使用 C# 将图片保存到数据库 MySQL 中的特定行中