Лучший метод выбора коробки для клона Minecraft

Я делаю клон Minecraft в качестве своего первого проекта OpenGL и застрял на части выбора поля. Что было бы лучшим методом для надежного выбора боксов?

Я прошел через несколько алгоритмов AABB, но ни один из них не объясняет достаточно хорошо, что именно они делают (особенно супер-настроенные), и я не хочу использовать вещи, которых я не понимаю.

Поскольку мир состоит из кубов, я использовал октодеревья, чтобы снять некоторую нагрузку на вычисления приведения лучей, в основном мне нужна только эта функция:

float cube_intersect(Vector ray, Vector origin, Vector min, Vector max)
{
    //???
}

Луч и начало координат легко полученные с помощью

Vector ray, origin, point_far;
double mx, my, mz;

gluUnProject(viewport[2]/2, viewport[3]/2, 1.0, (double*)modelview, (double*)projection, viewport, &mx, &my, &mz);
point_far = Vector(mx, my, mz);
gluUnProject(viewport[2]/2, viewport[3]/2, 0.0, (double*)modelview, (double*)projection, viewport, &mx, &my, &mz);
origin = Vector(mx, my, mz);
ray = point_far-origin;

min и max, являются противоположными углами куба.

Я даже не уверен, что это правильный способ сделать это, учитывая количество кубов I ' я должен проверить, даже с октодеревьями.

Я также пробовал gluProject , он работает, но очень ненадежен и не дает мне выбранную грань куба.


EDIT

Итак, вот что я сделал: вычислил положение в пространстве с помощью луча:

float t = 0;
for(int i=0; i<10; i++)
{
    Vector p = ray*t+origin;
    while(visible octree)
    {
        if(p inside octree)
        {
            // then call recursive function until a cube is found
            break;
        }
        octree = octree->next;
    }
    if(found a cube)
    {
        break;
    }
    t += .5;
}

На самом деле он удивительно быстр и останавливается после первого найденного куба.

alt text

Как вы можете видеть, луч должен пройти через несколько октодеревьев. прежде, чем он найдет куб (на самом деле позицию в пространстве) - в центре экрана появляется перекрестие. Чем меньше шаг приращения, тем точнее выбор, но также медленнее.

6
задан Solenoid 3 January 2011 в 22:11
поделиться