все значения перед выполнением этого куска кода проверяются на NaN и на бесконечность, эффекта это не дает, может я что то не вижу или не понимаю, но что тут может быть не так??, может как то можно защитить этот кусок кода
begin
ccX:= (PosX*m1) + (PosY*m5) + (PosZ*m9) + m13;
ccY:= (PosX*m2) + (PosY*m6) + (PosZ*m10) + m14;
ccW:= (PosX*m4) + (PosY*m8) + (PosZ*m12) + m16;
if (ccW › 0.1) then
begin
NDCx:= ccX / ccW;
NDCy:= ccY / ccW;
screenX:= ((windowWidth * 0.5) * NDCx) + (NDCx + (windowWidth * 0.5));
screenY:= -((windowHeight * 0.5) * NDCy) + (NDCy + (windowHeight * 0.5));
sqrtif:=(sqr(PosXm-PosX))+(sqr(PosYm-PosY))+(sqr(PosZm-PosZ));
if (sqrtif › 0) then vd:=sqrt(sqrtif) / 100;
if ( (screenX ‹ windowWidth) and (screenY ‹ windowHeight) and (screenX › 0) and (screenY › 0) ) then
begin
_onEvent(onScreenX, screenX);
_onEvent(onScreenY, screenY);
_onEvent(onMeter, vd);
_onEvent(onVis);
end;
end;
end;