Комп’ютерна графіка
.pdf
Комп'ютерна графіка
Спосіб зміни значення JavaFx-властивості протягом анімації представлений класом
javafx.animation.Interpolator, що мають статичні поля:
Interpolator.DISCRETE – дискретна зміна значення JavaFx-властивості, при якому
значення залишається початковим до закінчення тимчасового інтервалу, коли значення
стає кінцевим;
Interpolator.LINEAR ( за замовчуванням) – лінійна зміна значення JavaFx-властивості,
при якому значення визначається по формулі:
startValue + (endValue – startValue)
fraction;
Interpolator.EASE_BOTH – використовується величина 0.2 для приросту і зменшення
значення JavaFx-властивості;
Interpolator.EASE_IN – використовується величина 0.2 для приросту значення
JavaFx-властивості;
Interpolator.EASE_OUT – використовується величина 0.2 для зменшення значення
JavaFx-властивості.
Крім того, можна створити користувацький клас Interpolator з перевизначенням його методів, що описують зміну значення JavaFx-властивості.
Transition- анімація з вбудованою тимчасовою шкалою також використовує об'єкт
Interpolator у якості значення властивості interpolator класу Transition.
Методичні вказівки до виконання лабораторної роботи:
Після створення проекту, у проекті необхідно реалізувати наступне:
Створити геометричну фігуру як шлях для анімації. Цим шляхом буде переміщатися об'єкт анімації.
Створити об'єкт класу Path і в нього помістити геометричну фігуру.
Створити об'єкт класу PathTransition і в нього помістити об'єкт класу Path.
Запустити анімацію
© Н.В. Смірнова, В.В. Смірнов, КНТУ, 2015 |
41 |
Комп'ютерна графіка
Приклад створення дуги:
MoveTo move_to = new MoveTo(begin_x, begin_y); //====== велика дуга для еліпса
ArcTo arcTo = new ArcTo(); arcTo.setX(begin_x+1); arcTo.setY(begin_y); arcTo.setRadiusX(rad_x); arcTo.setRadiusY(rad_y); arcTo.setLargeArcFlag(true);
Приклад створення екземпляра класу Path:
Path path = new Path(); |
//створити |
path.setStroke(Color.GRAY); |
//колір шляху |
path.setFill(Color.TRANSPARENT); |
//не заливати |
path.getStrokeDashArray().setAll(10d, |
15d);//пунктир |
//====== додати в шлях траєкторію path.getElements().add(move_to, arcTo);
Приклад створення екземпляра класу PathTtransition:
path_transition_1 = new PathTransition(seconds(8), path_1, circle_1); //path_transition_1.setOrientation(PathTransition.OrientationType. ORTHOGONAL_TO_TANGENT); path_transition_1.setCycleCount(Timeline.INDEFINITE); path_transition_1.setAutoReverse(false);
Запуск анімації:
public void play() { path_transition_1.play();
}
Зупинка анімації:
@Override
public void stop() { path_transition_1.stop();
}
Результат виконання програми:
© Н.В. Смірнова, В.В. Смірнов, КНТУ, 2015 |
42 |
Комп'ютерна графіка
Контрольні питання:
1.Призначення і створення класу Path.
2.Призначення і створення класу PathTransition.
3.Константи класу Interpolator
4.Порядок створення анімації графічного об'єкта.
5.Керування режимами візуалізації анімації.
Зміст звіту:
Узвіті повинні бути представлені:
-Лістинг програми.
-Висновки за результатами роботи.
Варіанти:
|
Еліпс |
Сфера |
Куб |
|
|
|
|
0 |
+ |
|
|
1 |
|
+ |
|
2 |
|
|
+ |
3 |
+ |
|
|
4 |
|
+ |
|
5 |
|
|
+ |
6 |
+ |
|
|
7 |
|
+ |
|
8 |
|
|
+ |
9 |
+ |
|
|
В заголовку вікна вказати № лабораторної роботи, групу, ПІБ студента
Примітки: файл програми, що виконується, з розширенням *.jar і демонстраційний ролік з
розширенням *.wmv знаходяться у папці “Приклади виконання”.
© Н.В. Смірнова, В.В. Смірнов, КНТУ, 2015 |
43 |
Комп'ютерна графіка
Лабораторна робота № 7
Тема: Анімація об'єктів комп'ютерної графіки. Клас TranslateTransition і події миші
Ціль: Одержати навички роботи з інтерактивною анімацією об'єктів комп'ютерної графіки на основі класу TranslateTransition. Навчитися виконувати дії з об'єктом в оброблювачі подій миші.
Завдання:
Створити проект.
Створити об'єкт комп'ютерної графіки відповідно до варіанта.
Створити екземпляр класів анімації об'єкта.
Створити оброблювач події миші.
Запустити анімацію.
Здійснити керування поведінкою об'єкта анімації за допомогою миші.
Теоретичні відомості:
Клас TranslateTransition дозволяє створювати переміщення графічного об'єкта з однієї точки в іншу точку за допомогою властивостей:
node – цільовий вузол для анімації;
duration – тривалість анімації;
fromx – початкова координата переміщення по осі х;
fromy – початкова координата переміщення по осі у;
fromz – початкова координата переміщення по осі z;
tox – кінцева координата переміщення по осі х;
toy – кінцева координата переміщення по осі у;
toz – кінцева координата переміщення по осі z;
byx – крок переміщення по осі х;
byy – крок переміщення по осі у;
byz – крок переміщення по осі z.
Екземпляр класу TranslateTransition можна створити за допомогою конструкторів:
public TranslateTransition(Duration duration, Node node) public TranslateTransition(Duration duration)
public TranslateTransition()
© Н.В. Смірнова, В.В. Смірнов, КНТУ, 2015 |
44 |
Комп'ютерна графіка
Методичні вказівки до виконання лабораторної роботи:
Після створення проекту, у проекті необхідно реалізувати наступне:
Створити об'єкт анімації відповідно до варіанта.
Створити екземпляр класу TranslateTransition.
Здійснити прив'язку екземпляра класу TranslateTransition до об'єкта анімації.
Створити оброблювач подій миші.
Запустити анімацію.
Приклад створення екземпляра класу TranslateTransition:
private TranslateTransition getTransition(double fromX, double fromY, double toY, double duration) {
//====== створити об'єкт керування анімацією
TranslateTransition transition = new TranslateTransition(new
Duration(duration)); |
|
|
|
|
|
transition.setFromX(fromX); |
//координати початкової |
крапки |
по Х |
||
transition.setFromY(fromY); |
//координати |
початкової |
крапки |
по |
Y |
transition.setToY(toY); |
//координати |
кінцевої крапки по Y |
|
||
transition.setAutoReverse(true);//автореверс transition.setCycleCount(Animation.INDEFINITE);//поки немає stop() transition.setInterpolator(Interpolator.EASE_IN);//гальмування в
кінцевих крапках
Приклад створення оброблювача події миші:
//====== оброблювачі подій куля 1 ball_1.setOnMousePressed(me -> { if (ball_1_stopped == true) { ball_animation_1.pause();
ball_1_stopped = false; } else {
ball_animation_1.play(); ball_1_stopped = true;
}
});
Результат виконання програми:
© Н.В. Смірнова, В.В. Смірнов, КНТУ, 2015 |
45 |
Комп'ютерна графіка
Реакція об'єкта анімації на подію миші:
Контрольні питання:
1.Призначення і створення класу TranslateTransition.
2.Порядок створення анімації об'єкта з використанням TranslateTransition.
3.Створення оброблювача події миші.
4.Керування об'єктом анімації в оброблювачі подій миші.
Зміст звіту:
Узвіті повинні бути представлені:
-Лістинг програми.
-Висновки за результатами роботи.
© Н.В. Смірнова, В.В. Смірнов, КНТУ, 2015 |
46 |
Комп'ютерна графіка
Варіанти:
|
Еліпс |
Сфера |
Куб |
|
|
|
|
0 |
+ |
|
|
1 |
|
+ |
|
2 |
|
|
+ |
3 |
+ |
|
|
4 |
|
+ |
|
5 |
|
|
+ |
6 |
+ |
|
|
7 |
|
+ |
|
8 |
|
|
+ |
9 |
+ |
|
|
В заголовку вікна вказати № лабораторної роботи, групу, ПІБ студента
Примітки: файл програми, що виконується з розширенням *.jar і демонстраційний ролік з
розширенням *.wmv знаходяться у папці “Приклади виконання”.
© Н.В. Смірнова, В.В. Смірнов, КНТУ, 2015 |
47 |
Комп'ютерна графіка
Лабораторна робота № 8
Тема: Анімація об'єктів комп'ютерної графіки. Клас Timeline і виявлення колізій
Ціль: Одержати навички роботи з інтерактивною анімацією об'єктів комп'ютерної графіки на основі класу Timeline. Навчитися відслідковувати зіткнення (колізії) об'єкта анімації з іншими об'єктами сцени.
Завдання:
Створити проект.
Створити об'єкт комп'ютерної графіки відповідно до варіанта.
Створити екземпляр класів анімації об'єкта.
Запустити анімацію.
Здійснити керування поведінкою об'єкта анімації за допомогою миші, використовуючи виявлення колізій.
Теоретичні відомості:
Клас Animation надає методи керування життєвим циклом анімації:
jumpTo(Duration time) – перехід анімації до зазначеної позиції на тимчасовій
шкалі;
playFrom(Duration time) – запуск анімації, починаючи із зазначеної позиції на
тимчасовій шкалі;
play() – запуск анімації з поточної позиції на тимчасовій шкалі;
playFromStart() – запуск анімації з первісної позиції на тимчасовій шкалі;
stop() – зупинка анімації;
pause() – пауза анімації.
Анімація по ключових кадрах дозволяє створити видиму зміну значення будь-якої JavaFx-
властивості за визначений проміжок часу за допомогою класу Timeline.
Екземпляр класу Timeline можна створити за допомогою одного з конструкторів, що дозволяють установити частоту кадрів і набір ключових кадрів анімації:
public Timeline(double targetFramerate)
public Timeline(double targetFramerate, KeyFrame... KeyFrames) public Timeline(KeyFrame... KeyFrames) и public Timeline()
Набір ключових кадрів Timeline - анімації можна поповнити методом getKeyFrames().addAll(), а зупинити Timeline - анімацію і повернути її в початкову позицію – методом stop().
© Н.В. Смірнова, В.В. Смірнов, КНТУ, 2015 |
48 |
Комп'ютерна графіка
Ключовий кадр Timeline - анімації представлений класом javafx.animation.KeyFrame і
визначає зміни значень JavaFxвластивостей за визначений проміжок часу.
Екземпляр класу KeyFrame можна створити за допомогою набору конструкторів, що дозволяють установити час відтворення ключового кадра, ім'я ключового кадра, оброблювач закінчення ключового кадра і набір змін значень JavaFxвластивостей:
public KeyFrame(Duration time, java.lang.String name, EventHandler<ActionEvent> onFinished, java.util.Collection<KeyValue<?>> values)
public KeyFrame(Duration time, java.lang.String name, EventHandler<ActionEvent> onFinished, KeyValue<?>... values)
public KeyFrame(Duration time, EventHandler<ActionEvent> onFinished, KeyValue<?>... values)
public KeyFrame(Duration time, java.lang.String name, KeyValue<?>... values) public KeyFrame(Duration time, KeyValue<?>... values)
Зміна значення JavaFx - властивості представлена класом javafx.animation.KeyValue,
екземпляр якого можна створити за допомогою конструкторів, що дозволяють установити змінювану JavaFxвластивість, його кінцеве значення в результаті анімації і спосіб його зміни протягом анімації:
public KeyValue(WritableValue<T> target, T endValue, Interpolator<? super T> interpolator)
public KeyValue(WritableValue<T> target, T endValue)
Методичні вказівки до виконання лабораторної роботи:
Після створення проекту, у проекті необхідно реалізувати наступне:
Створити об'єкт анімації відповідно до варіанта.
Створити екземпляр класу KeyFrame і Timeline.
Здійснити прив'язку екземпляра класу Timeline до екземпляра класу KeyFrame.
Створити оброблювач подій миші.
Створити метод, що реалізує розпізнавання колізій і реакцію миші на ці колізії.
Запустити анімацію.
© Н.В. Смірнова, В.В. Смірнов, КНТУ, 2015 |
49 |
Комп'ютерна графіка
Приклад створення екземпляра класу KeyFrame і Timeline:
//====== створити Timeline для анімації, у ньому KeyFrame з оброблювачем ball_animator = new Timeline(
new KeyFrame(new Duration(8.0), t -> {
//=== перевірити зіткнення checkForCollision();
//=== піксел по вертикалі +\-
double dy = flag_moving_down ? 1 : -1;
//=== змінити координати центру кулі moving_ball_center_Y.setValue(moving_ball_center_Y.getValue()
+ dy);
})
);
//====== встановити кількість циклів - нескінченне ball_animator.setCycleCount(Timeline.INDEFINITE);
Приклад коду для створення методу виявлення колізій:
//=== зіткнення з верхньою стіною
if (ball.intersects(top_wall.getBoundsInLocal())) { //====== варіант анімації Fadetransition
//=== куля пропущена - значить змінювати прозорість if (flag_ball_passed) {
opacity_up_animation.play();
}
//=== поміняти прапор напрямку руху вгору / вниз на зворотний flag_moving_down = !flag_moving_down;
}
Результат виконання програми:
© Н.В. Смірнова, В.В. Смірнов, КНТУ, 2015 |
50 |
