tresc zadan uzupelniona
This commit is contained in:
parent
8350e908d0
commit
667a7c1ee3
@ -169,15 +169,22 @@
|
||||
<p><span class="math display">\[\frac{\partial v}{\partial t}=\Delta v.\]</span></p>
|
||||
<p>W wersji dyskretnej będzie to:</p>
|
||||
<p><span class="math display">\[\text{newV[i,j]} = \text{oldV}[i,j] + \Delta(\text{oldV},i,j).\]</span></p>
|
||||
<p>Należy dodać jeszcze jeden <code>RWStructuredBuffer<float></code>, w którym będziemy przechowywać poprzedni krok, nazwij go <code>oldVegetation</code>. Obliczenia będziemy wykonywać na danych z niego i zapisywać w <code>vegetation</code>. to pozwoli uniknąć problemów z synchronizacją bufora. Zaimplementuj powyższy wzór.</p>
|
||||
<p>Należy dodać jeszcze jeden <code>RWStructuredBuffer<float></code>, w którym będziemy przechowywać poprzedni krok, nazwij go <code>oldVegetation</code>. Obliczenia będziemy wykonywać na danych z niego i zapisywać w <code>vegetation</code>. to pozwoli uniknąć problemów z synchronizacją bufora. Dodaj też zmienną <code>dt</code> i zainicjalizuj ją atrybutem <code>dt</code>. Zaimplementuj powyższy wzór.</p>
|
||||
<p>Zainicjalizuj go po stronie C# analogicznie co bufor <code>vegetation</code>. Zapisz go jako atrybut o nazwie . W <code>initBufferValues</code> przypisz mu te same wartości co buforowi <code>vegetation</code>.</p>
|
||||
<p>Zaimplementuj funkcję <code>swapBuffers</code>, w której zamień ze sobą bufory <code>vegetation</code> i <code>oldVegetation</code> i wywołaj dla nich ponownie <code>computeShader.SetBuffer</code>. W <code>doSimulationSteps</code> dodaj wywołanie <code>swapBuffers</code> przed wywołaniem w pętli shadera.</p>
|
||||
<h3 id="zadanie-1">Zadanie</h3>
|
||||
<p>Zaimplementuj model reakcji dyfuzji:</p>
|
||||
<ol type="1">
|
||||
<li>Dodaj bufory, które będą przechowywać stan wody w obecnym i poprzednim kroku, zainicjalizuj je i obsłuż przy swapowaniu.</li>
|
||||
<li>Dodaj pozostałe parametry, zainicjalizuj je wartościami atrybutów.</li>
|
||||
<li>znajdź parametry dające ciekawe wzory, <code>dWater</code> i <code>dVegetation</code> ustaw na <code>0.3</code> i <code>0.1</code> odpowiednio.</li>
|
||||
</ol>
|
||||
<h3 id="interakcja-z-terenem">Interakcja z terenem</h3>
|
||||
<p>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 <code>feed</code> i <code>kill</code> od terenu.</p>
|
||||
<h3 id="zadanie-1">Zadanie</h3>
|
||||
<p>W tym celu stwórz dwa bufory typu <code>float</code> o nazwie <code>feedModifier</code> i <code>killModifier</code> i rozmiarze <code>sizeX*sizeY</code>. Następnie zapełnij je wartościami. Uzależnić <code>killModifier</code> od rodzaju tekstury.</p>
|
||||
<h3 id="zadanie-2">Zadanie</h3>
|
||||
<p>W tym celu stwórz dwa bufory typu <code>float</code> o nazwie <code>feedModifier</code> i <code>killModifier</code>. Następnie zapełnij je wartościami. Uzależnij <code>killModifier</code> od rodzaju tekstury. Pobierz wagi ze spaltmapy i jeżeli wartość śniegu będzie dodatnia ustaw <code>killModifier</code> na 2, w przeciwnym wypadku na 1. Teren ma inną rozdzielczość niż splatmapa, uwzględnij to przy pobieraniu danych.</p>
|
||||
<p>Po stronie shadera odczytaj wartość wartości <code>feedModifier</code> i <code>killModifier</code> dla danej współrzędnej i przemnóż je przez parametry <code>feed</code> i <code>kill</code> w równaniach.</p>
|
||||
<h3 id="zadanie-domowe">Zadanie domowe</h3>
|
||||
<p>Uzależnij <code>feedModifier</code> od wysokości terenu. możesz do tego wykorzystać na przykład funkcję <code>transition</code> napisaną wcześniej.</p>
|
||||
<p>Uzależnij <code>feedModifier</code> od wysokości terenu. możesz do tego wykorzystać na przykład funkcję <code>transition</code> napisaną na poprzednich zajęciach .</p>
|
||||
</body>
|
||||
</html>
|
||||
|
@ -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<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. 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 .
|
||||
|
Loading…
Reference in New Issue
Block a user