mirror of
https://github.com/dpethes/rerogue.git
synced 2025-06-07 18:58:32 +02:00
34 lines
655 B
ObjectPascal
34 lines
655 B
ObjectPascal
unit vector_util;
|
|
{$mode objfpc}{$H+}
|
|
|
|
interface
|
|
|
|
uses
|
|
matrix;
|
|
|
|
function GetNormal(v0, v1, v2: Tvector3_single): Tvector3_single;
|
|
|
|
implementation
|
|
|
|
//cross product + normalize
|
|
function GetNormal(v0, v1, v2: Tvector3_single): Tvector3_single;
|
|
var
|
|
a, b: Tvector3_single;
|
|
len: single;
|
|
begin
|
|
a := v0 - v1;
|
|
b := v1 - v2;
|
|
|
|
result.data[0] := (a.data[1] * b.data[2]) - (a.data[2] * b.data[1]);
|
|
result.data[1] := (a.data[2] * b.data[0]) - (a.data[0] * b.data[2]);
|
|
result.data[2] := (a.data[0] * b.data[1]) - (a.data[1] * b.data[0]);
|
|
|
|
len := result.length;
|
|
if len = 0 then len := 1;
|
|
|
|
result /= len;
|
|
end;
|
|
|
|
end.
|
|
|