Как создать 3D облако тегов на Java - PullRequest
5 голосов
/ 08 августа 2010

Мне нужно предложение / идея, как создать 3D-облако тегов в Java (Swing) (в точности как показано здесь: http://www.adesblog.com/2008/08/27/wp-cumulus-plugin/), не могли бы вы помочь, пожалуйста?

Ответы [ 3 ]

4 голосов
/ 08 августа 2010

Я бы выбрал Swing и Java2D или OpenGL (JOGL).

Я использовал OpenGL несколько раз, и рисование текста легко с помощью расширений JOGL (TextRenderer).

Если вы выберете Swing, то трудной частью будет реализация трехмерного преобразования. Вы должны написать какую-то систему частиц. Частицы должны были бы находиться на трехмерной сфере. Вы лично будете нести ответственность за любое трехмерное преобразование, но с использованием ортогональной проекции, которая будет тривиальной. Так что это хорошее упражнение - вам нужно здесь: сферическая координата вики sys и здесь проекция 3D в 2d .

После того, как Вы произвели все преобразования, остается только рисунок. И Java2D, и Swing имеют очень удобный API для этого. Это будет сводиться к выбору размера шрифта и рисования текста по заданным координатам. Пользовательского JPanel с переопределенным методом paintComponent будет достаточно для начала и окончания.

Что касается второго варианта, то самой сложной частью является сам OpenGL API. Это процедурно, так что если вы в основном знакомы с Java, вам будет сложно использовать не-OO-вещи. Это может привыкнуть и, честно говоря, может быть весьма полезным, так как с этим можно многое сделать. Если вы выберете OpenGL, вы получите все трехмерные преобразования бесплатно, но все равно придется самостоятельно переходить от сферической системы координат к декартовой (первая вики-статья все еще полезна). После этого нужно просто использовать какой-нибудь класс рисования текста, например TextRenderer, поставляемый с дистрибутивом JOGL.

Таким образом, OpenGL помогает просматривать проекционные расчеты и ускоряет работу оборудования Для Java2D потребовалось бы больше математики, но, на мой взгляд, этот подход кажется немного проще. Да, и между прочим - Java2D пытается использовать любое графическое ускорение (OpenGL или DirectDraw) внутри. Таким образом, Вы защищены от определенных проблем низкого уровня.

Для обоих вариантов Вам также необходимо привязать координаты мыши s к скорости вращения сферы. Будь то Java2D или OpenGL, код будет выглядеть очень похоже. Просто сопоставьте координаты мыши, связанные с центром панели, с некоторым вектором скорости. Во время рисования Вы можете использовать вектор, чтобы соответственно вращать сферу.

И еще одна вещь: если вы хотите попробовать OpenGL, я бы порекомендовал: Язык обработки , созданный в MIT специально для многофункциональных графических апплетов. Их 3D API, не случайно, почти такой же, как OpenGL, но без особых излишеств. Так что, если вы хотите самый быстрый прототип , это лучшая ставка. Обратитесь к этой ветке обсуждения за актуальным примером. Примечание: Обработка написана на Java.

3 голосов
/ 09 августа 2010

Это не совсем 3D. Нет никаких перспективных преобразований или отображения текста на какую-то трехмерную фигуру (например, на сферу). То, что у вас есть, это набор строк, где каждая строка имеет связанную глубину (или Z-порядок). Строки «ближе» к вам окрашены более сильным оттенком серого и увеличенным шрифтом.

Движение каждой строки при перемещении мыши - это действительно трехмерная фигура, которая выглядит как наклонный круг вокруг фиксированного центра - с уклоном, зависящим от того, где находится курсор мыши. Это простая математика - если вы рассчитываете это для одной строки, вы понимаете это для всех. И тогда последним будет разбрасывать струны, чтобы они не перекрывались слишком сильно, и придавать каждому начальный вес в зависимости от их частоты.

Вот что делает большая часть кода . Таким образом, вам нужно либо сделать математику, либо слепо перевести ActionScript в Java2D. И нет, в JOGL нет необходимости.

1 голос
/ 08 августа 2010

Почему бы вам просто не загрузить исходный код и посмотреть? Даже если вы не можете написать PHP, все равно можно прочитать его и выяснить, как работает алгоритм.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...