当1个体素不等于1个单位时,从世界转换为体素

时间:2014-03-03 06:05:42

标签: c# unity3d voxel

我正在制作一个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);
}

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

我明白了:

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));
}