From 216e6fcfa4399c6823a8507449635127de80c44c Mon Sep 17 00:00:00 2001 From: duszekjk Date: Fri, 7 May 2021 21:13:09 +0200 Subject: [PATCH] cwiczenia 5 trees in environment --- Opis.md | 44 +++++++++--------- Unity Project/.DS_Store | Bin 6148 -> 6148 bytes Unity Project/Assets/.DS_Store | Bin 6148 -> 6148 bytes Unity Project/Assets/Scripts/.DS_Store | Bin 0 -> 6148 bytes .../Scripts/TurtleLSystemEnvironment.cs | 1 + .../Assets/Scripts/env/Environment.cs | 4 ++ 6 files changed, 26 insertions(+), 23 deletions(-) create mode 100644 Unity Project/Assets/Scripts/.DS_Store diff --git a/Opis.md b/Opis.md index fc3508a..795c2bb 100644 --- a/Opis.md +++ b/Opis.md @@ -1,14 +1,14 @@ # Trees in environment -Aby zasymulować środowisko wykorzystamy voxel space. W środowisku będziemy rozpatrywać tylko jedną cechę - zacienienie. +W trakcie tych zajęć wykorzystamy *voxel space* do zasymulowania wpływu zacienienia na rozwój drzew. ## Klasa Environment -Klasa environment zawiera voxel space z informacją o zacienieniu. +Klasa environment znajduje się w `Assets\Scripts\env` i implementuje *voxel space* z informacją o zacienieniu. Zawiera ona następujące metody ### addShadow -Funkcja addShadow implementuje metodę shadow propagation. Najpierw zwiększa wartość cienia w zadanej pozycji. Następnie przechodzi w pentlach w dół, zmniejszając z każdym poziomem siłę cienia, ale zwiększając szerokość oddziałowywania. +Funkcja addShadow implementuje algorytm shadow propagation. Przyjmuje ona wektor pozycji w przestrzeni świata i siłę zacienienia. Najpierw zwiększa wartość cienia w zadanej pozycji. Następnie przechodzi w pętlach w dół, zmniejszając z każdym poziomem siłę cienia, ale zwiększając szerokość oddziaływania. ```C# for(int j = (int)voxelPosition.y; j >= 0; j--) @@ -27,11 +27,11 @@ for(int j = (int)voxelPosition.y; j >= 0; j--) ### shadowStrength -Zwraca siłę cienia w zadanej pozycji +Zwraca siłę cienia w zadanej pozycji świata. ### inVoxelSpace -Sprawdza, czy dane współrzędne się mieszczą w voxel space +Sprawdza, czy dane współrzędne voxela mieszczą się w *voxel space*. ```C# bool inVoxelSpace(int a, int b, int c) @@ -42,6 +42,8 @@ bool inVoxelSpace(int a, int b, int c) ### positionInVoxel i positionInWorld +Konwertuje `positionInVoxel` z pozycji w przestrzeni świata do pozycji w przestrzeni *voxel space* `positionInWorld` odwrotnie. + ```C# public Vector3 positionInVoxel(Vector3 positionInWorld) @@ -66,25 +68,22 @@ bool inVoxelSpace(int a, int b, int c) shadowBox 1. Otwórz Unity Project, wersję na te ćwiczenia. Następnie otwórz scenę "Pipe Model" -2. Do objektu shadowBox jest przypięty skrypt Cast Shadow. Otwórz ten skrypt. -3. Zmodyfikuj skrypt, tak aby ten obiekt rzucał cień w dół. - 1. Wykorzystaj funkcję środowiska (Environment) - 2. public void addShadow(Vector3 position, sbyte strength) // ujemna siła, aby usunąć (Vector3 position to pozycja shadowBox) +2. Do obiektu shadowBox jest przypięty skrypt `Cast Shadow`. Otwórz ten skrypt. +3. Zmodyfikuj skrypt, tak aby ten obiekt rzucał cień w dół: + Skrypt zawiera atrybut `Environment environment`, który obsługuje zacienienie w tej scenie. Wykorzystaj jego metodę `addShadow(Vector3 position, sbyte strength)` by dodać cień w miejscu, w którym znajduje się obiekt. Wykorzystaj metodę `removeShadow(Vector3 position, sbyte strength)`, by usunąć cień, który powinien zniknąć, po przesunięciu obiektu. ## Zadanie 2 inShadow -1. W objekcie inShadow jest skrypt receiveShadow -2. Zmodyfikuj skrypt - jak na ten objekt spadnie cień, to zmień materiał na **inShadow**, jak nie będzie w cieniu, to na **noShadow** - 1. Wykorzystaj funkcję środowiska (Environment) - 2. public byte shadowStrength(Vector3 pos) +1. Do obiektu `inShadow` podpięty jest skrypt `receiveShadow` +2. Tak go zmodyfikuj, żeby jak na ten obiekt spadnie cień, to zmień materiał na **inShadow**, a jak nie będzie w cieniu, to na **noShadow**. Wykorzystaj metodę `shadowStrength(Vector3 pos)` obiektu `environment`, żeby odczytać stan zacieniowania. ## Zadanie 3 treeshadowtreeshadowgreentreeshadow -1. Wybierz objekt tree (001) +1. Wybierz obiekt tree (001) 2. Jeśli nie jest ustawione, to ustaw odpowiednią ścieżkę (L-System Path) do *ShadowModel.txt* @@ -92,15 +91,15 @@ bool inVoxelSpace(int a, int b, int c) 4. Gałęzie w cieniu nadal się rozwijają. Wylicz zacienienie do L-Systemu - 1. Skrypt **TurtleLSystemEnvironment**, funkcja **lightDirection** (20 linijka), od 38 linijki + 1. W skrypcie **TurtleLSystemEnvironment** uzupełnij metodę **lightDirection** (20 linijka), od 38 linijki 2. Zacienienie mierzymy w prostopadłościanie wokół obecnego elementu (2\***lookForLightLength** x **lookForLightLength** x 2\***lookForLightLength**) treebox - 3. Transformacja z obecną pozycją (**transformation**\***resultTransformation**) - funkcja transformacja.**ExtractPosition**() zwraca pozycję dla transformacji + 3. Zmienna `objectTransformation` zawiera transformację obecnego elementu. Po jej przekształceniu, pozycję można uzyskać funkcją *transformacja*.**ExtractPosition()** + 5. Wyślij wartość zacienienia do L-Systemu @@ -113,22 +112,21 @@ S(a,c) : c>=50 -> S(a+1,0) S(a,c) : c<50 -> G\(90)[-S(0,0)]S(0,0) ``` -1. 1. L-System będzie odczytywał jako cień drugą wartość - dla **S(a, c)** to będzie **c** - 2. **node.literal.values** jest tablicą z wartościami L-Systemu +W L-Systemie wartość zacienienia jest opisywana przez drugi parametr, czyli `c` w powyższym kodzie. By zmodyfikować parametr musisz odwołać sie do zmiennej `node`, dokładniej do `node.literal.values`, które jest tablicą zawierającą parametry odczytywanego symbolu. ## Zadanie 4 manytrees -1. Dodaj do objektu Environment więcej drzew (Trees) i zobacz jak drzewa wpływają na siebie nawzajem -2. Napisz skrypt, który utworzy 9 drzew (3 wiersze i 3 kolumny) rozmieszczonych co równą odległość, przetestuj różne odległości -3. Zobacz jak się w takim układzie rozwijają +1. Dodaj do objektu Environment więcej drzew (Trees) i zobacz jak drzewa wpływają na siebie nawzajem. +2. Napisz skrypt, który utworzy 9 drzew (po trzy w trzech rzędach) rozmieszczonych w równych odstępach, przetestuj różne odległości. +3. Zobacz jak się w takim układzie rozwijają. ## Zadanie 5 - domowe -Zintegruj L-System pipe model z wcześniejszych ćwiczeń z obsługą cienia +Zintegruj L-System pipe model z wcześniejszych ćwiczeń z obsługą cienia. Napisz L-System, który modeluje wybrany przez ciebie kształt drzewa. Kształt ma być twój indywidualny, ale możesz się wspomóc: diff --git a/Unity Project/.DS_Store b/Unity Project/.DS_Store index 9d825882a4a1d89dd6ae0a94d56fb79f7aad7020..c3bb3948fb206fdb1186f4746eaa99295d1e5a8b 100644 GIT binary patch delta 26 hcmZoMXffEZnuXKQ(!@wd!N}Zf@=jK#&EHt~gaK`O2kig= delta 16 XcmZoMXffEZnq~3^R`1Q+N!m$+uYL8Ru;N#md99nVsV=KL8I27FYlP delta 20 bcmZoMXffEJ&pKI?<-#U5cBaj29RK(MMvDe) diff --git a/Unity Project/Assets/Scripts/.DS_Store b/Unity Project/Assets/Scripts/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..b3dd60c6018977df34e9f9f7d37f53a3d3c58d9e GIT binary patch literal 6148 zcmeHK%}T>S5Z-O8rij>spm^Ggw;r0(`g0IMtOsvGL=P%$LW>Q=q_k;+#z@{n-^d5> zb)4DVh{YZ}iP#y~{bqJ%b~9h;{xHV4J?)!})fi(2G(?Wd0>R;hu96N$^HRC8vbtuVY#6uBFiM=*ji(da9bcn$?#4q; z>laZJeCn=u=?{`_ZR;coW7iJ{W0~yt2M}^|<%j(!v7>3&pU8O}<*1@`YrAP`9<`cv z(LC7C>LNAG_F-MLTg@!18rys3@mcTw;W2&6o?jHh9DV>Pn;Hvv1w|J)bH-s1g?BJg zL>Ezn!~iis3=jiL#DG2ojP)g|nMx%Fh=HFmfct}hhG=Qb70RsxI=nukzk-MYI=&?k zg+@zbt`IyRT%`i4RIZ;GT&2Uf&~cW=T%k&5T&@iB=#`7d3zw_IxRBwDTMDTs28e-q z2Fl8;;rV|Gf0>1k{P`5Jhyh~YpE1BI9j9YMQTlBCRvw=84 gksaw&et|l~SsHVNI17%;bU?ZYNJ6M127ZBo50igTN&o-= literal 0 HcmV?d00001 diff --git a/Unity Project/Assets/Scripts/TurtleLSystemEnvironment.cs b/Unity Project/Assets/Scripts/TurtleLSystemEnvironment.cs index adc6d33..6fd2ed4 100644 --- a/Unity Project/Assets/Scripts/TurtleLSystemEnvironment.cs +++ b/Unity Project/Assets/Scripts/TurtleLSystemEnvironment.cs @@ -35,6 +35,7 @@ abstract public class TurtleLSystemEnvironment : TurtleLSystem { foreach (GameObject gameObject in GameObject.FindGameObjectsWithTag("ShadowCone")) { DestroyImmediate(gameObject); } + Matrix4x4 objectTransformation = (transformation*resultTransformation); int nr_shadow_str = 1; //---------------------miejsce-na-zadanie-3.4--------------------------------------// diff --git a/Unity Project/Assets/Scripts/env/Environment.cs b/Unity Project/Assets/Scripts/env/Environment.cs index 80095fd..a09de70 100644 --- a/Unity Project/Assets/Scripts/env/Environment.cs +++ b/Unity Project/Assets/Scripts/env/Environment.cs @@ -156,6 +156,10 @@ public class Environment : MonoBehaviour } } + public void removeShadow(Vector3 position, sbyte strength) // negative value to remove + { + addShadow(position, -strength); + } public void addShadow(Vector3 position, sbyte strength) // negative value to remove { // 6.2 / 0.1 = 62.0