function meshGeneration(points, nVertical, nHorizontal, mod, color)
% meshGeneration - Funkce pro vykreslení plochy tvořené mnohoúhelníky
%
% Popis funkce:
% Funkce pro vykreslení plochy tvořené trojúhelníky, nebo čtyřúhelníky pro 
% vstupní data získaná metodami prostorové rekonstrukce zaznámenávajícími 
% otáčející se objekt.
%
% Syntax:  quadrilateralShape(points, nVertical, nHorizontal, mod)
%
% Vstupní parametry:
%    points - body v prostoru definující vrcholy ve formátu [x y z]
%    nVertical - počet vrcholů ve vertikálním směru (num)
%    nHorizontal - počet vrcholů v horizontálním směru (num)
%    mod - režim vykreslování (string)
%        - 'tri'  = pomocí trojúhelníků
%        - 'quad' = pomocí čtyřúhelníků (default)
%    color - barva ploch ve tvaru [R G B], pro hodnoty v intervalu <0;255>
% Výstupní parametry:
%    žádné
%
% Vytvořeno v rámci bakalářské práce na téma Vytvoření 3D modelu za pomoci 
% laserového vzoru.
% Martin Krátký
% Vysoké učení technické v Brně
% Květen 2019
% Práce je dostupná na webové adrese:
% https://www.vutbr.cz/studenti/zav-prace/detail/119313 
%
% See also: calibratedStereoVision, getIndex
%

if nargin < 5
    C = [171/255 104/255 84/255];
else
    C = [color(1)/255 color(1)/255 color(1)/255];
end
if nargin == 3
    mod='quad'; 
end
        
for i=1:nHorizontal-1
    for j=1:nVertical-1
        x = [points(j+(i-1)*nVertical,1),points(j+i*nVertical,1),points(1+j+i*nVertical,1),points(1+j+(i-1)*nVertical,1)];
        y = [points(j+(i-1)*nVertical,2),points(j+i*nVertical,2),points(1+j+i*nVertical,2),points(1+j+(i-1)*nVertical,2)];
        z = [points(j+(i-1)*nVertical,3),points(j+i*nVertical,3),points(1+j+i*nVertical,3),points(1+j+(i-1)*nVertical,3)];

        if i == nHorizontal-1
            x = [points(j+(i-1)*nVertical,1),points(j,1),points(j+1,1),points(1+j+(i-1)*nVertical,1)];
            y = [points(j+(i-1)*nVertical,2),points(j,2),points(j+1,2),points(1+j+(i-1)*nVertical,2)];
            z = [points(j+(i-1)*nVertical,3),points(j,3),points(j+1,3),points(1+j+(i-1)*nVertical,3)];
        end
        if strcmp(mod,'tri')
            tri = delaunay(x,y);
            trisurf(tri,x,y,z,'Facecolor',C);
        else
            fill3(x,y,z,C)
        end
        hold on
    end
end