gpt4 book ai didi

javascript - Raycaster 不会移动 BoxMesh 对象

转载 作者:行者123 更新时间:2023-11-28 06:32:37 24 4
gpt4 key购买 nike

我正在使用 Physijs 脚本来处理像万有引力这样的物理现象。我想使用 THREE.js 脚本中的 Raycaster 移动场景中的对象。我的问题是 Raycaster 只移动声明如下的对象(简单框):

var box = new Physijs.Mesh(cubeGeomtery.clone(), createMaterial);

但是物理在这里不起作用。仅当我声明如下时它才有效:

var create = new Physijs.BoxMesh(cubeGeomtery.clone(), createMaterial);

但是这里 Raycaster/移动不起作用。

这两者之间的区别在于,第一个只是 Mesh,而第二个则是 BoxMesh

有人知道为什么这不起作用吗?我需要 BoxMesh 才能使用重力和其他物理原理。

添加立方体的代码

function addCube()
{
controls.enable = false;
var cubeGeomtery = new THREE.CubeGeometry(85, 85, 85);
var createTexture = new THREE.ImageUtils.loadTexture("images/rocks.jpg");
var createMaterial = new THREE.MeshBasicMaterial({ map: createTexture });
var box = new Physijs.BoxMesh(cubeGeomtery.clone(), createMaterial);
box.castShadow = true;
box.receiveShadow = true;
box.position.set(0, 300, 0);
objects.push(box);
scene.add(box);
}

最佳答案

说明

在 Physijs 中,所有原始形状(例如 Physijs.BoxMesh )都继承自 Physijs.Mesh ,它又继承自 THREE.Mesh 。在 Physijs.Mesh构造函数中,有一个小的内部对象:._physijs field 。并且,在该对象中,有... shape type声明,设置为null默认情况下。该字段必须由其子字段之一重新分配。如果没有,当形状传递到场景时,Physijs 工作脚本将不知道要生成什么样的形状并简单地中止。自 Physijs.Scene继承自THREE.Scene ,场景在内部保留了网格的引用,这意味着 THREE.js 中的所有方法都将起作用(例如光线转换)。但是,它永远不会注册为物理对象,因为它没有类型!

现在,当您尝试移动 Physijs.BoxMesh 时直接使用其位置和旋转场,它会立即被物理更新覆盖,该更新以.simulate开始。场景对象中的方法。调用时,它会委托(delegate)工作人员计算与场景中的物理配置相对应的新位置和旋转。完成后,新值将传输回主线程并自动更新,因此您无需执行任何操作。在某些情况下这可能会成为一个问题(比如这个!)。幸运的是,开发者在Physijs.Mesh中包含了2个特殊字段。 :.__dirtyPosition.__dirtyRotation旗帜。以下是如何使用它们:

// Place box already in scene somewhere else
box.position.set(10, 10, 10);

// Set .__dirtyPosition to true to override physics update
box.__dirtyPosition = true;

// Rotate box ourselves
box.rotation.set(0, Math.PI, 0);
box.__dirtyRotation = true;

标志重置为 false通过 .simulate 再次更新场景后方法。

结论

创建Physijs.Mesh基本没什么用您自己可以使用提供的原语之一来代替。它只是 THREE.Mesh 的包装。对于 Physij,并且在被其子级之一正确修改之前没有物理属性。

此外,当使用 Physijs 网格时,始终设置 .__dirtyPosition.__dirtyRotation对象中的属性可分别直接修改位置或旋转。看一下上面的代码片段和 here .

关于javascript - Raycaster 不会移动 BoxMesh 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34569703/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com