2
0
mirror of https://github.com/dpethes/rerogue.git synced 2025-06-07 18:58:32 +02:00
rerogue/terrain_viewer/vector_util.pas
dpethes 0d8ff0407e terrain viewer: use vertex arrays + glDrawElements.
Vertex normals are fake, needs proper per-vertex normals
2015-07-12 11:20:21 +02:00

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.