java - 如何在 Libgdx java 中拖动 3d 对象?
问题描述
我试图通过覆盖 touchDragged 函数来调用 3D 立方体。我已经找到了如何在 XZ 平面上拖动对象,但我不知道如何在 3D 中拖动对象。
@Override
public boolean touchDragged(int screenX, int screenY, int pointer) {
if (selecting < 0)
return false;
if (selected == selecting) {
Ray ray = cam.getPickRay(screenX, screenY);
final float distanceY = -ray.origin.y / ray.direction.y;
final float distanceX = -ray.origin.x / ray.direction.x;
final float distanceZ = -ray.origin.z / ray.direction.z;
final float distance;
if (oldRay!=null){
float absDifferenceX = Math.abs(ray.direction.x-oldRay.direction.x);
float absDifferenceY = Math.abs(ray.direction.y-oldRay.direction.y);
float absDifferenceZ = Math.abs(ray.direction.z-oldRay.direction.z);
float minAbsDifference = Math.min(Math.min(absDifferenceX,absDifferenceY),absDifferenceZ);
if (minAbsDifference == absDifferenceX ){
distance = distanceX;
}else if (minAbsDifference == absDifferenceY){
distance = distanceY;
}else{
distance = distanceZ;
}
}else{
distance = (distanceX+distanceY+distanceZ)/3.0f;
}
position.set(ray.direction).scl(distance).add(ray.origin);
objects.get(selected).transform.setTranslation(position);
oldRay = ray;
}
return true;
}
解决方案
推荐阅读
- c# - 在 WPF 中设置 CurrentCulture 和 CurrentUICulture
- python - 使用 autograd 进行优化
- circuit-sdk - 如何使用我的 USB 耳机为 Circuit Client 开发接口应用程序以支持呼叫控制功能?
- office365 - “读取 TLS 记录失败 (2)” 使用 Chilcat ActiveX 连接到 office365 IMAP
- java - Hibernate - 基类外键
- swift - 如何在 Xcode 中调试“前提条件失败”?
- python - Flask 中重复的关键字参数
- sql - 使用 SQL 正则表达式验证字符串
- sql - 如何在oracle中获取给定字符串之间的字符串
- r - 如何在 paste() 中用空格替换 NA?