конвертировать из мира в воксель, когда 1 воксель не равен 1 единице единства

Я делаю игру unity3d, которая требует использования воксельного движка для создания структур, за исключением того, что я планирую включить больше моделей, чем простые кубы, и некоторые из них довольно маленькие. Поэтому мне нужно, чтобы воксели были меньше 1 единичной единицы каждый (3 на единицу). Проблема в том, что у меня проблемы с преобразованием между мировым пространством и координатами вокселей из-за неравных размеров (если бы они были одинакового размера, это не было бы проблемой). Это то, что я пробовал до сих пор:

public Vector3 GetIndexFromWorld(Vector3 worldPos, Vector3 normals) {
    float half = ((1f / (float)VoxelsPerMeter) / 2f); // VoxelsPerMeter equals 3
    Vector3 point = worldPos + normals * -half;
    return new Vector3(Mathf.RoundToInt(point.x) * VoxelsPerMeter, Mathf.RoundToInt(point.y) * VoxelsPerMeter, Mathf.RoundToInt(point.z) * VoxelsPerMeter);
}

Заранее благодарю за любую помощь.


person Jon Rurka    schedule 03.03.2014    source источник


Ответы (1)


Я понял:

public Vector3 GetIndexFromWorld(Vector3 worldPos, Vector3 normals) {
    float half = ((1f / (float)VoxelsPerMeter) / 2f);
    Vector3 localPos = transform.InverseTransformPoint(worldPos) * VoxelsPerMeter;
    Vector3 point = localPos + normals * -half;
    return new Vector3(Mathf.FloorToInt(point.x), Mathf.FloorToInt(point.y), Mathf.FloorToInt(point.z));
}
person Jon Rurka    schedule 03.03.2014