CHcialbym sie zapytac czy moje rozumowanie i kod sa poprawne:

opisy funkcji:
classifyapointagainstaplane - zwraca wartosc integer -
const
isOnPlane = 0; punk na plaszczyznie
isFront = 1; z przodu
isBack = -1; z tylu

GET_INTERSECTION_POINT_FROM_LINE_AND_PLANE - zwraca punkt przeciecia linii zdefiniowanej w nawiasie [ ] z wielokatem ktory sie sprawdza
GET_INTERSECTION_POINT_FROM_LINE_AND_PLANE(tablica z punktami wielokata,[pierwsza wpsolrzedna linii,m i druga],ilosc punktow wielokatu);

type t3dpoint = record
x : single;
y : single;
z : single;
end;

function boxPOINT_plane_collision_TEST_POINT(box_center, plane_normal : t3dpoint;
PLANE_D: single; box : array of t3dpoint;
var side : integer; var hitpoint : t3dpoint) : boolean;
var
oldval : integer;
i : integer;
count : integer;
center_point : t3dpoint;
begin
center_point.x := 0.0;center_point.y := 0.0;center_point.z := 0.0;
count := 0;
result := false;
//setlength(missing_index,length(box));
oldval := classifyapointagainstaplane(box[0],plane_normal,PLANE_D);
side := oldval; 
for i:=1 to high(box) do  begin
//missing_index[i] := false; //jak false to ten punkt box[i] jest po tej samej stronie co punkt pierwszy box[0]
if classifyapointagainstaplane(box[i],plane_normal,PLANE_D) <> oldval then begin
result := true; count := count + 1;  //missing_index[i] := true;
center_point.x := center_point.x + box[i].x; //jak true to jest kolizja i ten punkt jest po dugiej stronie
center_point.y := center_point.y + box[i].y;
center_point.z := center_point.z + box[i].z; end;
end;

center_point.x := center_point.x/count;
center_point.y := center_point.y/count;
center_point.z := center_point.z/count;
if result = true then
hitpoint := GET_INTERSECTION_POINT_FROM_LINE_AND_PLANE(box,[box_center,center_point],length(box)); //tutaj jest blad ale o nim dalej
end;

Błąd ktory znajduje się wyzej jest nie znaczacy z powodu, ze kod zostanie przepisany i dodane kilka funkcji ktorych teraz nie opisze bo nie ma sensu opisywac struktury calego silnika, pytanie jest takie zaczynajac od analizy tej funkcji czyli:

  1. sprawdzamy pozycje pierwszego punktu wzgledem plaszczyzny
  2. sprawdzamy reszte jak jakis punkt jest po innej stronie to wystapila kolizja
  3. Gdy mamy kolizje dodajemy (czyli punkt 2 sie sprawdzil) wspolrzedne sprawdzanego punktu do center_point, a po wykonaniu petli dzielimy to przez ilosc punktow po drugiej stronie. Dostajemy dzieki temu punkt, który będzie wskazywał kierunek kolizji - potrzebny do punktu 4
  4. Za pomocą funkcji GET_INTERSECTION_POINT_FROM_LINE_AND_PLANE pobieramy punkt przeciecia

PYTANIE! : czy jak dodam wlasnie wspolrzedne punktow po innej stronie niz ten pierwszy do zmiennej i podziele to przez ilość tych punktów to czy otrzymam wypadkowa (w sumie to bedzie tylko punkt, ale po pobwieniu sie ze srodkiem takiego boxa mamy wektor ktory wskazuje linie kolizji z dana plaszczyzna)
user image Dostrzegam tez blad ze funkcja (tna tym rysunku) moze byc skierowana w gore jak rozwiazac tez ten problem?
Kto dotarl az tutaj ma maly bonus :U http://cezet.host.sk/engin.rar