如何将场景中的对象添加到网格中而不改变其在three.js中的位置
how to add a object in scene to a mesh without changing its position in three.js
我想保持一个对象在场景中的位置,并想将该对象的父对象从场景更改为任何其他网格http://plnkr.co/edit/fpjsUkOA0rH6FvG4DL6Z?p=preview
在这个例子中,当我试图将球体添加到长方体时,它的position
正在改变。我想保持原始位置。尝试删除第35行中的注释,拼写正在向长方体移动。我想保留它的位置并使球体成为长方体的子对象http://plnkr.co/edit/fpjsUkOA0rH6FvG4DL6Z?p=preview
如果问题仅依赖于position
,则Brakebein的答案可能是正确的。但如果你还需要恢复scale
和rotation
,那么你应该做这样的东西,我认为:
var inversionMatrix = new THREE.Matrix4();
inversionMatrix.getInverse( parentObject.matrix );
childObject.applyMatrix(inversionMatrix);
如果将球体添加到组中,只需将组的位置从球体的位置减去,即可使其保持在原始世界位置。
var material = new THREE.MeshLambertMaterial({color: 0x00ff00});
var boxGeometry = new THREE.BoxGeometry(5, 15, 5);
var box = new THREE.Mesh(boxGeometry, material);
var sphereGeometry = new THREE.SphereGeometry( 5, 32, 32 );
var sphere = new THREE.Mesh(sphereGeometry, material);
sphere.position.set(0, 10, 0);
sphere.updateMatrix();
var group = new THREE.Object3D();
group.translateX(6);
group.updateMatrix();
// if you add sphere to group object
group.add(box);
group.add(sphere);
scene.add(group);
var m = new THREE.Matrix4().getInverse(group.matrixWorld);
sphere.applyMatrix(m);
// if you add sphere to box
group.add(box);
box.add(sphere);
scene.add(group);
var m = new THREE.Matrix4().getInverse(box.matrixWorld);
sphere.applyMatrix(m);
console.log(group.position, sphere.position);
相关文章:
- Javascript改变位置赢得'不适用于Chrome或IE
- 最大宽度正在改变位置:固定边距
- 当javascript改变两个标签的宽度时,它们会自动改变位置
- Bootstrap popover以分辨率改变位置
- JavaScript:检测窗口开始改变位置的时刻
- 改变位置引导-wysihtml5
- 如何在动画完成后随机改变位置
- Jquery背景改变位置的步骤
- LeafletJS:获取一个特定的标记来改变位置
- 相位定时器不改变位置对象,只改变位置值
- 改变位置.在重新加载页面时散列
- 在D3散点图中,点在放大时改变位置
- 如何改变位置和z-索引使用jquery(动画)
- Gmaps.js - zoomControlOpt不会改变位置或样式
- JQuery根据位置显示元素——如果父元素不在屏幕上,工具提示应该改变位置
- 改变位置.在unbeforeunload上散列
- 离子改变位置不起作用
- 不改变位置的Angular路由
- 当使用setPosition改变位置时,谷歌标记消失
- 如果高度超过100px,改变位置