Войти
ПрограммированиеФорумГрафика

Определение видимой площади треугольной секции на сфере

Страницы: 1 2 Следующая »
#0
12:56, 3 фев. 2016

Имеется спроецированный на сферу икосаэдр:
Изображение
Известны координаты всех вершин в 3D и в 2D(на плоскости экрана), также известна видимость вершин и углы между вершинами. Как можно определить видимую площадь каждой треугольной секции этой сферы (без подсчета пикселей и аппроксимации до треугольников)?
Пока мне приходит в голову только одна идея - мне нужно найти уравнения дуг, причем для граней мне дополнительно нужно вычислить отсекающие дуги, вычислить площади дуг через инетгрирование и, в зависимости от вогнутости/выпуклости прибавить площадь дуги к площади треугольника(четырехуголника на гранях) правильный ли это подход?

По сути треугольники образуются пересечением овалов и я могу посчитать их площади и отсекаемые ими площади, но у овалов есть общие, невычисляемые  участки и в каком направлении двигаться дальше не могу понять
Изображение


#1
16:56, 3 фев. 2016

https://ru.wikipedia.org/wiki/Сферический_треугольник
Оно?...

Untitledd | Определение видимой площади треугольной секции на сфере
#2
17:06, 3 фев. 2016

Ged.Yuko, подозреваю это площадь 3D треугольника на сфере т.к. я не вижу зависимости площади от координат, ведь треугольники на краях имеют меньшую видимую площадь. Проще говоря мне нужно посчитать сколько пикселей на экране занимает каждый треугольник (скриншот в первом посте, треугольники выделены разными цветами)

#3
17:13, 3 фев. 2016

MindShifter, по идее для них надо отобразить отсекающие обратно на сферу и посчитать на ней. Сходу не соображу, что получится, но если на сфере отсекающие тоже будут прямыми, то всё просто, а если нет, то немного интереснее.
Еще можно попытаться выразить из площади доли шара, но тот же вопрос с отсекающими...

PS А еще можно извратиться и приближенно посчитать из площади отрендеренных пикселей с расстоянием до камеры в качестве коэффициента. Типа проинтегрировали. xd

#4
17:31, 3 фев. 2016

Можно узнать, зачем тебе точная площадь проекции?

#5
18:08, 3 фев. 2016

MindShifter
> Пока мне приходит в голову только одна идея - мне нужно найти уравнения дуг,
> причем для граней мне дополнительно нужно вычислить отсекающие дуги, вычислить
> площади дуг через инетгрирование и, в зависимости от вогнутости/выпуклости
> прибавить площадь дуги к площади треугольника(четырехуголника на гранях)
> правильный ли это подход?
а не проще тогда сразу проинтегрировать в шейдере видимую площадь(тупо посчитать пиксели) и применить к-нт удалённости как писали выше?
И не ясно какова нужна точность и скорость?

#6
18:51, 3 фев. 2016

Нужно для тесселяции, хочу получить ~равномерную детализацию, по площади буду определять необходимость дробления треугольников и буду отсекать невидимые треугольники.
Нужна скорость ~50000 треугольников в секунду без задействования видяшки т.к. не уверен что в tessellation shader можно сшивать треугольники разного уровня, да и опыта работы с ним пока мало.

#7
18:52, 3 фев. 2016

MindShifter
Проекция ортогональная или перспективная?

#8
18:54, 3 фев. 2016

Перспективная.
Экранные координы вершин известны.

#9
19:59, 3 фев. 2016

MindShifter
> треугольники разного уровня
что под собой подразумевают?

#10
20:21, 3 фев. 2016

Вообще мене казалось задача решается другим способом проще.

level=max(log(2.0/distance)+dlevel,0.0)
- как расчет базового уровня детализации
distance - расстояние от поверхности
dlevel - базовый масштаб уровня

aroundLevel=baseRadius*pow(2,level)
- радиус детализации для базового уровня
baseRadius - приемлемый радиус наблюдения для первого уроня детализации.
aroundLevel[i]=aroundLevel[i-1]*2

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

надо будет потом изобразить мысль...

А почему именно икосаэдр? Это такая неудобная вещь.

интересный вариант

#11
21:28, 3 фев. 2016

Собственно по вашей ссылке мой случай, осталось только разобраться. Икосаэдр дает самую равномерную сетку на выходе и по его структуре легко делаются лоды + такая модель текстурируется равномерно независимо от удаленности от экватора, достаточно просто перепроэцировать текстуру на треугольники.

#12
22:04, 3 фев. 2016

в моем воображении треугольные текстуры ни как не укладываются в квадратные на двухмерную систему координат.

#13
9:08, 4 фев. 2016

Как вариант можно в одну квадратную текстуру запаковывать треугольник, а на оставшееся пространство запаковать родительский треугольник, тогда будет безотходное использование, но до такого я не дошел, у меня просто используется половина полезной площади квадрата. В сравнении с использованием меркатора результат выходит не хуже т.к. там от удаления от экватора текстура тоже теряет детализацию и эффективность использования памяти снижается.
foxes, У меня появились вопросы по статье из вашего комментария, быть может вы сможете ответить на некоторые из них:

Формула 31:
Правильно ли я понимаю что k1 это расстояние от линии между двумя вершинами до самой удаленной точки дуги, которая проходит через эти вершины?
α - угол в радианах между двумя вершинами одной треугольной секции относительно центра сферы?
β это fov ?
R1 это радиус сферы?

#14
14:45, 4 фев. 2016

α - да
ν=2⋅tg(β/2) - можно взять прямо из матрицы проекции.
k1 - это максимальная погрешность, допускаемая при отрисовке кривых линий ( в данном случае фактической дуги горизонта ) и геометрического подобия построенного прямыми линиями.
Изображение
вот тут видно зазор между пунктирной линией и дугой AC.

в остальном непонятна разница межру R1 и r по их описанию, смотри формулу 34, логика вычислений там абсолютно такая же.
в принципе L и R (маленькие) - это одно и тоже. а вот R1 R2 видимо нужны для коррекции и скорее всего являются показателем длинны дуги на экране, вполне возможно что это просто радиус сферы.

Я такой формулой не заморачивался, все параметры кроме L и R - константы, arccos - также можно выкинуть он дает небольшую коррекцию при приближении удалении.
Поэтому я делаю так: log(k/L)*d - для одного и того же разрешения и угла обзора k можно подобрать для нужного качества, обычно это 2.0 для земли, если сфера радиусом 1.0 то может быть 40.0.
d - также коэффициент позволяющий выровнять баланс между верхним и нижним уровнем детализации в паре с k.
L - расстояние от вершины (точки на поверхности) до камеры.

Sphere grid by Cubemap - для кубической проекции получается такой вариант.

Страницы: 1 2 Следующая »
ПрограммированиеФорумГрафика

Тема в архиве.