【问题标题】:THREE.js in node.js environmentnode.js 环境中的三个.js
【发布时间】:2013-12-09 10:03:51
【问题描述】:

由于制作了一些简单的多人游戏,我选择了 THREE.js 来实现浏览器端的图形。在浏览器上一切正常。

然后我想: 服务器必须检查大多数用户操作。所以我需要在服务器上拥有世界副本,与用户交互,然后将其状态返回给用户。

所以,由于已经为客户端编写了一段优秀的代码 - 我只是让它与 node.js 兼容并继续前进。 (良好的碰撞检测,可以使用object.geometry - 这正是我想要的)

因此,碰撞检测代码停止工作。在服务器端 Raycaster 退出 字符串

    } else if ( object instanceof THREE.Mesh ) {

        var geometry = object.geometry;

        // Checking boundingSphere distance to ray

        if ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();

        sphere.copy( geometry.boundingSphere );
        sphere.applyMatrix4( object.matrixWorld );

        if ( raycaster.ray.isIntersectionSphere( sphere ) === false ) {
            return intersects; // _HERE_

        }

这会发生,因为object.matrixWorld身份矩阵。 但是进行了对象初始化。 mesh.positionmesh.rotation 在服务器和客户端上是相同的(在浏览器中,raycaster 是一种魅力);

我想,object.matrixWorld 会在 renderer.render(self.three_scene, self.camera); 的某个地方更新。但当然,这不是我想在服务器端做的。

所以问题是:如何在服务器端的每个模拟滴答中更新object.matrixWorld

或者,也许是建议,如果有其他方法可以得到与我想要的相似的东西。

【问题讨论】:

    标签: node.js three.js collision-detection


    【解决方案1】:

    好的。

    这很简单。

    renderer.render 递归更新整个场景的矩阵。递归的入口是Object3D实例的updateMatrixWorld()函数。

    因此,在我们在服务器端使用 Raycaster 之前,我们应该为可碰撞网格列表中的每个网格调用此方法。

    【讨论】:

    • 为此苦苦挣扎了两个小时“为什么我的 raycaster 可以在本地工作,但不能在服务器端工作?”非常感谢,这使它现在也可以在服务器端工作:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-22
    • 1970-01-01
    • 2020-04-20
    • 1970-01-01
    相关资源
    最近更新 更多