Радарный подход к Frustum Culling: провал с первого простого теста?

Попытка получить хотя бы очень простую часть 1 учебника Lighthouse3D Radar Frustum Culling, чтобы работать ... и совершенно сбит с толку, что я даже не могу заставить эту часть работать в моем рендерере.

Итак, первый шаг: вы проверяете, находится ли точка впереди ближней плоскости или позади дальней плоскости, и выполняете раннюю отсечку, если это так. (В противном случае вы бы провели дальнейшие тесты, но я застрял только на этой первой части.)

Я использую центр мирового пространства (x1y2z3) куба 2x2 и имею камеру, которую я могу свободно перемещать и вращать. Все мои векторные и матричные элементы должны быть довольно прочными, поскольку в остальном рендерер работает нормально. Итак, вот мой взгляд (в Go) из этой первой части, простого тестирования «Z против ближнего или дальнего»:

func (cam *Camera) frustumHasPoint(point *Vec3) bool {
    var pc Vec3
    v := point.Sub(&cam.Controller.Pos)  // point minus camPos
    ref := cam.Controller.dir  // take a copy of camDir
    ref.Z = -ref.Z
    ref.Normalize() // camDir was already normalized but anyway...
    pc.Z = v.Dot(&ref)
    if pc.Z > cam.Perspective.ZFar || pc.Z < cam.Perspective.ZNear {
        return false
    }
    return true
}

Теперь почему я переворачиваю Z ссылки ref? Потому что в учебнике они пишут: «Обратите внимание, что ссылка на рисунке - это не правая система (как в OpenGL), потому что ориентация Z была изменена, чтобы сделать учебник более интуитивным» - ну, в учебнике GL конечно, это имеет обратный эффект ...

Что ж, если перевернуть Z, как указано выше, он будет отбраковывать больше, чем нужно, примерно в 50% случаев; если я этого не сделаю, то в 98% случаев он "перебраковывает" ..

Что мне не хватает?


person metaleap    schedule 07.03.2013    source источник
comment
Я считаю, что все координаты z должны действовать одинаково. (например, v.z тоже нужно отзеркалить.)   -  person Aki Suihkonen    schedule 07.03.2013
comment
Что cam.Controller.dir - линия прямой видимости (вектор, по которому ориентируется камера)? Если это так, вы не хотите отрицать z. Предполагая, что и ваша камера, и точка находятся в мировых координатах (то есть со всеми примененными к ним преобразованиями [например, переводы, шкалы и т. Д.]), За исключением отрицания Z, остальная часть вашей математики выглядит разумной. Переворачивание Z сделает ваш скалярный продукт отрицательным, что, похоже, приведет к отбраковке почти всех ваших очков, если ваши ближние и дальние значения положительны.   -  person radical7    schedule 08.03.2013


Ответы (1)


Решено. Причиной была неисправность мозга ... в учебнике четко написано о получении осей x / y / z для описания усеченной пирамиды, почему-то я пропустил это ..

person metaleap    schedule 09.03.2013