В следующей таблице приведены некоторые подклассы классов Group, Leaf и Node-Component:
Класс | Описание | |
Частичный список классов класса GroupJava 3D | ||
BranchGroup | Корневой узел (объект Node) графа сцены, который вложен в класс Locale | |
Switch | Может отображать либо один дочерний узел, либо несколько дочерних узлов, задаваемых маской | |
TransformGroup | Содержит преобразование (например, перемещение, вращение или масштабирование) | |
Частичный список классов класса Leaf | ||
Behavior | Содержит методы для получения пользовательского ввода (например,нажатие клавиш и щелчков мышью), а также методы, которые описывают поведение объекта при определенных событиях (например, при столкновениях) | |
Light | Описывает набор параметров источников освещения Java 3D | |
Shape3D | Описывает трехмерные геометрические объекты | |
ViewPlatform | Управляет точкой наблюдения трехмерной сцены | |
Частичный список классов класса NodeComponent | ||
Appearance | Задает атрибуты объекта Shape3D, такие как цвет и текстура | |
Material | Описывает свойства освещенного объекта (например, отраженный цвет. |
Таблица 2. Основные методы подкласса классов Group, Leaf и Node-Component
2.3. Разработки 3DPaint
В данной работе я создал графический редактор 3D Paint.
Идеей моего проекта является использование двухмерной и трехмерной графики на Java для создания удобного и многофункционального графического редактора.
Для реализации проекта мне потребовалась изучить подробно графику на Java и разработки вышеперечисленных программных интерфейсов Java 2D и Java 3D.
На первом этапе я создал саму визуальную оболочку (каркас графического редактора); трехмерные фигуры: «цветной куб», «цилиндр», «сфера», «параллелепипед», «конус» и создание трехмерного текста, с возможностью изменение типа шрифта, размера и стиля; панель изменения цвета для фигур и для фона, где размещаются фигуры.
На втором этапе я планирую создать панель с двухмерной графикой, которая будет рисовать: линии, прямоугольники, треугольники и другие элементы, с возможностью изменения цвета, затирания, трансформации. Также я хочу связать трехмерную и двухмерную графику для создания общих проектов, таких как дизайн трехмерного объекта или обычное рисование графических картинок.
В начала проекта, используя программное обеспечение NetBeansIDE 6.0, я создал так называемый каркас приложения (Рис 1). Он позволяет управлять, созданными фигурами трехмерной графики. Все кнопки и панели (меню, управления) находятся в пакетах SWING и AWT.
Рис 1. Графический редактор 3DPaint
На левой панели приложения располагаются кнопки с фигурами, на нижней панели кнопки управления этими фигурами, центральная панель отображает фигуры и действия над ними. Панели расположены при помощи раскладчика BorderLayout (раскладчик по сторонам света). А кнопки на этих панелях располагаются при помощи раскладчика FreeDesignLayout.
Далее создал примитивные геометрические фигуры, используя библиотеку com.sun.j3d.utils.geometry. Класс geometry хранит в себе трехмерные фигуры: cylinder, box, cube, sphere, cone.
Например для создания трехмерной фигуры «Цилиндр» используется следующий код:
Cylinder CylinderObj = new Cylinder(0.7f, 1.4f, ap);
objTrans.addChild(CylinderObj);
где 0.7f и 1.4f это размер фигуры (ширина и длина).
Фигура может выполнять следующие действия:
MouseRotate behavior = new MouseRotate(objTrans);
objTrans.addChild(behavior);
behavior.setSchedulingBounds(bounds);
- вращениеприпомощилевойкнопкимыши.
MouseZoom behavior2 = new MouseZoom(objTrans);
objTrans.addChild(behavior2);
behavior2.setSchedulingBounds(bounds);
- изменение размера фигуры при помощи колесика мыши (трансформация).
orbit = new OrbitBehavior(c, OrbitBehavior.REVERSE_ALL |
OrbitBehavior.STOP_ZOOM);
BoundingSphere bounds = new BoundingSphere(new Point3d(0.0, 0.0, 0.0), 100.0);
orbit.setSchedulingBounds(bounds);
viewingPlatform.setViewPlatformBehavior(orbit);
- перетаскивание фигуры по рабочей области при помощи правой кнопки мыши.
Transform3D yAxis = new Transform3D();
Alpha rotationAlpha = new Alpha(-1, 10);
RotationInterpolator rotator = new RotationInterpolator(rotationAlpha, objTrans, yAxis, 0.0f, (float) Math.PI*-2.0f);
BoundingSphere bounds1 = new BoundingSphere(new Point3d(0.0,0.0,0.0), 100.0);
rotator.setSchedulingBounds(bounds1);
objRoot.addChild(rotator);
- вращение трехмерной фигуры. С помощью этого кода можно задавать скорость вращения и направление вращения фигуры (по часовой или против часовой стрелки).
Для создания трехмерного текста используется класс Font3D из библиотеки javax.media.j3d. Класс Font3D содержит в себе методы задания имени трехмерного текста, типа текста (жирный, курсив, подчеркнутый), размера. К трехмерному тексту, как и к другим трехмерным объектам можно применять выше перечисленные действия: вращение, перемещение и трансформацию.
Также в программе есть возможность управления цветом. Можно менять как цвет фона, так и цвет самого трехмерного объекта. Управление цветом осуществляется при помощи класса ColorChooser из пакета javax.swing. Цвет можно менять с помощью разных систем задания цвета. ColorChooserсодержит три системы RGB, HSB и Swatches.
Для удобства в программе создана панель меню, содержащая меню-бар «Файл» и «Справка» из класса JMenyBar. А меню-бар содержит вкладки «Выход» и «О 3DPaint» из класса JMeny.
При нажатии на вкладку в меню «О 3DPaint» выходит диалоговая панель, принадлежащая пакету javax.swing, содержащая информацию о программном обеспечении, версии и создателе.
ЗАКЛЮЧЕНИЕ
Этим завершается наше рассмотрение графики на Java. В этой работе мы представили краткий обзор средств программирования трехмерной и двухмерной графики на Java. Мы показали, что эффективность, расширяемость и простота Java 3D делает этот интерфейс прикладного программирования отличным выбором для разработчиков, стремящихся встроить в свои приложения трехмерную графику. Мы представили приложение, которое демонстрируют использование геометрических фигур, текстур, освещения и поведений в Java 3D.
Мы обсудили некоторые графические возможности Java. Мы начали с краткого знакомства с фундаментальными основами графики, такими как системы координат и графические контексты. Затем мы обсудили средства Java 2D. Мы также вкратце рассказали, как использовать графические эффекты.
Вторая половина нашего знакомства с графическим программированием касалась Java 3D. Используя классы Java 3D и Java 2D мы создали простой графический редактор 3DPaint, который дает возможность пользователю изменять свойства сцены Java 3D, включая манипулирование трехмерными объектами (вращение, масштабирование и перемещение) с помощью мыши и изменение освещения сцены.
СПИСОК ИСПОЛЬЗУЕМОЙ ЛИТЕРАТУРЫ
1. Х. М. Дейтел, П.Дж. Дейтел, С.И. Сантри - Технологии программирования на Java, книга 1 (графика, JAVABEANS, интерфейс пользователя)
2. Джуди Бишоп - Эффективная работа Java
3. James Gosling, Bill Joy, Guy Steele, Gilad Bracha - The Java Language Specification, Second Edition.
4. Tim Lindholm, Frank Yellin - The Java Virtual Machine Specification, Second Edition.
5. Гослинг Дж., Арнольд К. - Язык программирования Java
6. Информация с сайта www.infocom.uz
7. Информация с официального сайта Javawww.java.sun.com