Рейкаст по сетке куба? ⇐ C#

Место общения программистов C#
Anonymous
Рейкаст по сетке куба?

Сообщение Anonymous »

Я пишу воксельную игру в Unity.
Мир игры представляет собой трехмерный массив вокселей (кубов).
Каждый воксел может быть пустым или занятым.
Мне нужно направить луч из любой точки мира и выяснить, где он впервые попадет на поверхность занятого воксела.

Код: Выделить всё

public struct Vector3 {
public float x, y, z;
}

public struct Vector3Int {
public int x, y, z;
}

public enum Voxel {
Empty,
Occupied,
}

public struct RaycastResult {
public bool success;  // whether any block was hit by raycast
public Vector3 point;  // point where ray hits the surface of first solid voxel
public Vector3Int block;  // what block was hit by raycast
}

public class World {
public Voxel[,,] voxels;

public Voxel GetVoxel(Vector3Int position) {
return voxels[position.x, position.y, position.z]
}

public RaycastResult Raycast(Vector3 origin, Vector3 direction) {
// What to do here?
}
}
Какой алгоритм я использую, чтобы это определить?
Есть ли (эффективный) способ сделать это в Unity без написания собственного рейкастера? Обратите внимание, что размер мира может быть очень большим.
Если нет хорошего встроенного решения, существует ли общий алгоритм?

Подробнее здесь: https://stackoverflow.com/questions/742 ... -cube-grid

Вернуться в «C#»