Ich arbeite gerade (wie so viele andere Auch) an einer eigenen 3D Engine.
Bis jetzt lief auch alles so zimlich wie geplant aber bei der Kollision mit schrägen flächen ist das ganze zimlich kompliziert geworden.
Da ich nicht genau weiß wie man einen 3D schnittpunkt ausrechnet wollte ich es so machen dass ich erst an den beiden enden der X achse den schnittpunkt suche und dann zwichen diesen beiden den schnittpunkt an der Y Achse.. Leider hat das nicht wirklich funktioniert wie es sollte....
ich hab das so gemacht:
Hier schaut das programm ob man sich über der fläche befindet (es gibt für alle 6 richtungen so einen programmschnipsel)
Code:
//Y(Boden)
if SideX[i][1] <= PosX then
if SideZ[i][1] <= PosZ then///
if SideX[i][2] <= PosX then
if SideZ[i][2] >= PosZ then///
if SideX[i][3] >= PosX then
if SideZ[i][3] >= PosZ then///
if SideX[i][4] >= PosX then
if SideZ[i][4] <= PosZ then///Wenn die seite unter der Eigenen Position ist
begin
NSY := i;
GetColPoint3DY(i,Col.Y);
end;
Das NSY := i hat hierfür nichts zu bedeuten ^^
Dann der Teil der diesen 3D Schnittpunkt finden soll:
Code:
procedure GetColPoint3DY(Side:Integer; out Y:Real);
var
X1,Y1,X2,Y2,X3,Y3:Real;
begin
GetColPoint(PosX,PosY,PosX,0,
SideZ[Side][1],SideY[Side][1],
SideZ[Side][2],SideY[Side][2],X1,Y1);
GetColPoint(PosX,PosY,PosX,0,
SideZ[Side][3],SideY[Side][3],
SideZ[Side][4],SideY[Side][4],X2,Y2);
GetColPoint(PosX,PosY,PosX,0,
X1,Y1,X2,Y2,X3,Y);
end;
Und Der Teil der den 2D schnittpunkt Finden Soll (Funktioniert)
Code:
procedure GetColPoint(X1,Y1,X2,Y2,X3,Y3,X4,Y4:Real; out SX,SY:Real);
var
A1,B1,C1,
A2,B2,C2:Real;
begin
if X1 = X2 then X1 :=0;
if Y1 = Y2 then Y1 :=0;
A1 :=-(1/(X2-X1));
B1 :=(1/(Y2-Y1));
C1 :=(X1/(X2-X1))-(Y1/(Y2-Y1));
A2 :=-(1/(X4-X3));
B2 :=(1/(Y4-Y3));
C2 :=(X3/(X4-X3))-(Y3/(Y4-Y3));
SX :=(B1*C2-C1*B2)/(A1*B2-A2*B1);
SY :=(C1*A2-C2*A1)/(A1*B2-A2*B1);
end;
und in diesem teil wird die kollision dann swchließlich angewendet
Code:
...
if PosY -0.1 > Col.Ythen SpeedY := SpeedY -0.01else
begin
SpeedY :=0;
PosY := Col.Y;
end;
...
end;
(vllt hab ich es ein bisschen unverständlich erklärt; einfach fragen wenn was unklar ist)
vllt hat jemand eine bessere lösung ODER zu viel zeit und kann sich das mal angucken?
Mitglieder in diesem Forum: 0 Mitglieder und 8 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.