Это на самом деле не простая задача.Решение варьирует много в зависимости от сложности и разнообразия объектов, которые вы пытаетесь создать.
Давайте рассмотрим несколько случаев:
Объект более или менее известен:
Самый простой случай - иметь 3d модель обычным способом, а затем немного ее рандомизировать.Взять, к примеру, яблоко.Рандомизация может варьироваться от размера яблока до цвета его текстуры и повреждения плода.
Все ваши объекты могут быть описаны с использованием поверхностей NURBS:
В этом случаевам нужно хранить достаточно данных для создания поверхности, где, конечно, эти данные можно немного рандомизировать.
Ваши объекты имеют симметрию вращения:
В этом случае создание одной кривой и вращение ее вокруг оси может дать вам форму.Яблоко является примером.Вам нужно будет хранить только данные кривой, и рандомизировать форму можно либо на кривой (с сохранением симметрии), либо на конечной сетке.
На текстурах
Это намного сложнее, чемгенерация сетки.Это происходит главным образом потому, что текстуры несут гораздо больше информации, чем сетки (они более подробны).Вы можете иметь много стратегий генерации текстур.В случае вашего яблока вы можете выбрать несколько вершин, дать им цвета (один красный, один зеленый, другой красный и т. Д.) И интерполировать другие цвета вершин.Это создает плавный переход цветов, которые могут хорошо смотреться на яблоке.Однако если вы создаете нож, который выглядит просто ужасно.
В большинстве случаев вам необходимо знать, какая часть вашей сетки представляет, и генерировать текстуру часть за частью.В приведенном выше примере с ножом вы можете создать сетку в два этапа;лезвие и обрабатывать текстуру каждой части генерируется отдельно.
Заключение
Конечно, вы можете иметь смесь из них.Класс meshGenerator
может принимать данные и, основываясь на том типе, который они есть, генерирует сетку соответственно.Возможно, первое решение для создания объекта является наиболее подходящим, поскольку любой сложный объект легче определить по его треугольникам, чем по NURBS.