I would like to argue that such things are drawn much more conveniently with the tikz-3dplot
package and the 3d
library.
\documentclass[tikz,border=3.14mm]{standalone}
\usepackage{tikz-3dplot}
\usetikzlibrary{3d,shadings}
\makeatletter
% small fix for canvas is xy plane at z % https://tex.stackexchange.com/a/48776/121799
\tikzoption{canvas is xy plane at z}[]{%
\def\tikz@plane@origin{\pgfpointxyz{0}{0}{#1}}%
\def\tikz@plane@x{\pgfpointxyz{1}{0}{#1}}%
\def\tikz@plane@y{\pgfpointxyz{0}{1}{#1}}%
\tikz@canvas@is@plane}
\makeatother
\begin{document}
\tdplotsetmaincoords{110}{-165} % - because of difference between active and passive transformations...
\begin{tikzpicture}
%\draw (-5,-2.5) rectangle (1.5,5);
\begin{scope}[tdplot_main_coords,thick]
% just in case you want to get an intuition for the coordinates/projections
% \draw[-latex] (0,0,0) -- (1,0,0) coordinate (X) node[below]{$x$};
% \draw[-latex] (0,0,0) -- (0,1,0) coordinate (Y) node[right]{$y$};
% \draw[-latex] (0,0,0) -- (0,0,1) coordinate (Z) node[left]{$z$};
% origin
\coordinate (O) at (0,0,0);
% top
\begin{scope}[canvas is xy plane at z=4,dashed]
\draw[thick,solid] (O) -- (0,0);
\shadedraw[fill opacity=0.3,left color=blue,right color=white] (\tdplotmainphi:1)
arc(\tdplotmainphi:\tdplotmainphi+180:1) -- (O) -- cycle;
\draw[fill opacity=0.3,fill=gray!80] circle (1);
\end{scope}
% left
\begin{scope}[canvas is yz plane at x=4]
\draw[thick] (O) -- (0,0);
\pgfmathsetmacro{\MyThetaMax}{atan(tan(\tdplotmaintheta)*sin(90+\tdplotmainphi))}
\shadedraw[line join=bevel,fill opacity=0.3,upper right=white,lower left=blue]
(\MyThetaMax:1)
arc(\MyThetaMax:\MyThetaMax+180:1) -- (O) -- cycle;
\draw[fill opacity=0.3,fill=gray] circle (1);
\end{scope}
% arc
\begin{scope}[canvas is xz plane at y=0,xscale=-1]
\draw[-latex] (0,1) arc(90:180:1) node[midway,above left]{$\vartheta$};
\end{scope}
\end{scope}
\end{tikzpicture}
\end{document}

The advantage is that you can change the view angles at will.
\documentclass[tikz,border=3.14mm]{standalone}
\usepackage{tikz-3dplot}
\usetikzlibrary{3d,shadings}
\makeatletter
% small fix for canvas is xy plane at z % https://tex.stackexchange.com/a/48776/121799
\tikzoption{canvas is xy plane at z}[]{%
\def\tikz@plane@origin{\pgfpointxyz{0}{0}{#1}}%
\def\tikz@plane@x{\pgfpointxyz{1}{0}{#1}}%
\def\tikz@plane@y{\pgfpointxyz{0}{1}{#1}}%
\tikz@canvas@is@plane}
\makeatother
\begin{document}
\foreach \X in {5,15,...,355}
{\tdplotsetmaincoords{120+20*sin(\X)}{\X} % - because of difference between active and passive transformations...
\begin{tikzpicture}
\path[use as bounding box] (-5,-2.5) rectangle (5,5);
\begin{scope}[tdplot_main_coords,thick]
% just in case you want to get an intuition for the coordinates/projections
% \draw[-latex] (0,0,0) -- (1,0,0) coordinate (X) node[below]{$x$};
% \draw[-latex] (0,0,0) -- (0,1,0) coordinate (Y) node[right]{$y$};
% \draw[-latex] (0,0,0) -- (0,0,1) coordinate (Z) node[left]{$z$};
% origin
\coordinate (O) at (0,0,0);
% left
\begin{scope}[canvas is yz plane at x=4]
\pgfmathtruncatemacro{\ttest}{sign(cos(\tdplotmainphi+90))}
\ifnum\ttest=1
\pgfmathsetmacro{\MyThetaMax}{atan(tan(\tdplotmaintheta)*sin(90+\tdplotmainphi))}
\shadedraw[line join=bevel,fill opacity=0.3,upper right=white,lower left=blue]
(\MyThetaMax:1)
arc(\MyThetaMax:\MyThetaMax+180:1) -- (O) -- cycle;
\draw[fill=gray!30] circle (1);
\draw[thick] (O) -- (0,0);
\else
\draw[fill=gray!30] circle (1);
\draw[thick] (O) -- (0,0);
\pgfmathsetmacro{\MyThetaMax}{atan(tan(\tdplotmaintheta)*sin(90+\tdplotmainphi))}
\shadedraw[line join=bevel,fill opacity=0.3,upper right=white,lower left=blue]
(\MyThetaMax:1)
arc(\MyThetaMax:\MyThetaMax+180:1) -- (O) -- cycle;
\fi
\end{scope}
% top
\begin{scope}[canvas is xy plane at z=4,dashed]
\draw[thick,solid] (O) -- (0,0);1
\shadedraw[fill opacity=0.3,left color=blue,right color=white] (\tdplotmainphi:1)
arc(\tdplotmainphi:\tdplotmainphi+180:1) -- (O) -- cycle;
\draw[fill opacity=0.3,fill=gray!80] circle (1);
\end{scope}
% arc
% \begin{scope}[canvas is xz plane at y=0,xscale=-1]
% \draw[-latex] (0,1) arc(90:180:1) node[midway,above left]{$\vartheta$};
% \end{scope}
\end{scope}
\end{tikzpicture}}
\end{document}

As for the "squashed" shape: it took me some time to derive the (hopefully) correct formula for the visibility angle \MyThetaMax
. Other than that it is almost trivial: draw ellipses in the respective planes and then repeat the above.
\documentclass[tikz,border=3.14mm]{standalone}
\usepackage{tikz-3dplot}
\usetikzlibrary{3d,shadings}
\makeatletter
% small fix for canvas is xy plane at z % https://tex.stackexchange.com/a/48776/121799
\tikzoption{canvas is xy plane at z}[]{%
\def\tikz@plane@origin{\pgfpointxyz{0}{0}{#1}}%
\def\tikz@plane@x{\pgfpointxyz{1}{0}{#1}}%
\def\tikz@plane@y{\pgfpointxyz{0}{1}{#1}}%
\tikz@canvas@is@plane}
\makeatother
\begin{document}
\tdplotsetmaincoords{110}{-165} % - because of difference between active and passive transformations...
\begin{tikzpicture}
%\draw (-5,-2.5) rectangle (1.5,5);
\begin{scope}[tdplot_main_coords,thick]
% just in case you want to get an intuition for the coordinates/projections
% \draw[-latex] (0,0,0) -- (1,0,0) coordinate (X) node[below]{$x$};
% \draw[-latex] (0,0,0) -- (0,1,0) coordinate (Y) node[right]{$y$};
% \draw[-latex] (0,0,0) -- (0,0,1) coordinate (Z) node[left]{$z$};
% origin
\coordinate (O) at (0,0,0);
% top
\begin{scope}[canvas is xy plane at z=4,dashed]
\draw[thick,solid] (O) -- (0,0);
\shadedraw[fill opacity=0.3,left color=blue,right color=white] (\tdplotmainphi:1)
arc(\tdplotmainphi:\tdplotmainphi+180:1) -- (O) -- cycle;
\draw[fill opacity=0.3,fill=gray!80] circle (1);
% squashed shape
\shadedraw[fill opacity=0.1,left color=red,right color=white]
(\tdplotmainphi:2 and 1)
arc(\tdplotmainphi:\tdplotmainphi+180:2 and 1) -- (O) -- cycle;
\draw[fill opacity=0.1,fill=gray!80] circle (2 and 1);
\end{scope}
% left
\begin{scope}[canvas is yz plane at x=4]
\draw[thick] (O) -- (0,0);
\pgfmathsetmacro{\MyThetaMax}{atan(tan(\tdplotmaintheta)*sin(90+\tdplotmainphi))}
\shadedraw[line join=bevel,fill opacity=0.3,upper right=white,lower left=blue]
(\MyThetaMax:1)
arc(\MyThetaMax:\MyThetaMax+180:1) -- (O) -- cycle;
\draw[fill opacity=0.3,fill=gray] circle (1);
% squash again
\pgfmathsetmacro{\MyThetaMax}{atan(tan(\tdplotmaintheta)*sin(90+\tdplotmainphi)*2)}
\shadedraw[line join=bevel,fill opacity=0.1,upper right=white,
lower left=red]
(\MyThetaMax:1 and 2)
arc(\MyThetaMax:\MyThetaMax+180:1 and 2) -- (O) -- cycle;
\draw[fill opacity=0.1,fill=gray] circle (1 and 2);
\end{scope}
% arc
\begin{scope}[canvas is xz plane at y=0,xscale=-1]
\draw[-latex] (0,1) arc(90:180:1) node[midway,above left]{$\vartheta$};
\end{scope}
\end{scope}
\end{tikzpicture}
\end{document}

Here's another attempt. I thought the above one would match your description.
\documentclass[tikz,border=3.14mm]{standalone}
\usepackage{tikz-3dplot}
\usetikzlibrary{3d,shadings}
\makeatletter
% small fix for canvas is xy plane at z % https://tex.stackexchange.com/a/48776/121799
\tikzoption{canvas is xy plane at z}[]{%
\def\tikz@plane@origin{\pgfpointxyz{0}{0}{#1}}%
\def\tikz@plane@x{\pgfpointxyz{1}{0}{#1}}%
\def\tikz@plane@y{\pgfpointxyz{0}{1}{#1}}%
\tikz@canvas@is@plane}
\makeatother
\begin{document}
\tdplotsetmaincoords{110}{-165} % - because of difference between active and passive transformations...
\begin{tikzpicture}
%\draw (-5,-2.5) rectangle (1.5,5);
\begin{scope}[tdplot_main_coords,thick]
% just in case you want to get an intuition for the coordinates/projections
% \draw[-latex] (0,0,0) -- (1,0,0) coordinate (X) node[below]{$x$};
% \draw[-latex] (0,0,0) -- (0,1,0) coordinate (Y) node[right]{$y$};
% \draw[-latex] (0,0,0) -- (0,0,1) coordinate (Z) node[left]{$z$};
% origin
\coordinate (O) at (0,0,0);
% top
\begin{scope}[canvas is xy plane at z=4,dashed]
\draw[thick,solid] (O) -- (0,0);
% squashed shape
\pgfmathsetmacro{\MyPhiMax}{atan(tan(\tdplotmainphi)*sin(90+\tdplotmaintheta))}
\shadedraw[fill opacity=0.1,left color=red,right color=white]
(\MyPhiMax:2 and 0.5)
arc(\MyPhiMax:\MyPhiMax+180:2 and 0.5) -- (O) -- cycle;
\draw[fill opacity=0.1,fill=gray!80] circle (2 and 0.5);
% unsquashed
\shadedraw[fill opacity=0.3,left color=blue,right color=white] (\tdplotmainphi:1)
arc(\tdplotmainphi:\tdplotmainphi+180:1) -- (O) -- cycle;
\draw[fill opacity=0.3,fill=gray!80] circle (1);
\end{scope}
% left
\begin{scope}[canvas is yz plane at x=4]
\draw[thick] (O) -- (0,0);
% squash again
\pgfmathsetmacro{\MyThetaMax}{atan(tan(\tdplotmaintheta)*sin(90+\tdplotmainphi)*4)}
\shadedraw[line join=bevel,fill opacity=0.1,upper right=white,
lower left=red]
(\MyThetaMax:0.5 and 2)
arc(\MyThetaMax:\MyThetaMax+180:0.5 and 2) -- (O) -- cycle;
\draw[fill opacity=0.1,fill=gray] circle (0.5 and 2);
% unsquashed
\pgfmathsetmacro{\MyThetaMax}{atan(tan(\tdplotmaintheta)*sin(90+\tdplotmainphi))}
\shadedraw[line join=bevel,fill opacity=0.3,upper right=white,lower left=blue]
(\MyThetaMax:1)
arc(\MyThetaMax:\MyThetaMax+180:1) -- (O) -- cycle;
\draw[fill opacity=0.3,fill=gray] circle (1);
\end{scope}
% arc
\begin{scope}[canvas is xz plane at y=0,xscale=-1]
\draw[-latex] (0,1) arc(90:180:1) node[midway,above left]{$\vartheta$};
\end{scope}
\end{scope}
\end{tikzpicture}
\end{document}
