[c++] efekty graficzne

0

witam,

jak uzyskac efekt gwiazd (pikseli) rozchodzacych sie od srodka na boki ?
czy moze ktos poddac pomysl? nie chodzi o konkretna implementacje, tylko o sam pomysl,

w zalacznikach daje rezultat programu :

plik jpg : http://www.speedyshare.com/523913289.html
plik exe: http://www.speedyshare.com/597270318.html

wielkie dzieki z gory za pomoc ;)

0

Robisz sobie tablicę gwiazdek. Każda gwiazdka ma położenie i prędkość. Prędkość to para (velX, velY). Ustalasz początkowo położenie gwiazdek na środek. Dajesz im losowe prędkości (oczywiście sensownie ograniczone, żeby gwiazdki nie wyleciały za ekran od razu i żeby nie stały w miejscu).

Potem w każdym obiegu głównej pętli, dla każdej gwiazdy:
posX += velX * dt;
posY += velY * dt;

gdzie dt to czas jaki upłynął od poprzedniego przebiegu głównej pętli.

Jeżeli temat Cię bardziej interesuje to poszukaj o silnikach cząsteczkowych. Na nehe jest bardzo podstawowy tutorial, chyba nawet jest przetłumaczony na pl w ramach nehe pl (use google).

0

czyli:
const int n -- ilosc gwiazdek

int t[4][n];

i potem :

t[0][i] -- posX
t[1][i] -- posY
t[2][i] -- velX - czyli predkosc X ?
t[3][i] -- velY - predkosc Y ?

o takie zestawienie chodzi ?

0

zwróć uwagę, że żeby technicznie takie niebo wykonać, będziesz musiał użyć jakiejś biblioteki graficznej, coś pokroju DirectDraw, bo bez tego twoje gwiazdki nie będą się zbyt płynnie poruszać...

0
grafik napisał(a)

czyli:
const int n -- ilosc gwiazdek

int t[4][n];

i potem :

t[0][i] -- posX
t[1][i] -- posY
t[2][i] -- velX - czyli predkosc X ?
t[3][i] -- velY - predkosc Y ?

o takie zestawienie chodzi ?
raczej takie:

struct Star
{
   double posX, posY;
   double velX, velY;
   void Move(double dt) { posX += velX * dt; posY += velY * dt; }
};

Star gwiazdki[n];

Btw te gwiazdy mają jakośtam latać po obszarze 2D, czy obserwator ma lecieć a gwiazdy stoją w 3D ? Bo jeśli to drugie, to po prostu muisz skorzystać z jakiejś biblioteki do renderigu grafiki 3D, rozrzucić gwiazdy po przestrzeni (rozmieścić modele kul o różnych wielkościach i w różnych miejscach) i tylko przesuwać widok.
Ewentualnie samemu coś takiego napisać:

  • każda gwiazda to punktpołożenia \vec{G}=(GX, GY, GZ) jej środka oraz jej promień R

  • widok (kamera) to wektor położenia \vec{W}=(WX, WY, WZ)i kieruneku \vec{K}=(KX, KY, KZ)

  • położenie gwiazdy względem kamery:
    (VX,VY,VZ)=\vec V=\vec G-\vec W

  • widoczną wielkość gwiazdy (promień) obliczysz tak:
    r=\frac{R}{|\vec V|}

  • widoczne położenie gwiazdy (położenie x,y) obliczysz tak:
    x = arccos(VX\cdot KX+VY\cdot KY)
    y = arccos(VY\cdot KY+VZ\cdot KZ)
    Powyższe wpółrzędne są z zakresu -\pi..\pi, 0 oznacza punkt prosto przed kamerą, \pi oznacza punkt za kamerą, \pi/2 oznacza punktz boku kamery (położony prostopadle do jej kierunku). Więc zakładając, że kamer widzi szeroko/wysoko na 90 stopni, to należy malować gwiazdy o wsółrzędnych z zakresu od -\pi/4 do \pi/4.

0

hmm, to ma być animacja 2d, jeśli chodzi o bibliotekę graficzną to mam ją z góry narzuconą - jest to (uboga) biblioteka stworzona w celach naukowych, umożliwia tylko narysowanie piksela i tyle,

w przypadku grafiki 2d to chyba nie ma znaczenia czy to gwiazdy się poruszają na obserwatora, czy obserwator, efekt będzie chyba ten sam..?! w każdym razie ja najprawdopodobniej mam poruszać gwiazdy ;)

dzięki za pomoc , już mniej więcej wiem jak się z tym uporać

1 użytkowników online, w tym zalogowanych: 0, gości: 1