Exploring .obj format

(SetDirectory[ToFileName[Extract["FileName"/.NotebookInformation[EvaluationNotebook[]],{1},FrontEnd`FileName]]];)

mesh= Import["test.obj"] (* needs to be in same directory as this notebook *)
(* or use "teapot.obj" *)
(* or use "Jasper.obj" *)
vertex= mesh[[1,2]][[1]];  (* vertex list *)
nvertex = Length[vertex];


triangle= mesh[[1,2]][[2]][[1]][[1]][[1]]; (*triangle list *)
ntriangle=Length[triangle];

qneighbor[i_,j_]:=If[Length[triangle[[i]] ⋂ triangle[[j]]]==2,True,False];  (* query: triangles i and j are neighbors *)

qedge[i_,j_,k_]:=If[Length[{j,k}⋂ triangle[[i]]]==2,True,False]; (* query: {vertex[[j]],vertex[[k]]} form edge in triangle [[i]] *)


star[i_]:=Delete[Union[ Table[If[MemberQ[triangle[[j]],i],j,-1],{j,1,ntriangle}]],1]; (* list of all triangles containing vertex[[i]] *)


starz=Table[star[i],{i,1,nvertex}]; (* list of all stars *)
lstar=Table[Length[starz[[j]]],{j,1,nvertex}]; (* lengths of all stars *)

starbdy[i_]:=Union[Flatten[Table[triangle[[starz[[i]][[jj]]]],{jj,1,lstar[[i]]}]]];(* vertices comprising star[i]; these point to triangle[] and contain vertex[[i]]*)
starvx=Table[starbdy[i],{i,1,nvertex}]; (* list of all dstars *)
lstarvx=Table[Length[starvx[[j]]],{j,1,nvertex}]; (* lengths of all dstars *)

dstarvx[i_]:=Table[triangle[[starvx[[i]][[jj]]]],{jj,1,lstarvx[[i]]}];
(* vertices  of double star[i]; these point to triangle[] and contain vertex[[i]]*)

Print["data set has ",nvertex, " vertices and ", ntriangle" triangles "]

Print["  vertex       triangle     starz          starvx    dstarvx"]
Print[MatrixForm[vertex],MatrixForm[triangle],MatrixForm[starz],MatrixForm[starvx],MatrixForm[dstarvx]]