[C++]/[OpenGL] Detekcja kolizji..

0

Witam. Staram się stworzyć w OpenGL klon gry "Pong".
Problem polega na wykryciu zderzenia 2 (i raczej tylko 2) obiektów. Jak na razie zderzenia są wykrywane "na sztywno", czyli po "pixelach" lub inaczej - położeniu obiektu 1 i porównaniu go z obiektem 2 i czy na przykład obiekt 1 nie przekroczył pixela 385.
Co do tych pixeli..w OpenGL zbudowałem okno z bryłą obcinania taką jak rozdzielczość - właśnie dla wygody...ale mieszaja mi się układy współżędnych, bo jakimś sposobem każdy obiekt ma własny i trzeba było je kalibrować...ale nie o tym miało być.
Jeśli ktoś może coś podpowiedzieć będę wdzięczny.

0

Operujesz na współrzędnych 3D, a tam wszystko obliczysz - łącznie z tymi kolizjami.
Ekran jest jedynie dla gracza. :)

0

czlowieku! powiedz czy detekcja kolizji na 2d czy 3d obiektach

0

Oj sorki, Obiekty są 3D ale kolizja typu 2D(Pisze Ponga), kolizje mam wbudowaną na sztywno - czyli jak wylecimy poza np. 400 "pixel" to costam, i tak jak jest działa. A chcĘ zeby było to zrobione uniwersalnie, bo np. bede chciał "przeszkadzajki" wprowadzić.

0
testament napisał(a)

Oj sorki, Obiekty są 3D ale kolizja typu 2D(Pisze Ponga), kolizje mam wbudowaną na sztywno - czyli jak wylecimy poza np. 400 "pixel" to costam, i tak jak jest działa. A chcĘ zeby było to zrobione uniwersalnie, bo np. bede chciał "przeszkadzajki" wprowadzić.

no to masz zwykłe SphereToSquareCollision (newet pewnie SphereToSquareAACollision). chyba, że te przeszkaszajki to jakieś dziwolągi ;P czyli weź kartke i dasz sobie radę ;)

0

nie zaieniam tego na C

//to dryobatesa :}}
function n2disPointinTriangle(P, P1, P2, P3: TextPoint): Boolean;
  var
    t1, t2, t3: single;
  begin
    t1 := (P3.Y-P1.Y)*(P.X-P1.X) - (P3.X-P1.X)*(P.Y-P1.Y);
    t2 := (P2.Y-P3.Y)*(P.X-P3.X) - (P2.X-P3.X)*(P.Y-P3.Y);
    t3 := (P1.Y-P2.Y)*(P.X-P2.X) - (P1.X-P2.X)*(P.Y-P2.Y);
    if ((t1>0)and(t2>0)and(t3>0))or((t1<0)and(t2<0)and(t3<0)) then
      Result := True
    else
      Result := False;
  end;
                                                         //variable that informs computer to change vert index
function n2disPointinRect(X, Y, X1, Y1, X2, Y2 : single; validate : boolean)        : Boolean;
var
maxx,minx : single;
maxy,miny : single;
begin
result := false;
if validate = true then   begin
if x1 > x2 then begin maxx := x1; minx := x2; end else begin maxx := x2; minx := x1; end;
if y1 > y2 then begin maxy := y1; miny := y2; end else begin maxy := y2; miny := y1; end;
if ((X > MINX) and (X < MAXX) and (Y > MINY) and (Y < MAXY)) then
  Result := true;

end else
begin
if ((X > x1) and (X < x2) and (Y > y1) and (Y < y2)) then
  Result := true;
end;
0

No i co to ma być?
Pewnie iloczynu wektorowego nie nauczyli w przedszkolu. [rotfl]
Ten rect to taki czworobok o... jak to powiedzieć... taka cegła - znalazłem! :d

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