Какой самый простой способ получить округлые кубики opengl

Всегда в контексте приложения кубика Рубика на Java/Opengl с lwjgl я хочу улучшить свой рисунок (http://manuelselva.files.wordpress.com/2010/09/cube.gif), чтобы иметь закругленные края для каждого из 27 маленьких кубов? То, что я хотел бы получить в конце, совпадает с изображением куба из Википедии: http://fr.wikipedia.org/wiki/Fichier:Rubik%27s_cube.svg

Какое самое простое решение для этого?


person Manuel Selva    schedule 12.09.2010    source источник


Ответы (3)


Вероятно, проще всего нарисовать модель закругленного куба в одной из многочисленных программ 3D-моделирования (например, Maya, Blender) и загрузите 27 экземпляров. модели в вашем коде. Однако научиться использовать программу, подобную одной из этих, нетривиально, поэтому, несмотря на то, что это общий подход, используемый в большинстве игр и т. д., для чего-то такого простого это может быть излишним — может потребоваться больше времени, чтобы понять, как выполнить что-либо в программе, чем это должно было бы делать что-то по-другому.

Очевидной альтернативой было бы создание модели в вашем коде. Основная идея довольно проста, хотя собрать все воедино может быть несколько нетривиально. Вы начинаете с выбора радиуса, который вы хотите использовать для углов. Когда вы создаете свои грани, вы оставляете между ними достаточно места, чтобы поместиться в квадрант круга с этим радиусом (т. е. каждая грань заканчивается на один радиус меньше, чем они пересекаются). Вы соединяете их с набором координат/нормалей вершин, которые следуют квадранту круга — в основном, пишете небольшой цикл, который генерирует несколько десятков точек (или около того) под равномерно расположенными углами. Угол в каждой точке будет нормалью, а синус/косинус даст координаты. В углах (в отличие от краев) вам нужно создать точки на сфере, с одним квадрантом сферы для каждого угла.

person Jerry Coffin    schedule 12.09.2010
comment
@Manuel Selva: Когда-нибудь вам придется изучить один из [maya blender 3ds], поэтому я бы порекомендовал вам этот путь. Сделайте скругленный куб из 7 различных материалов (по 1 на каждую грань + пластик) и во время выполнения модифицируйте их нужным цветом. - person Calvin1602; 12.09.2010
comment
Спасибо, буду искать в этом направлении. Ману - person Manuel Selva; 13.09.2010

Некоторое умное текстурирование и правильно созданная карта нормалей в основном имитируют вид округления без редактирования модели. Окончательный рендер будет затенен, как если бы отдельные стороны были закруглены.

К сожалению, при таком подходе иллюзия разваливается, если смотреть с ребра.

person Brandorf    schedule 14.09.2010
comment
Разве что с отображением смещения, я полагаю? - person Kos; 21.11.2010

Вы также можете использовать базовый куб и реализовать алгоритм разделения, который удваивает количество используемых вершин с каждой итерацией. Затем создайте вектор от центра куба к каждой вершине. Если вы нормализуете вершины, вы получите сферу (между: Это один из самых простых алгоритмов генерации сфер). Но если изменить только длину векторов углов, то получится скругленный куб.

person iuiz    schedule 21.11.2010