- unit vectors;
- interface
- procedure calcNormals(ax:Single;ay:Single;az:Single;bx:Single;by:Single;bz:Single;cx:Single;cy:Single;cz:Single);
- type
- TVector = record x,y,z: Single; end;
- var
- v1,v2,nv: TVector;
- implementation
- function vec_scale(const v:TVector;const scale:single):TVector;
- begin
- result.x:=v.x*scale;
- result.y:=v.y*scale;
- result.z:=v.z*scale;
- end;
- function vec_normalize(const v:TVector):TVector;
- var l:single;
- begin
- l:=sqrt(sqr(v.x)+sqr(v.y)+sqr(v.z));
- vec_normalize:=vec_scale(v,1/l);
- end;
- procedure calcNormals(ax:Single;ay:Single;az:Single;bx:Single;by:Single;bz:Single;cx:Single;cy:Single;cz:Single);
- begin
- //Vektoren bilden
- v1.x:=bx-ax; v1.y:=by-ay; v1.z:=bz-az;
- v2.x:=cx-ax; v2.y:=cy-ay; v2.z:=cz-az;
- //Kreuz-Produkt
- nv.x:=(v1.y*v2.z)-(v1.z*v2.y);
- nv.y:=(v1.z*v2.x)-(v1.x*v2.z);
- nv.z:=(v1.x*v2.y)-(v1.y*v2.x);
- //Normieren
- vec_normalize(nv);
- end;
- end.