OpenGL + jak znaleźć coś co widzimy

0

Uzywam sobie takiej ładnej funkcji gluLookAt, ktora musi miec kilka zmiennych podanych takich jak np. pozycja oka i miejsce, w ktore te oko patrzy... [

glulookat(old.x,old.y,old.z,old.x+SUPERPOINT.x,
old.y-SUPERPOINT.y,old.z-SUPERPOINT.z,0,1,0);] gdzie SUPERPOINT to wektor ktory podaje nam pozycje w ktora sie patrzymy7 (jak dodamy to do pozycji gracza)

SUPERPOINT.x := 100*(sin(glop*imopi)*cos(heading*imopi));
SUPERPOINT.z := 100*(cos(glop*imopi)*cos(heading*imopi));
SUPERPOINT.y := 100*(sin(heading*imopi));

Problem mam taki, ze chce znalezc rownania wszystkich płaszczyzn, które mi determinuja to co widze na ekranie

jak dotąd udało mi się jedynie wymyśleć równanie płaszczyzny, która znajduje się za graczem

xsup.x :=old.x+ 100*sin(glop*imopi);
xsup.y :=old.y- 100*sin(heading*imopi);
xsup.z :=old.z- 100*cos(glop*imopi);
xsup.x := xsup.x-old.x;
xsup.y := xsup.y-old.y;
xsup.z := xsup.z-old.z;
xsup := normalize(xsup);

xsup wychodzi wtedy, że jest to wektor prostopadły do płaszczyzny (tej za graczem)

ten obrazek pokaże o co chdzoi: tylko trzeba go skopiowac do przegladarki i nacisnace neter http://cezet.host.sk/superpoint.GIF

0

Znaczy chodzi ci o piramide widzenia?

0

no

0

łatwo jest wyliczyć płaszczyznę kiedy mamy chociaż 3 punkty leżące na niej tzn:
jeżeli mamy punkty ABC to liczymy wektory BA, BC następnie N = BA x BC, następnie normalizujemy N, teraz n.x, n.y, n.z to odpowiednio a,b,c równania płaszczyzny, potrzeba jeszcze d :
ax + by + cz + d = 0 z tego wynika że : d = - (ax + by + cz) czyli podstawiamy dowolny punkt do równania np B. i już mamy płaszczyznę.

Problem teraz jak wyliczyć punkty dla frustum, jeden punkt mamy ( to nasz obserwator! ) potrzebna nam jest jak gdyby ściana leżąca zawsze dokładnie przed nami, łatwo można ją wyliczyć mając punkt początkowy obserwatora ( P ) i punkt gdzie się gapi ( G ); liczymy sobie wektor PG. następnie wybieramy dowolny pionowy wektor Up np (0,1,0) i liczymy Up x PG w ten sposób otrzymamy wektor X naszej płaszczyzny, aby otrzymać wektor Y tej płaszczyzny liczymy X x PG, normalizujemy X oraz Y
Mnożymy je przez szerokość naszego frustum :) i już mamy wektory. Punkty tworzące naszą ścianę na płaszczyźnie wyliczamy :
p1 = PG + X + Y
p2 = PG - X + Y
p3 = PG - X - Y
p4 = PG + X - Y
Teraz zbieramy trzy punkty razem np, (p, p1, p4 ) - ściana boczna - policzymy płaszczyznę i mamy płaszczyznę frustum, podobnie wyliczamy następne.

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