Я пытаюсь реализовать алгоритм из графической статьи, и часть алгоритма представляет сферы известного радиуса к буферу. Они говорят, что представляют сферы путем вычислений местоположения и размера в вершинном шейдере и затем выполнения соответствующей штриховки в программе построения теней фрагмента.
Какие-либо предположения относительно того, как они на самом деле сделали это? Положение и радиус известны в мировых координатах, и проекция является перспективой. Это означает, что сфера будет спроектирована как круг?
Я нашел статью, в которой описывается, что вам нужно - вычисление ограничивающей квадрики. См .:
http://web4.cs.ucl.ac.uk/staff/t.weyrich/projects/quadrics/pbg06.pdf
Раздел 3.2, Расчет граничной рамки. В документе также упоминается, что это делается в вершинном шейдере, так что это может быть то, что вам нужно.
Некоторые личные мысли:
Вы можете аппроксимировать ограничивающую рамку, аппроксимируя размер сферы по ее радиусу. Преобразуйте это в пространство экрана, и вы получите ограничительную рамку немного больше правильной, но это будет не так уж и далеко. Это не удается, когда камера находится слишком близко к точке или, конечно, когда сфера слишком велика. Но в противном случае это должно быть достаточно оптимально для расчета, так как это будет просто соотношение между двумя похожими прямоугольными треугольниками.
Если вы можете определить длину хорды, то соотношение даст точный ответ, но в данный момент это немного выше меня.
альтернативный текст http://xavierho.com/temp/Sphere-Screen-Space.png
Конечно, это лишь приблизительное приближение, иногда с большой ошибкой, но это могло бы наладить дела быстро, легко.
В противном случае , см. Документ по ссылке выше и используйте правильный способ. =]
В общем, сфера в перспективе выглядит как эллипс:
(источник: jrank.org )
Изображение выше находится внизу эта статья .
Раздел 6 этой статьи описывает, как получается ограничивающая трапеция проекции сферы. До появления компьютеров художники и рисовальщики должны разбираться в этом вручную.