+ All Categories
Home > Documents > IZG labs #5: 3D transformacefit.pesvan.cz/izg_lab_05.pdf · 3D transformace Lukáš Maršík...

IZG labs #5: 3D transformacefit.pesvan.cz/izg_lab_05.pdf · 3D transformace Lukáš Maršík...

Date post: 02-Feb-2021
Category:
Upload: others
View: 3 times
Download: 0 times
Share this document with a friend
21
IZG labs #5: 3D transformace Lukáš Maršík Fakulta informačních technologií Vysoké učení technické v Brně [email protected]
Transcript
  • IZG labs #5:

    3D transformace

    Lukáš Maršík

    Fakulta informačních technologií

    Vysoké učení technické v Brně

    [email protected]

  • Zobrazení 3D scény

    IZG labs #5: 3D transformace 2

    Jak na to?

  • Transformační matice

    • Bod ve 3D: (𝑥, 𝑦, 𝑧)

    • Použití homogenních souřadnic: (𝑥, 𝑦, 𝑧, 𝑤)

    • Konverze: 𝑥, 𝑦, 𝑧, 𝑤 →𝑥

    𝑤,

    𝑦

    𝑤,

    𝑧

    𝑤

    • Transformace bodu:

    𝑥′, 𝑦′, 𝑧′, 𝑤 = (𝑥, 𝑦, 𝑧, 1)

    𝑎00 𝑎01 𝑎02 𝑎03𝑎10 𝑎11 𝑎12 𝑎13𝑎20 𝑎21 𝑎22 𝑎23𝑎30 𝑎31 𝑎32 𝑎33

    IZG labs #5: 3D transformace 3

  • Jednotková matice

    • Lze použít pro inicializaci matice

    IZG labs #5: 3D transformace 4

    𝑥′, 𝑦′, 𝑧′, 𝑤 = (𝑥, 𝑦, 𝑧, 1)

    1 0 0 00 1 0 00 0 1 00 0 0 1

    𝑥′ = 𝑥 𝑦′ = 𝑦 𝑧′ = 𝑧 𝑤′ = 1

  • Transformace - translace

    • Důležitá dílčí operace pro manipulaci s objekty

    uvnitř scény

    IZG labs #5: 3D transformace 5

    𝑥′, 𝑦′, 𝑧′, 𝑤 = (𝑥, 𝑦, 𝑧, 1)

    1 0 0 00 1 0 00 0 1 0

    𝑑𝑥 𝑑𝑦 𝑑𝑧 1

    𝑥′ = 𝑥 + 𝑑𝑥 𝑦′ = 𝑦 + 𝑑𝑦 𝑧′ = 𝑧 + 𝑑𝑧 𝑤′ = 1

  • Transformace - rotace

    • Další důležitá operace pro manipulaci s objekty

    IZG labs #5: 3D transformace 6

    𝑥′, 𝑦′, 𝑧′, 𝑤 = (𝑥, 𝑦, 𝑧, 1)

    cos 𝛼 0 sin 𝛼 00 1 0 0

    − sin 𝛼 0 cos 𝛼 00 0 0 1

    𝑥′ = 𝑥 cos 𝛼 − 𝑧 sin 𝛼 𝑦′ = 𝑦 𝑧′ = 𝑥 sin 𝛼 + 𝑧 cos 𝛼 𝑤′ = 1

  • Transformace – měřítko

    • Lze použít i pro inverzi některé z os (například pro osu x bude 𝑆𝑥 = −1, 𝑆𝑦 = 1, 𝑆𝑧 = 1)

    IZG labs #5: 3D transformace 7

    𝑥′, 𝑦′, 𝑧′, 𝑤 = (𝑥, 𝑦, 𝑧, 1)

    𝑆𝑥 0 0 00 𝑆𝑦 0 0

    0 0 𝑆𝑧 00 0 0 1

    𝑥′ = 𝑥𝑆𝑥 𝑦′ = 𝑦𝑆𝑦

    𝑧′ = 𝑧𝑆𝑧 𝑤′ = 1

  • Perspektivní projekce

    • Také známá jako středové promítání

    • Scéna se jeví reálně

    IZG labs #5: 3D transformace 8

  • Perspektivní projekce – princip

    𝑥

    𝑑 + 𝑧=

    𝑢

    𝑑

    𝑢 = 𝑥𝑑

    𝑑 + 𝑧= ⋯ = 𝑥

    1

    1 +𝑧𝑑

    IZG labs #5: 3D transformace 9

    d

    (x,y,z)

    (0,0,-d)

    x

    z

    u

  • Perspektivní projekce – maticově

    IZG labs #5: 3D transformace 10

    𝑥′, 𝑦′, 𝑧′, 𝑤 = (𝑥, 𝑦, 𝑧, 1)

    1 0 0 00 1 0 0

    0 0 01

    𝑑0 0 0 1

    𝑥′ = 𝑥

    𝑦′ = 𝑦

    𝑧′ = 0 𝑢 = 𝑥

    1+𝑧

    𝑑

    𝑤′ =𝑧

    𝑑+ 1

  • Demonstrační aplikace

    • Zobrazení scény s

    jedním objektem a

    “zrcadlem”

    • Ovládání pomocí

    myši a klávesnice

    • Možnost načítání

    různých modelů

    pomocí parametru

    příkazového řadku

    • Linux i Windows

    IZG labs #5: 3D transformace 11

  • Back-face culling

    • Vyloučení polygonů odvrácených směrem od

    pozorvatele z procesu vykreslování

    • Výsledkem je zpravidla snížení zátěže

    vykreslovací jednotky

    IZG labs #5: 3D transformace 12

  • Orientace trojúhelníku

    • Lze určit pomocí

    skalárního součin

    vektoru směřujícího k

    pozorovateli a

    normálového vektoru

    trojúhelníku

    • Pokud je čelní plocha

    alespoň trochu

    natočena směrem k

    pozorovateli (úhel

    mezi vektory je ostrý),

    výsledek je kladné

    číslo

    IZG labs #5: 3D transformace 13

  • Orientace trojúhelníku ve scéně

    IZG labs #5: 3D transformace 14

    (0,0,-CAMERA_DIST)

    (0,0,0)

    p1

    p3 p2

    VIEW VECTOR

    n

    n

    n

    n

  • Společný úkol

    • Vykreslujte pouze

    přivrácené

    trojúhelníky

    • Odvrácené

    trojúhelníky zahazujte

    • Pozice kamery je

    (0,0,-CAMERA_DIST)

    • Při výpočtu orientace

    myslete na použitou

    perspektivní projekci!

    • Doplňujte pouze

    soubor student.cpp

    IZG labs #5: 3D transformace 15

  • Vykreslení scény

    • Předem dané pořadí operací pro vytvoření

    scény

    • Projekce vždy jako první

    • Následuje nastavení kamery

    IZG labs #5: 3D transformace 16

    Projekce Natočení

    Scény

    Umístění

    Objektu

    Objekt Zrcadlo

    Natočení

    objektu

    Natočení

    Objektu

    Natočení

    Scény

    Umístění

    Scény

  • Vykreslení scény – DrawScene()

    void DrawScene()

    {

    trProjectionPerspective(CAMERA_DIST, frame_w, frame_h);

    trLoadIdentity();

    trTranslate(0.0, 0.0, scene_move_z);

    trRotateX(scene_rot_x * 0.01);

    trRotateY(scene_rot_y * 0.01);

    ProjectLine(S_Coords(0, -2, -2), S_Coords(0, 2, -2), COLOR_BLUE);

    ProjectLine(S_Coords(0, 2, -2), S_Coords(0, 2, 2), COLOR_BLUE);

    ProjectLine(S_Coords(0, 2, 2), S_Coords(0, -2, 2), COLOR_BLUE);

    ProjectLine(S_Coords(0, -2, 2), S_Coords(0, -2, -2), COLOR_BLUE);

    trTranslate(obj_move_x * 0.015, obj_move_y * 0.015, 0.0);

    trRotateX(obj_rot_x * 0.01);

    trRotateY(obj_rot_y * 0.01);

    ProjectObject(MAT_RED);

    }

    IZG labs #5: 3D transformace 17

  • Vykreslení scény – zrcadlený objekt

    IZG labs #5: 3D transformace 18

    Projekce Umístění

    Objektu Objekt

    Get/Set Matrix trGetMatrix()

    Zrcadlo

    Umístění

    Objektu Objekt

    Zrcadlení

    Objektu

    trSetMatrix()

    Natočení

    Scény

    Umístění a

    natočení

    Scény

    Natočení

    objektu

    Natočení

    Objektu

    Natočení

    objektu

    Natočení

    Objektu

  • Bodovaný úkol

    • Vykreslete druhý

    objekt zrcadlený

    podle modrého

    obdélníku

    • Pro kreslení použijte

    materiál MAT_RED2

    • Pozor na pořadí

    dílčích transformací!

    IZG labs #5: 3D transformace 19

  • Reference

    • Původní prezentace od Michala Španěla

    připravená pro cvičení předmětu IZG

    • Toho času aktuální prezentace z přednášek

    předmětu IZG

    IZG labs #5: 3D transformace 20

  • DĚKUJI VÁM ZA POZORNOST

    IZG labs #5: 3D transformace 21


Recommended