Может кто-нибудь объяснить, как можно было бы создать сферу, вершины, индексы и текстурные координаты? Существует удивительное отсутствие документации о том, как это сделать, и это то, что я заинтересован в изучении.
Я пробовал очевидное: поиск в Google, поиск на gamedev.net и т. Д. Однако ничто не покрывает поколения сферических точек, их индексацию и текстурирование.
rendering
geometry
procedural-generation
judeclarke
источник
источник
Ответы:
Есть два основных подхода:
Самый левый называется ультрафиолетовой сферой, а самый правый - икосферой.
GLUT имеет тенденцию использовать ультрафиолетовый подход: посмотрите на функцию
glutSolidSphere()
в исходном коде freeglut .Вот отличная статья о создании икосферы: http://blog.andreaskahler.com/2009/06/creating-icosphere-mesh-in-code.html
Вы также можете найти это интересным: http://kiwi.atmos.colostate.edu/BUGS/geodesic/text.html описывает подход к организации граней в зоны.
http://vterrain.org/Textures/spherical.html дает отличное описание того, как вы можете выбрать их текстуру.
источник
Есть 2 способа сделать это:
Проходите тэту и фи в сферических координатах, создавайте лица и трис
Создайте икосаэдр и рекурсивно делите грани, пока не достигнете желаемой тесселяции.
Сфера с использованием сферических координат ходьбы
Для первого способа, вы просто используете двойное гнездо, чтобы пройти тэту и фи. Когда вы идете по тэте и фи, вы вращаете треугольники, чтобы создать свою сферу.
Код, который делает это, будет выглядеть примерно так:
Так что обратите внимание выше, важно наматывать верхнюю и нижнюю крышки, используя только трис, а не квад.
Икосаэдрическая сфера
Чтобы использовать икосаэдр, вы просто генерируете точки икосаэдра, а затем заводите треугольники из него. В вершинах икосаэдра сидит в нуле являются:
Затем вам нужно просто взглянуть на схему икосаэдра и граней ветра из этих вершин. У меня уже есть код, который делает это здесь .
источник
Если точки не должны быть локально однородными, но должны быть глобально однородными, и не должны следовать какой-либо заданной схеме, вы можете использовать вариант алгоритма метания дротиков, чтобы распределить n точек на сфере с радиусом r , в среднем дистанционные точки друг от друга. Эти значения тогда примерно:
В простейшем случае вы можете равномерно выбирать точки случайным образом, выбирая две равномерно распределенные переменные u и v из (0, 1) и вычисляя по ним полярные координаты по формулам θ = 2 × π × u и ϕ = arc cos (2 × v - 1); затем отбрасывать любые точки, которые лежат слишком близко к уже выбранным точкам. Для немного более сложного и значительно более эффективного алгоритма см. « Метание дротиков на поверхностях » Клайна, Йешке, Уайта, Раздана и Вонки.
После того, как вы выбрали свои первые четыре точки (при условии, что не три из них вырождены , то есть они не лежат на одном большом круге, но это крайне маловероятно), вы можете создать четыре грани между ними, и каждый раз, когда вы добавляете Новая точка, вы можете разделить грань, которой она принадлежит, соответственно на три подграницы.
В целях текстурирования вы можете затем сопоставить точки с картой куба.
источник