Java Libgdx选择模型实例

Java Libgdx选择模型实例,java,android,libgdx,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 =

我正在使用自定义模型的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-Ray=cam.getPickRay(screenX,screenY);
int结果=-1;
浮动距离=-1;
数组实例=buildingContainer.getAllRooms();
对于(int i=0;i=0f&&dist2>距离)
继续;

如果(dist2这个长度的计算对我来说是错误的。向量的长度是它自身的点积的平方根,所以我看不出光线方向和它有什么关系。我会的

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

顺便说一下,没有必要取dst2的绝对值。

长度是点(x)*点(x)的平方根,不是吗?
len
计算几乎是正确的(除了
abs
)(它是矢量投影)。此代码看起来像.OP:的修改版本。还原您所做的更改。如果您发现精度不足,请查看下一个教程(碰撞形状)看看如何改进。你不能期望光线对边界球检查达到近乎完美的精度。哦,我想我明白了。将向量投影到方向上会得到平行长度的平方?所以OP的
len
可能需要平方根?不,假设方向是标准化的,没有必要sqrt。