Autor Wątek: Odbijanie kulek od scian  (Przeczytany 2934 razy)

Offline ziomber

  • Użytkownik

  • Zbanowany
# Luty 20, 2007, 04:00:49
powiedzmy ze mam N kulek o jakims tam promieniu niech bedzie r
Kazdej takiej kuli przypisuje czas t0 i Prędkość V0 oraz kierunek poruszania sie kuli (wersor) (te wartosci sa inne dla kazdej kuli)

no i teraz mam jedna tablice ktora zapelniam przed ruchem kul (niech ta tablica nazywa sie KKTHXBYE) // <= inicjacia petardy [ta tablica to informacja na temat pozycji kulki wzgledem kazdej sciany ktora testuje, -1 z tylu, 0 na scianie, 1 z przodu)

//po inicjacji petarda wybucha i roznosi kulki w ich wyliczone strony wyglada to tak:

pozcyja_kulki := pozycja_kulki+kierunek*V; //V sie zmienia i maleje z czasem)
teraz testuje kolizje
sprawdzam wszystkie kulki ze wszystkimi scianami i zmieniam indexy w KKTHXBYE >> wyglada to tak
ponownie testuje pozycje kulki wzgledem scian
no i jak znajde ze po tescie pozycja wzgledem jednej sciany jest inna niz przed to wystapila kolizja >> po prostu kulka zmienila swoja pozycje wzgledem sciany (przebiła ją) [jak kulka byla z przodu to juz jest z tylu]- gdy juz jestem na tym etapie

sprawdzam kolizje ze sciana (czy na pewno przebijam te sciane ta kulka)

function findcollision_face(pos : t3dpoint; sphere_radius : single; facei : integer; model : tglArraySelectionModel) : boolean;
var
j,i : integer;
promien : t3dpoint;
znaks:integer;
begin
result := false;

ifclassifyapointagainstaplane(pos,model.face_normal[facei],model.face_distance[facei]) = isFront then  znaks := -1 else znaks := 1;
promien.x := pos.x + znaks*model.face_normal[facei].x*1000;
promien.y := pos.y + znaks*model.face_normal[facei].y*1000;
promien.z := pos.z + znaks*model.face_normal[facei].z*1000;

if IntersectedPolygon(model.colarrays[facei],[pos,promien],model.facelength[facei]) then result := true;
end;


//ta funkcja rzuca promien w kierunku sciany od pozycji kulki
po zwroceniu wartosci TRUE mamy przebicie >>
zmieniam KIERUNEK kulki wzorem na odbicie = V - 2*N*dot(N,V);

function odbij_od_sciany(V, N: t3dpoint) : t3dpoint;
begin
result := vectors_substract_v1minusv2(V,vector_multiple(vector_multiple(N, -2),dot( N ,V)));
end;

wg mnie wszystko powinno juz cacy dzialac ale nie dziala kulki sie nie odbiaja od scian tylko przechodza przez nie..
Moze ktos wie gdzie popelnilem blad albo pokaze jakas inna technike odbicia :X

a wyglada to tak: http://cezet.host.sk/qa.avi (muzyka peja haha)
« Ostatnia zmiana: Luty 20, 2007, 13:39:07 wysłana przez ziomber »

Offline Mr. Spam

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