Libgdx - 桌面 - 鼠标悬停在3D模型实例上

时间:2014-10-19 22:46:10

标签: 3d libgdx intersection

我正在尝试计算鼠标悬停在Libgdx中的3D模型实例上的时间。截至目前,我的所有模型实例都是完美的矩形。我已经从鼠标的x和y坐标创建了一个拾取光线,并使用了Intersection类来尝试计算一个交集,但似乎只有在鼠标位于模型实例边界框的区域时才会注册交集。屏幕中心。实际上,模型实例有点偏离侧面。

我的理论是边界框仅存储模型实例的维度,而不存储位置。但是我还没有证明这一点,是否有另一种方法可以计算从鼠标坐标和模型实例的边界框得到的光线的交点?

这是我目前的代码。

// This class is correctly registered as an input processor
public boolean mouseMoved(int x, int y) {
    // Get the ray from the mouse's location
    Ray ray = pCam.getPickRay(x, y);

    // Get the model's bounding box
    BoundingBox box = new BoundingBox();
    box2.calculateBoundingBox(box);

    /* Partial 'box2' initialization code
        mb.node().id = "box2";
        mb.part("box", GL20.GL_TRIANGLES, Usage.Position | Usage.Normal | Usage.TextureCoordinates, new Material(ColorAttribute.createDiffuse(Color.GREEN))).box(4f, 1f, 4f);
        box2 = new ModelInstance(model, "box2");
        box2.transform.setToTranslation(2, 0, -2); 
     */

    // If the ray resides in the bounding box
    if (Intersector.intersectRayBoundsFast(ray, box)) {
        // Change the model instance color to red
        box2.materials.get(0).set(ColorAttribute.createDiffuse(Color.RED));
    }
    // Otherwise
    else {
        // Set the model instance color back to green
        box2.materials.get(0).set(ColorAttribute.createDiffuse(Color.GREEN));
    }
    // Default return false
    return false;
}

如果您能提供任何可以帮助我的建议或代码,我将永远感激不尽。另外,如果我能帮助我的话,请告诉我是否可以添加任何内容来澄清或帮助您。

1 个答案:

答案 0 :(得分:0)

方法Intersector.intersectRayBoundsFast返回相对于光线原点 的 交集。您只需添加光线的原点即可获得交点