Fix the "bit of a hack": pass a model matrix around the tree-building code, calculated at Tree creation time from a (new) passed-in position and a hardcoded rotate-vertical matrix.  Move a few foreach(vec4.transformMat4()) calls to modifications of that model matrix instead, and do the math in the GPU in parallel when rendering, instead of on the CPU serially when building the vertex data.  Use the new position argument to put three trees in the scene, two evergreens and a canopy, and back up (and move down) the camera a bit.  (Also increase the clip depth.)