Three.js可拖动形状
Three.js draggable shape
我正在研究可拖动立方体的代码
但我无法理解在平面和选定对象之间创建偏移的原因,就像代码的这一部分:
function onDocumentMouseDown( event ) {
event.preventDefault();
var vector = new THREE.Vector3( mouse.x, mouse.y, 0.5 );
projector.unprojectVector( vector, camera );
var raycaster = new THREE.Raycaster( camera.position, vector.sub( camera.position ).normalize() );
var intersects = raycaster.intersectObjects( objects );
if ( intersects.length > 0 ) {
controls.enabled = false;
SELECTED = intersects[ 0 ].object;
var intersects = raycaster.intersectObject( plane );
offset.copy( intersects[ 0 ].point ).sub( plane.position );// OFFSET
container.style.cursor = 'move';
}
}
移动时的对象坐标与鼠标在平面上的点击坐标有关,因此会发生偏移。可以在没有偏移的情况下进行:
function onDocumentMouseMove( event ) {
...if ( SELECTED ) {
var intersects = raycaster.intersectObject( plane );
SELECTED.position.copy( intersects[ 0 ].point );
}
}
尝试一下,你会感觉到不同。你也可以在这个例子的基础上做。查看控制台中的消息。
<script src="js/controls/EventsControls.js"></script>
EventsControls = new EventsControls( camera, renderer.domElement );
EventsControls1.attachEvent( 'dragAndDrop', function () {
this.container.style.cursor = 'move';
this.focused.position.y = this.previous.y;
});
var mesh = new THREE.Mesh( geometry, material );
scene.add( mesh );
EventsControls.attach( mesh );
相关文章:
- 通过拖动可以更改三维模型对象在Three.js场景中的位置
- 如何使所有绘制的(矩形、圆形、直线、多边形)都可拖动?纯JS
- 交互.js拖动的项目移动到顶部
- d3.js:在强制布局中使用缩放时,将禁用拖动
- 在Matter.js中隐藏绿色约束拖动轨迹
- 纸张.js路径数据动画在帧和鼠标拖动
- 隐藏 Raphael JS Freetransform 上的手柄,但继续拖动
- Three.js中的文本覆盖会中断拖动
- 无法获取interact.js拖动&放弃交互以使用Boostrap元素
- 使用像素检测后无法拖动Kinetic.JS图像
- three.js拖动多个对象
- 排斥移动JS可拖动克隆
- 在Backbone.js视图中拖动gabilly.js事件
- 将指针事件重新触发到较低层(用于与 interact.js 进行不规则形状的拖动)
- 是否有一个JS库可以让我在网格中制作可拖动和可调整大小的磁贴,就像在iPhoto Journal中一样
- Ember.js可拖动和可拖放的jqueryUI / native Drag and drop mixin
- 使用锤子.js拖动事件
- 在 raphael js 中缩放/拖动矩形
- 可排序.js不起作用:列表项不可拖动
- 使用 D3.js 拖动元素时滚动