По поводу testSphere() каюсь что затупил. Причиной тому стало: -1, 1, слова про две информации, и наконец что знак это просто трюк. Почему-то понял это как два возможных значения. Просто точки A и B в примере неудачные, что значения такие получились.
Знак при этом вовсе не трюк, а побочный эффект простой реализации функции. Кроме того он играет роль при комбинировании моделей.
Отправил автору оригинального текста письмо с косяками в его тексте.
Посмотрим как он ответит.
Косяки следующие:
Функция testSphere() возвращает -1 для точки A (то есть она снаружи) и 1 для B (то есть она внутри). Знаки у расстояний — это просто трюк, позволяющий получить два элемента информации вместо одного в случае одного значения. Подобный тип функции можно написать и для описания параллелограмма (именно это и выполняется в функции function BoxTest).
Судя по коду и комменту к нему, это всё же расстояние до сферы, если быть точнее, до её поверхности.
// Signed distance point(p) to sphere(c,r)
float testSphere(Vec p, Vec c, float r) {
Vec delta = c - p;
float distance = sqrtf(delta%delta);
return radius - distance;
}
Ну и наконец о том, что тут коммент лучше названия:
// Sample the world using Signed Distance Fields.
float QueryDatabase(Vec position, int &hitType) {
Ибо это действительно функция которая считает Distance Field.
А ещё, есть сильные подозрения что…
В коде нет вершин. Всё выполняется с помощью функций CSG.
Что CSG тут не причём. А всё выполняется с помощью SDF функций.
Знак при этом вовсе не трюк, а побочный эффект простой реализации функции. Кроме того он играет роль при комбинировании моделей.
Посмотрим как он ответит.
Косяки следующие:
Судя по коду и комменту к нему, это всё же расстояние до сферы, если быть точнее, до её поверхности.
Ну и наконец о том, что тут коммент лучше названия:
Ибо это действительно функция которая считает Distance Field.
А ещё, есть сильные подозрения что…
Что CSG тут не причём. А всё выполняется с помощью SDF функций.