如何检查物体是否在路上?

气泡

我是游戏开发和使用jMonkey引擎新手我开始开发无尽的跑步游戏。为了运行,我创建了带有Blender的地图并将其导入到jME。

如屏幕截图所示,我已将其添加到地形中并形成了一些山脉。现在,我需要获取地图的确切矢量点(屏幕截图中的A点,类似A点)。

这将帮助我检测正在运行的对象是否在地图上。有人可以给我答案或告诉我专家使用的替代方法吗?

这是截图

更新

我想检测运行对象是否在银色道路上。我怎样才能做到这一点?

1000毫升

解决该问题的常用方法是使用射线投射,其中测试一条假想线与化身(行驶的物体)下方的物体(地面,道路)的相交处。

这是一个使用jMonkeyEngine 3提供的机制的示例:

public boolean isOnRoad(Vector3f avatarPosition, Geometry road) {
    // Pointing downwards (assuming that the Y-axis is facing upwards in your game)
    Vector3f direction = new Vector3f(0, -1, 0);

    // Create a line that starts at 'avatarPosition' and has a direction
    Ray ray = new Ray(avatarPosition, direction);

    // Results of the collision test are written into this object
    CollisionResults results = new CollisionResults();

    // Test for collisions between the road and the ray
    road.collideWith(ray, results);

    // If there is a collision, avatarPosition is above the road
    return results.size() != 0;
}

您需要将化身的位置传递给函数。
avatarPosition = avatar.getLocalTranslation();

如果您的道路由打包到一个节点中的多个几何组成,则也可以将节点而不是单个几何传递到函数中。collideWith()在Node上调用将测试其所有子级。
如果节点还包含场景的其他部分,则上面的功能可能无法正常工作。

调用road.collideWith(ray, results)在第一次使用公路网时隐式构建BIH树(边界间隔层次树)。这将加快碰撞测试的速度,因为它不必针对道路的每个三角形检查射线。在每个更新周期中,这样做的速度将足够快。


此外,您可以处理碰撞测试的结果。
这将返回最接近起点的交点的确切点:

Vector3f p = results.getClosestCollision().getContactPoint();

使用迭代器,您可以分别处理所有冲突,从最接近到最远的冲突排序:

Iterator<CollisionResult> it = results.iterator();
while(it.hasNext())
{
    CollisionResult collisionResult = it.next();
    Vector3f p    = collisionResult.getContactPoint();
    Geometry geom = collisionResult.getGeometry();
    // Do something with contact point and geometry
}

有关碰撞的更多信息:http : //hub.jmonkeyengine.org/wiki/doku.php/jme3 : advanced :collision_and_intersection

射线投射还用于使用十字准线或鼠标在3D场景中选择对象。
这称为采摘:http : //hub.jmonkeyengine.org/wiki/doku.php/jme3 : beginner :
hello_picking

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何检查物体是否在移动

来自分类Dev

如何检查镜头前是否有物体?

来自分类Dev

检查位置是否在收费公路上

来自分类Dev

如何检查深层物体是否有价值

来自分类Dev

如何检查深层物体是否有价值

来自分类Dev

如何检查某个位置的物体?

来自分类Dev

如何检查特定位置的物体?

来自分类Dev

检查带有物理物体的精灵是否在PhysicalNode之外

来自分类Dev

如何确定用户是否与GPS坐标在同一条路上

来自分类Dev

如何确定用户是否与GPS坐标在同一条路上

来自分类Dev

如何确定用户是否与GPS坐标在同一条道路上

来自分类Dev

如何判断一个物体是否在另一个物体的距离之内?

来自分类Dev

检查一个物理物体是否在不等待didBeginContact的情况下接触另一个物体

来自分类Dev

检查两个物体是否碰撞并减速的最有效方法是什么?

来自分类Dev

如何检查我是否处于检查状态?

来自分类Dev

如何在laravel /雄辩中使用异物的等效性检查数据库中的物体?

来自分类Dev

如何检查活动是否启用?

来自分类Dev

如何检查NSWindow是否打开

来自分类Dev

如何检查ngIf是否生效

来自分类Dev

如何检查UIActivityTypeAirDrop是否存在

来自分类Dev

如何检查.prev()是否失败

来自分类Dev

如何检查元素是否存在?

来自分类Dev

如何检查文件是否被锁定?

来自分类Dev

如何检查功能是否存在

来自分类Dev

如何检查树是否是BST?

来自分类Dev

如何检查枚举是否相等

来自分类Dev

如何检查块是否扩展?

来自分类Dev

如何检查命令是否存在?

来自分类Dev

如何检查解析是否失败?