diff --git a/Treść zadań/cw7.html b/Treść zadań/cw7.html index 04fa15f..eaaf311 100644 --- a/Treść zadań/cw7.html +++ b/Treść zadań/cw7.html @@ -169,15 +169,22 @@

\[\frac{\partial v}{\partial t}=\Delta v.\]

W wersji dyskretnej będzie to:

\[\text{newV[i,j]} = \text{oldV}[i,j] + \Delta(\text{oldV},i,j).\]

-

Należy dodać jeszcze jeden RWStructuredBuffer<float>, w którym będziemy przechowywać poprzedni krok, nazwij go oldVegetation. Obliczenia będziemy wykonywać na danych z niego i zapisywać w vegetation. to pozwoli uniknąć problemów z synchronizacją bufora. Zaimplementuj powyższy wzór.

+

Należy dodać jeszcze jeden RWStructuredBuffer<float>, w którym będziemy przechowywać poprzedni krok, nazwij go oldVegetation. Obliczenia będziemy wykonywać na danych z niego i zapisywać w vegetation. to pozwoli uniknąć problemów z synchronizacją bufora. Dodaj też zmienną dt i zainicjalizuj ją atrybutem dt. Zaimplementuj powyższy wzór.

Zainicjalizuj go po stronie C# analogicznie co bufor vegetation. Zapisz go jako atrybut o nazwie . W initBufferValues przypisz mu te same wartości co buforowi vegetation.

Zaimplementuj funkcję swapBuffers, w której zamień ze sobą bufory vegetation i oldVegetation i wywołaj dla nich ponownie computeShader.SetBuffer. W doSimulationSteps dodaj wywołanie swapBuffers przed wywołaniem w pętli shadera.

+

Zadanie

+

Zaimplementuj model reakcji dyfuzji:

+
    +
  1. Dodaj bufory, które będą przechowywać stan wody w obecnym i poprzednim kroku, zainicjalizuj je i obsłuż przy swapowaniu.
  2. +
  3. Dodaj pozostałe parametry, zainicjalizuj je wartościami atrybutów.
  4. +
  5. znajdź parametry dające ciekawe wzory, dWater i dVegetation ustaw na 0.3 i 0.1 odpowiednio.
  6. +

Interakcja z terenem

W tej chwili trawa rośnie niezależnie od tekstury terenu i jego wysokości, powoduje to, że mamy trawę wyrastającą na drodze albo na szczycie góry. By zniwelować ten problem można uzależnić parametry feed i kill od terenu.

-

Zadanie

-

W tym celu stwórz dwa bufory typu float o nazwie feedModifier i killModifier i rozmiarze sizeX*sizeY. Następnie zapełnij je wartościami. Uzależnić killModifier od rodzaju tekstury.

+

Zadanie

+

W tym celu stwórz dwa bufory typu float o nazwie feedModifier i killModifier. Następnie zapełnij je wartościami. Uzależnij killModifier od rodzaju tekstury. Pobierz wagi ze spaltmapy i jeżeli wartość śniegu będzie dodatnia ustaw killModifier na 2, w przeciwnym wypadku na 1. Teren ma inną rozdzielczość niż splatmapa, uwzględnij to przy pobieraniu danych.

Po stronie shadera odczytaj wartość wartości feedModifier i killModifier dla danej współrzędnej i przemnóż je przez parametry feed i kill w równaniach.

Zadanie domowe

-

Uzależnij feedModifier od wysokości terenu. możesz do tego wykorzystać na przykład funkcję transition napisaną wcześniej.

+

Uzależnij feedModifier od wysokości terenu. możesz do tego wykorzystać na przykład funkcję transition napisaną na poprzednich zajęciach .

diff --git a/Treść zadań/cw7.md b/Treść zadań/cw7.md index 4d77687..fac1e60 100644 --- a/Treść zadań/cw7.md +++ b/Treść zadań/cw7.md @@ -146,13 +146,19 @@ W wersji dyskretnej będzie to: $$\text{newV[i,j]} = \text{oldV}[i,j] + \Delta(\text{oldV},i,j).$$ -Należy dodać jeszcze jeden `RWStructuredBuffer`, w którym będziemy przechowywać poprzedni krok, nazwij go `oldVegetation`. Obliczenia będziemy wykonywać na danych z niego i zapisywać w `vegetation`. to pozwoli uniknąć problemów z synchronizacją bufora. Zaimplementuj powyższy wzór. +Należy dodać jeszcze jeden `RWStructuredBuffer`, w którym będziemy przechowywać poprzedni krok, nazwij go `oldVegetation`. Obliczenia będziemy wykonywać na danych z niego i zapisywać w `vegetation`. to pozwoli uniknąć problemów z synchronizacją bufora. Dodaj też zmienną `dt` i zainicjalizuj ją atrybutem `dt`. Zaimplementuj powyższy wzór. Zainicjalizuj go po stronie C# analogicznie co bufor `vegetation`. Zapisz go jako atrybut o nazwie . W `initBufferValues` przypisz mu te same wartości co buforowi `vegetation`. Zaimplementuj funkcję `swapBuffers`, w której zamień ze sobą bufory `vegetation` i `oldVegetation` i wywołaj dla nich ponownie `computeShader.SetBuffer`. W `doSimulationSteps` dodaj wywołanie `swapBuffers` przed wywołaniem w pętli shadera. +### Zadanie +Zaimplementuj model reakcji dyfuzji: + + 1. Dodaj bufory, które będą przechowywać stan wody w obecnym i poprzednim kroku, zainicjalizuj je i obsłuż przy swapowaniu. + 2. Dodaj pozostałe parametry, zainicjalizuj je wartościami atrybutów. + 3. znajdź parametry dające ciekawe wzory, `dWater` i `dVegetation` ustaw na `0.3` i `0.1` odpowiednio. ### Interakcja z terenem @@ -160,11 +166,11 @@ W tej chwili trawa rośnie niezależnie od tekstury terenu i jego wysokości, po ### Zadanie -W tym celu stwórz dwa bufory typu `float` o nazwie `feedModifier` i `killModifier` i rozmiarze `sizeX*sizeY`. Następnie zapełnij je wartościami. Uzależnić `killModifier` od rodzaju tekstury. +W tym celu stwórz dwa bufory typu `float` o nazwie `feedModifier` i `killModifier`. Następnie zapełnij je wartościami. Uzależnij `killModifier` od rodzaju tekstury. Pobierz wagi ze spaltmapy i jeżeli wartość śniegu będzie dodatnia ustaw `killModifier` na 2, w przeciwnym wypadku na 1. Teren ma inną rozdzielczość niż splatmapa, uwzględnij to przy pobieraniu danych. Po stronie shadera odczytaj wartość wartości `feedModifier` i `killModifier` dla danej współrzędnej i przemnóż je przez parametry `feed` i `kill` w równaniach. ### Zadanie domowe -Uzależnij `feedModifier` od wysokości terenu. możesz do tego wykorzystać na przykład funkcję `transition` napisaną wcześniej. +Uzależnij `feedModifier` od wysokości terenu. możesz do tego wykorzystać na przykład funkcję `transition` napisaną na poprzednich zajęciach .