Mar*_*gne 2 javascript 3d three.js
我试图让一个物体以一种自然的方式不断地看着鼠标。到目前为止,我已经设法
现在的问题是对象不遵循与鼠标相同的路径,而是始终采用最后一个位置来缓和。
我不知道如何解决这个问题。
// create object and add to scene
const sphere = new THREE.Mesh( geometry, material );
const origin = new THREE.Vector3(0, 0, 75);
sphere.position.x = 0;
sphere.position.z = 0;
sphere.lookAt(origin);
scene.add( sphere );
window.addEventListener("mousemove", onmousemove, false);
var plane = new THREE.Plane(new THREE.Vector3(0, 0, 1), 0);
var raycaster = new THREE.Raycaster();
var mouse = new THREE.Vector2();
var intersectPoint = new THREE.Vector3();
function onmousemove(event) {
var startRotation = sphere.quaternion.clone();
mouse.x = (event.clientX / window.innerWidth) * 2 - 1;
mouse.y = -(event.clientY / window.innerHeight) * 2 + 1;
raycaster.setFromCamera(mouse, camera);
raycaster.ray.intersectPlane(plane, intersectPoint);
intersectPoint.z = 75; // so that the object is still always facing the camera which has a position.z of 75 too
sphere.lookAt(intersectPoint);
var endRotation = sphere.quaternion.clone();
sphere.quaternion.copy( startRotation );
createjs.Tween.get(sphere.quaternion).to(endRotation, 1000, createjs.Ease.getPowOut(2.2));
marker.position.copy(intersectPoint);
}
Run Code Online (Sandbox Code Playgroud)
所以现在的目标是找到一种方法让对象跟随鼠标,但不仅仅是最后一个位置,而是它的整个路径。有任何想法吗?
您可以使用如下模式使对象以延迟缓动方式查看鼠标:
var target = new THREE.Vector3();
var mouseX = 0, mouseY = 0;
var windowHalfX = window.innerWidth / 2;
var windowHalfY = window.innerHeight / 2;
...
function onDocumentMouseMove( event ) {
mouseX = ( event.clientX - windowHalfX );
mouseY = ( event.clientY - windowHalfY );
}
function animate() {
requestAnimationFrame( animate );
target.x += ( mouseX - target.x ) * .02;
target.y += ( - mouseY - target.y ) * .02;
target.z = camera.position.z; // assuming the camera is located at ( 0, 0, z );
object.lookAt( target );
renderer.render( scene, camera );
}
Run Code Online (Sandbox Code Playgroud)
三.js r.131
| 归档时间: |
|
| 查看次数: |
2083 次 |
| 最近记录: |