我正在制作一个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);
}
提前感谢您的帮助。
答案 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));
}