Libgdx选择ModelInstance

时间:2014-07-22 10:10:03

标签: java android libgdx

我正在使用libgdx和自定义模型。

模型有很多对象(房间)。

我使用ModelInstance的中心来检测被点击的对象。

Ray ray = cam.getPickRay(screenX, screenY);

        int result = -1;
        float distance = -1;

        Array<Room> instances = buildingContainer.getAllRooms();

        for (int i = 0; i<instances.size ; i++) {
            Room room = instances.get(i);

            if(room.floor == this.last_render_floor && room.is_room) {
                GameObject instance = instances.get(i).model;

                instance.transform.getTranslation(position);
                position.add(instance.center);



                final float len = Math.abs(ray.direction.dot(position.x-ray.origin.x, position.y-ray.origin.y, position.z-ray.origin.z));

                float dist2 = Math.abs(position.dst2(ray.origin.x+ray.direction.x*len, ray.origin.y+ray.direction.y*len, ray.origin.z+ray.direction.z*len));

                if (distance >= 0f && dist2 > distance) 
                    continue;

                if (dist2 <= instance.radius * instance.radius) {
                    result = i;
                    distance = dist2;
                } 

            }

        }
         clicked ++;

        return result;

一切正常,直到我改变相机位置。

我选错了房间。我认为与Ray的距离和房间的中心有问题。

任何消化如何修复它?

1 个答案:

答案 0 :(得分:0)

长度计算对我来说是错误的。矢量的长度是其点积与其自身的平方根,因此我不知道光线方向与它有什么关系。我会做的

final float len = tmpVec3.set(position).sub(ray.origin).len();

顺便说一下,不必采用dst2的绝对值。