Java Libgdx选择模型实例
我正在使用自定义模型的libgdx 模型有很多对象(房间) 我使用ModelInstance的中心来检测单击的对象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 =
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。