三.在position.set()之后,光线投射器与原始网格位置相交
THREE.Raycaster intersecting original mesh position after position.set()
使用THREE. js,当我使用position.set()定位对象时,THREE。Raycaster似乎不知道对象的新设置位置。如果我将对象设置为0,0,0,则网格将正确相交。
function init(){
var targets = [];
var object;
// More scene initializing code...
// creating a cube object and placing it at (-10,0,-10)
var objectGeometry = new THREE.CubeGeometry(2,2,2);
var objectMaterial = new THREE.PhongMeshMaterial({color: 0xEEEEEE });
object = new THREE.Mesh(objectGeometry, objectMaterial);
object.position.set(-10, 0, -10);
scene.add(object);
targets.push(object);
// more objects created and added to the scene
}
我有一个字符控制器,我可以移动相机,所以我插入字符(obj)和目标测试在一个函数testRay();
function testRay(obj,targets,distance){
// code to keep the ray pointing out in front of the character at all times
var endRayX = (Math.cos((270*(Math.PI/180))-obj.rotation.y)*distance + obj.position.x);
var endRayZ = (Math.sin((270*(Math.PI/180))-obj.rotation.y)*distance + obj.position.z);
var vector = new THREE.Vector3(endRayX,obj.position.y,endRayZ);
var raycaster = new THREE.Raycaster(obj.positon,vector);
intersects = raycaster.intersectObjects(targets);
if(intersects.length>0){
console.log("intersects.length: "+ intersects.length);
console.log("intersects.distance: "+ intersects[0].distance);
console.log("intersects.face: "+ intersects[0].face);
console.log("intersects.point: " + intersects[0].point);
console.log("intersects.object: " + intersects[0].object);
}
}
然后每次调用requestAnimationFrame(main),我将testRay()插入角色控制器和目标,看看它们是否相交。
function main(){
// some other code
testRay(character,targets,30)
window.requestAnimationFrame(main);
}
好的,所以问题是不让它相交,这很好。它在创建过程中使用position.set()后使其与对象的新位置相交。我注意到我可以简单地通过交叉来移动物体,这似乎也移动了交叉坐标。在将物体添加到场景中之后移动它会更好吗?有区别吗?
这个问题有点老了,但也许会对某人有所帮助:我也遇到过类似的问题。似乎three.js使用对象世界变换矩阵进行射线相交,根据您的操作顺序,这可能在position.set();
之后和raycaster.intersectObject();
调用之前没有更新。我相信当物体在场景中渲染时,这是自动完成的,但在我的情况下,物体实际上并不在场景中。我所要做的就是在做光线投射之前调用object.updateMatrixWorld()
。
相关文章:
- 使用 jQuery 的 .on 函数如何获取事件的原始元素
- 剑道网格jQuery动画()问题
- 使用Dnamics CRM 2011中的JavaScript读取子网格的所有记录,而不考虑活动页面
- 我可以更改剑道UI网格吗's的外键值
- 使用jQuery从原始页面内容创建iframe
- jqGrid树网格问题
- 从客户端获取修改后的对象,并将其与服务器上的原始对象组合
- 在Three.js中导出网格会提高性能吗
- 如何在剑道网格初始化后设置pageSizes
- 在threejs中使用纹理网格和线框网格
- 如何在可分组的剑道网格中设置空数据文本
- 如何在Angular UI网格中选择下一行
- ExtJS网格单元格编辑器,防止焦点松动问题
- 多维数据集网格未在指定的分区中绘制
- 光线投射从内部投射时不会碰到网格
- 使用javascript在MVC中查找网格长度时出错
- Kendo UI网格取消不会恢复原始数据
- 剑道网格,在dataBound调用中访问原始绑定行
- 当改变剑道网格单元格值并恢复到保存前的原始值时显示脏标志
- 三.在position.set()之后,光线投射器与原始网格位置相交