Autor Wątek: Seedowanie chmur na niebie  (Przeczytany 4388 razy)

Offline ziomber

  • Użytkownik

  • Zbanowany
# Maj 22, 2007, 17:42:31
Jak w możliwie najprostszy sposób rozmieścić chmury na niebie ja używam funkcji random do określenie pozycji ale coś mi to lewo idzie bo zamiast zajęcia dość dużego obszaru zajmuja tylko skrawek tego obszaru / Najlepiej żeby to nie był pomysł, w którym testuje się odległość jednej chmury od reszty.



arandom to funkcja, która losuje pomiędzy liczbą min, a liczbą max

procedure CREATE_ATMOSPHERE(var pogoda : tpogoda);
var
i : integer;
begin
if not pogoda.chmury then setlength(pogoda.WEATHER_PARTS.clouds,0);
if pogoda.chmury then if pogoda.DUZO_CHMUR then  setlength(pogoda.WEATHER_PARTS.clouds,530) else
setlength(pogoda.WEATHER_PARTS.clouds,250);

setlength(clouds_o,length(pogoda.WEATHER_PARTS.clouds));

for i:=0 to high(pogoda.WEATHER_PARTS.clouds) do   begin
pogoda.WEATHER_PARTS.clouds[i].pos :=  triplesingletot3dpoint(arandom(-55000,55000),arandom(35000,45000), arandom(-55000,55000));
pogoda.WEATHER_PARTS.clouds[i].color[0] := random(100)/100;
pogoda.WEATHER_PARTS.clouds[i].color[1] := random(100)/100;
pogoda.WEATHER_PARTS.clouds[i].color[2] := random(100)/100;
pogoda.WEATHER_PARTS.clouds[i].SIZE.x := arandom(7,15);
pogoda.WEATHER_PARTS.clouds[i].SIZE.y := arandom(7,20);
pogoda.WEATHER_PARTS.clouds[i].SIZE.z := arandom(12,25);

clouds_o[i] := pogoda.WEATHER_PARTS.clouds[i].pos;
end;


end;

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline Riddlemaster

  • Użytkownik
    • Moja strona domowa

# Maj 22, 2007, 17:52:34
Chmurki polecam wykonać używając szumu perlina (ewentualnie dynamicznego). W ten sposób w ogóle nie trzeba rozmieszczać chmur (geometria?), lecz po prostu przypisać procedalną teksturę do sky plane'a/boxa/dome'a. Jest to często bardzo tanie obliczeniowo, a przy tym wykorzystując nowoczesne technologie (SM 3.0) daje niezwykle realistyczne efekty.

Offline ziomber

  • Użytkownik

  • Zbanowany
# Maj 22, 2007, 18:06:18
nie moge znalezc tego szumu :S dodatkowo nie bede stwsowal jakis technik SM 3.0 bo to sie mija z celem szybciej bedzie napisac cos wlasnego, a te chmury beda inaczej wygladaly :u jakies inne propozycje ? ;]

maxest

  • Gość
# Maj 22, 2007, 18:21:40
Poszukaj pod haslem "Perlin Noise". Nie trzeba do tego wykorzystywac SM 3.0 zeby dostac fajne efekty (chociaz z shader'ami wszystko wyglada piekniej ;) ). W ogole technika ta jest opisana w "Programowanie gier w DirectX" (bez uzycia shader'ow)

Offline Rodrigo

  • Użytkownik

# Maj 22, 2007, 19:38:19
Mysle ze przeczytanie tych dwoch artykulow powinno rozjasnic Ci sprawe:

http://www.gamedev.net/reference/articles/article2093.asp
http://www.gamedev.net/reference/articles/article2085.asp

Pozdrawiam...

Offline Charibo

  • Redaktor

# Maj 22, 2007, 19:54:48
W gpg 2 też masz ładnie opisany szum i proceduralna animacje tekstur, więc wystarczy sięgnąć na półkę :)

Offline ziomber

  • Użytkownik

  • Zbanowany
# Maj 23, 2007, 02:51:13
eee ja nie chce dwuwymiarowych tekstur tylko ladnie rozsiane punkty w tablicy

maxest

  • Gość
# Maj 23, 2007, 02:57:21
Jak chcesz fajnie losowo rozmiescic chmurki to skorzystaj z funkcji robiacej "szum":

  function IntNoise(32-bit integer: x)

    x = (x<<13) ^ x;
    return ( 1.0 - ( (x * (x * x * 15731 + 789221) + 1376312589) & 7fffffff) / 1073741824.0);   

  end IntNoise function

Offline Riddlemaster

  • Użytkownik
    • Moja strona domowa

# Maj 23, 2007, 14:46:58
Ziomber: Szum Perlina nie ogranicza nas do 2 wymiarów. Stosując go dla n wymiarów, możemy uzyskać dowolną n - wymiarową tablicę z losowymi wartościami.

Offline ziomber

  • Użytkownik

  • Zbanowany
# Maj 23, 2007, 14:56:24
eee to ja jednak stworze kilka typów chmur, ustawie regiony z 4 vertexów każdy i tam bede wg schematu (typu chmury) seedował bo to bedzie najprostsze, a nie jakies zbedne obrazki do tworzenia heightmap :/

maxest

  • Gość
# Maj 23, 2007, 15:13:56
Lol. Z tego co mi wiadomo to te "zbedne obrazki do tworzenia heightmap" stanowia podwaliny tworzenia efektu chmur w grach i sa bardzo popularne. Ale rob jak chcesz...

Offline Charibo

  • Redaktor

# Maj 23, 2007, 17:33:46
pomijajac to, ze tekstura to jest nic innego jak tablica :)

Offline Reg

  • Administrator
    • Adam Sawicki - Home Page

# Maj 23, 2007, 18:39:19
Jeśli dobrze rozumiem, to Ziomber chce jednak zrobić to po swojemu i pyta jak naprawić problem z rozmieszczeniem.

Odpowiadając jednak tak jak inni :) czyli jak można inaczej zrobić chmury, polecam metodę z World of Warcraft - proceduralnie generowana i w czasie rzeczywistym, ale bardzo powoli nieznacznie modyfikowana tekstura, bardzo rozciągnięta i rysowana z filtrowaniem liniowym. To powinno być proste, szybkie, a wygląda fajnie: http://regedit.warsztat.gd/pub/Linked/WoW_Clouds.jpg.

Offline ziomber

  • Użytkownik

  • Zbanowany
# Maj 23, 2007, 19:00:45
jestem bardziej ambitny :P http://www.ofb.net/~eggplant/clouds/cloud_images.html

Tylko jak na razie to źle mi kolory ustawia, źle seeduje (olac to na razie) i żle blending jest ustawiony moze to wina tekstur, bo jak naloze jeden sprite na drugi to wyglada to jakby chmura sama tworzyła światło lepiej niz ache wybielacz nad wybielacze :0

Dodatkowo jak tekstura nie jest 32 bitowa to właśnie powstaje to co powstaje jeden kolor pokrywa się z drugim i nie ma mowy o zasłanianiu pojedynczej chmurki przez inne, niestety nie posiadam innych tekstur, a przerobienie narobi ino klopotów chociaż nic nie wiadomo bo mozna by sprobować dodać nastepny bit dzialajac na zasadzie: ALPHA = odleglosc_piksela_od_srodka/(rozmiartekstury/2) czy jakos tak :S, a tak to by wystarczylo włączyć glalphafunc(GL_GREATER,nie wiem moze 0.2); i po sprawie :S, aa w sumie RTCW ma takie teksturki identyczne tylko, że niby to jest dym a takie same z wygladu :]
« Ostatnia zmiana: Maj 23, 2007, 19:11:16 wysłana przez ziomber »

maxest

  • Gość
# Maj 23, 2007, 20:09:30
Poki co te chmury wygladaja jak jakis wybuch ;)