This is just for fun. I really like Milo's nice answer. The only minor issue I have is with the sphere. Either the dashed line is not the equator or the points at which the dividers intersect are not the poles. The following employs orthographic projections, and you can adjust the theta angle, i.e. the first argument of \tdplotsetmaincoords{70}{0}, at will. (EDIT: added line join=bevel, thanks to minhthien_2016!)
\documentclass[tikz,border=3.14mm]{standalone}
\usepackage{tikz-3dplot}
\begin{document}
\tdplotsetmaincoords{70}{0}
\begin{tikzpicture}[tdplot_main_coords,font=\sffamily,line join=bevel]
\pgfmathsetmacro{\r}{1.5}
\pgfmathsetmacro{\h}{3}
\begin{scope}[local bounding box=cylinder]
\draw[dashed] plot[smooth,variable=\t,domain=0:180] ({\r*cos(\t)},{\r*sin(\t)},0);
\draw[fill=orange,fill opacity=0.5] (0,0) -- (-\r,0,0)
node[midway,below,opacity=1] {$r$} -- (-\r,0,\h) -- (0,0,\h);
\foreach \Z in {80,60,...,-80}
{\draw[left color=gray,right color=white,fill opacity=0.5] (0,0,0) -- ({\r*cos(\Z)},{\r*sin(\Z)},0) --
({\r*cos(\Z)},{\r*sin(\Z)},\h) -- (0,0,\h) -- cycle;}
\draw plot[smooth,variable=\t,domain=0:-180] ({\r*cos(\t)},{\r*sin(\t)},0)
-- plot[smooth,variable=\t,domain=-180:180] ({\r*cos(\t)},{\r*sin(\t)},\h)
(\r,0,0) -- (\r,0,\h);
\end{scope}
\node[anchor=south] at (cylinder.north) {cylinder};
%
\begin{scope}[local bounding box=cone,xshift={(2*\r+1)*1cm}]
\draw[dashed] plot[smooth,variable=\t,domain=0:180] ({\r*cos(\t)},{\r*sin(\t)},0);
\draw[fill=orange,fill opacity=0.5] (0,0) -- (-\r,0,0)
node[midway,below,opacity=1] {$r$} -- (0,0,\h);
\foreach \Z in {80,60,...,-80}
{\draw[left color=gray,right color=white,fill opacity=0.5] (0,0,0)
-- ({\r*cos(\Z)},{\r*sin(\Z)},0) -- (0,0,\h) -- cycle;}
\draw plot[smooth,variable=\t,domain=0:-180] ({\r*cos(\t)},{\r*sin(\t)},0)
-- (0,0,\h) -- (\r,0,0) ;
\end{scope}
\node[anchor=south] at (cone.north|-cylinder.north) {cone};
%
\begin{scope}[local bounding box=ball,xshift={(2*\r+1)*2cm},yshift={(\h-\r)*1cm}]
\draw[dashed] plot[smooth,variable=\t,domain=0:180] ({\r*cos(\t)},{\r*sin(\t)},0);
\draw[fill=orange,fill opacity=0.5]
plot[smooth,variable=\t,domain=90:270] ({\r*cos(\t)},0,{\r*sin(\t)});
\foreach \Z in {80,60,...,-80}
{\draw[left color=gray,right color=white,fill opacity=0.5]
plot[smooth,variable=\t,domain=90:270]
({-\r*cos(\t)*cos(-\Z)},{\r*cos(\t)*sin(-\Z)},{\r*sin(\t)});}
\draw[tdplot_screen_coords] (0,0) circle[radius=\r];
\draw plot[smooth,variable=\t,domain=0:-180]
({\r*cos(\t)},{\r*sin(\t)},0);
\end{scope}
\node[anchor=south] at (ball.north|-cylinder.north) {ball};
%
\end{tikzpicture}
\end{document}

And a version for minhthien_2016:
\documentclass[tikz,border=3.14mm]{standalone}
\usepackage{tikz-3dplot}
% https://tex.stackexchange.com/a/12033/121799
\tikzset{reverseclip/.style={insert path={(current bounding box.north
east) rectangle (current bounding box.south west)}}}
\begin{document}
\tdplotsetmaincoords{70}{0}
\begin{tikzpicture}[tdplot_main_coords,font=\sffamily,line join=bevel]
\pgfmathsetmacro{\r}{1.5}
\pgfmathsetmacro{\h}{1}
\begin{scope}[local bounding box=cylinder]
\draw[dashed] plot[smooth,variable=\t,domain=0:180] ({\r*cos(\t)},{\r*sin(\t)},0);
\draw[fill=orange,fill opacity=0.5] (0,0) -- (-\r,0,0)
node[midway,below,opacity=1] {$r$} -- (-\r,0,\h) -- (0,0,\h);
\foreach \Z in {80,60,...,-80}
{\draw[left color=gray,right color=white,fill opacity=0.5] (0,0,0) -- ({\r*cos(\Z)},{\r*sin(\Z)},0) --
({\r*cos(\Z)},{\r*sin(\Z)},\h) -- (0,0,\h) -- cycle;}
\draw plot[smooth,variable=\t,domain=0:-180] ({\r*cos(\t)},{\r*sin(\t)},0)
-- plot[smooth,variable=\t,domain=-180:180] ({\r*cos(\t)},{\r*sin(\t)},\h)
(\r,0,0) -- (\r,0,\h);
\end{scope}
\node[anchor=south] at (cylinder.north) {cylinder};
%
\begin{scope}[local bounding box=cone,xshift={(2*\r+1)*1cm}]
\begin{scope}
\clip (-\r,0,0) -- (0,0,\h) -- (\r,0,0) -- cycle;
\draw[dashed] plot[smooth,variable=\t,domain=0:180] ({\r*cos(\t)},{\r*sin(\t)},0);
\end{scope}
\draw[fill=orange,fill opacity=0.5] (0,0) -- (-\r,0,0)
node[midway,below,opacity=1] {$r$} -- (0,0,\h);
\foreach \Z in {80,60,...,-80}
{\draw[left color=gray,right color=white,fill opacity=0.5] (0,0,0)
-- ({\r*cos(\Z)},{\r*sin(\Z)},0) -- (0,0,\h) -- cycle;}
\begin{scope}
\clip (\r,0,0) -- (0,0,\h) -- (-\r,0,0) -- (\r,0,0) [reverseclip];
\draw plot[smooth,variable=\t,domain=0:360] ({\r*cos(\t)},{\r*sin(\t)},0);
\end{scope}
\draw (-\r,0,0) -- (0,0,\h) -- (\r,0,0) ;
\end{scope}
\node[anchor=south] at (cone.north|-cylinder.north) {cone};
%
\begin{scope}[local bounding box=ball,xshift={(2*\r+1)*2cm},yshift={(\h-\r)*1cm}]
\draw[dashed] plot[smooth,variable=\t,domain=0:180] ({\r*cos(\t)},{\r*sin(\t)},0);
\draw[fill=orange,fill opacity=0.5]
plot[smooth,variable=\t,domain=90:270] ({\r*cos(\t)},0,{\r*sin(\t)});
\foreach \Z in {80,60,...,-80}
{\draw[left color=gray,right color=white,fill opacity=0.5]
plot[smooth,variable=\t,domain=90:270]
({-\r*cos(\t)*cos(-\Z)},{\r*cos(\t)*sin(-\Z)},{\r*sin(\t)});}
\draw[tdplot_screen_coords] (0,0) circle[radius=\r];
\draw plot[smooth,variable=\t,domain=0:-180]
({\r*cos(\t)},{\r*sin(\t)},0);
\end{scope}
\node[anchor=south] at (ball.north|-cylinder.north) {ball};
%
\end{tikzpicture}
\end{document}