---
title: Základy skládání transformací
description: V této lekci se seznámíš s tím, jak transformace skládat za sebou a jak je propojovat v grafu scény.
thumbnail: snehulak.png
scene: empty
---

V této lekci se seznámíš s tím, jak transformace skládat za sebou a jak je propojovat v grafu scény. Z matematického pohledu jde o násobení matic ve správném pořadí.

Pokud se ti vše povede, měli bychom na konci lekce mít takovéhoto krásného sněhuláka, se kterým budeme moci hýbat:
![Výsledná scéna](snehulak.png)

--

Začněme jednoduše...

task: 
  Přidej do scény červenou krychli.
  A ať je pořádná!
hint: 
  Pravým tlačítkem klikni do workspace a zvol Object -> Red cube
  ![Přidání krychle](addred.png)

--

choice:
  Rychlá kontrola, jakou barvu má krychle?
  o: bílou
  x: červenou
  o: zelenou
  o: modrou

hint: Podívej se na obrazovku

--

multichoice:
  Co se naučíte v PGR?
  o: zaklínadla 
  x: shadery 
  x: transformace 
  o: fotbal

--

input:
  Zadej odpověď na otázku žiovta, vesmíru a vůbec: 
  answers: [42, čtyřicet dva, čtyřicetdva]

--

Tato krychle bude naším základem sněhuláka. Budeme chtít mít možnost s ní individuálně hýbat.

task: Přidej nový blok na matice, pojmenuj ho "nohy" a napoj ho na krychli.

hint: Pravým tlačítkem klikni do workspace a zvol Block of matrices. Přejmenuješ ho kliknutím na nadpis. Zapojíš ho přetažením myši od výstupního Matrix X k X u objektu krychle.

--

Uválejme je a postavme na zem! Budeme na to používat dvě matice transformací:
  * Matice změny měřítka vynásobí všechny souřadnice vrcholů danými hodnotami
  * Matice translace "přičte" ke všem souřadnicím vrcholů dané hodnoty

Skládání (násobení) matic provádíme v pořadí zprava doleva:
![Postup násobení](poradi.png)

--

task:
  * Změň měřítko "nohou" na trojnásobnou velikost. 
  * Přidej matici translace a posuň ho tak, aby spodní stěna ležela na úrovni y=0. 

hint:
  + Pravým tlačítkem klikni do workspace a zvol Transformations -> Scale -> Uniform scale. 
  + Vytvořenou matici přetáhni myší do našeho bloku matic. 
  + Zvětšením čísel na diagonále matice na 3 bys měl pozorovat zvětšení krychle. 
  + Obdobným způsobem přidej matici Translate.
  + Přetáhni ji NALEVO od matice Scale, abys posunutí vrcholů krychle uskutečnil až PO jejich přeškálování.
  + Nastav posunutí v ose y na 1,5 (tedy polovinu výšky přeškálované krychle).

--

Možná tě již napadlo, co by se stalo, kdyby se matice prohodily? Dalo by se s nimi dosáhnut stejného výsledku?

task: 
  Vzpomeň si, co dělají se souřadnicemi vrcholů jednotlivé transformace, a zkus dostat krychli do stejné polohy, když budou matice přehozené.

hint:
  Matice přehoď přetažením myší. Kostka poskočí nahoru. To je dané tím, že y souřadnice vrcholů vynásobíme třemi až po tom, co je zvětšíme o 1,5. Naše výsledné posunutí tedy najednou bude o 1,5 x 3, což je 4,5. Pokud chceš v tomto případě dosáhnout posunutí o 1,5, je třeba posunout jen o 0,5, jelikož 0,5 x 3 nám dá chtěných 1,5.

--

Když již víme, jak kostky umisťovat i zvětšovat. Pokračujme ve sněhulákovi. 

task:
  + Stejným způsobem přidej kostku zelenou a vytvoř pro ni blok transformací s názvem „střed“. 
  + Zvětši ji 2x a posuň ji tak, aby stála na kostce červené.

hint:
  Postupujme v pořadí nejprve zvětšení, a poté posunutí (zprava doleva). 
  * V matici Scale nastav hodnoty na 2 - strana kostky tedy bude velká dva.
  * Červená kostka končí ve výšce tři, zelenou kostku budeme tedy posouvat po ose y minimálně o tři. 
  * Kostka má však původně střed v nule, a tak je třeba posunout jí ještě o polovinu její výšky, tedy o jedna. 
  * Nastav tedy v matici Translate hodnotu u osy y na 4. 
  Kostky by měly hezky stát na sobě.

--

Blížíme se do finále…

task:
  Jako hlavu přidej kostku modrou a postav ji na kostku zelenou. Její blok transformací pojmenuj „hlava“. Velikost ponechej původní.

hint:
  Tentokráte můžeme vynechat matici Scale. Ničemu ale nevadí, pokud ji opět použijeme a ponecháme hodnoty na 1. Posunutí v matici Translate spočteme jako výška červené + výška zelené + půlka výšky modré, tedy 3 + 2 + 0,5 = 5,5.

--

A máme sněhuláka! Hotovi však ještě nejsme – představte si situaci, kdy bychom chtěli sněhuláka uchopit jako jeden objekt a celého ho někam přesunout, zvětšit, či pootočit. Měnit jednotlivé transformace by bylo zdlouhavé, můžeme to však udělat mnohem jednodušeji – přinásobit ke všem částem další matice transformace.

task:
  Vlevo ve workspace si vytvoř nový blok matic, pojmenuj ho „sněhulák“ a napoj jeho výstup na vstupy všech našich bloků. Zkus pak zmenšit celého sněhuláka na poloviční velikost a posunout ho na pozici x=3 a z=5.

hint:
  Pro spojení bloků přetáhni myší od nápisu Matrix X k nápisu X Matrix u bloků jednotlivých částí. Poté stačí už jen do bloku „sněhulák“ přidat matici Scale nastavenou na 0,5 a následně matici Translate s hodnotami 3, 0 a 5. Matice bloků se pronásobí mezi sebou, a jednotlivé vrcholy kostek tak na závěr projdou i těmito transformacemi. Když pak vememe například červenou kostku, můžeme si představit, že je postupně: zvětšena 3x -> posunuta po ose y o 1,5 -> zmenšena na 0,5x -> posunuta po ose x o 3 a po ose z o 5. 

--

A je to! Během tutoriálu jsme prošli, jak vytvářet a naplňovat bloky matic, a jak je propojovat mezi sebou tak, abychom dosáhli požadovaných transformací. Pokud chceš, můžeš si na závěr vyzkoušet se sněhulákem zatočit a sledovat, jaký má rotace efekt, podle toho, jestli se umístí před posunutí, anebo za posunutí.
