* Bug fix for eye tracking in HMD, the "up" orientation of your eyes now match your head.
* DebugDraw: added drawRay method.
* Application: Renamed preRender to postUpdate
* AvatarManager: added postUpdate method that iterates over all avatars.
* MyAvatar: Renamed preRender to preDisplaySide
* MyAvatar: split preRender code into postUpdate and preDisplaySide.
* Removed "Show who is looking at me", "Render focus indicator" and "Render lookat target" debug draw.
* Split "Show Look At Vectors" into "Show My Look At Vectors" and "Show Other Look At Vectors", to make it easier to debug eye tracking.
* "Show Look at Vectors" now draws the right eye red and the left eye blue.
* Removed Avatar and MyAvatar renderBody
* Removed look at rendering from head.
* GLMHelpers: Bugfix for generateBasisVectors when up primary and secondary axis were orthogonal
* When the GeometryReader has the last ref to the GeometryResource ptr
It needs to hold on to the reference until invokeMethod is completed.
Otherwise, invokeMethod will call a method on a deleted object, leading
to memory corruption or crashes.
* When the Model URL is changed, the clusterMatrices are invalided and the
RenderItemsSets are cleared. However, there still might be renderItems in
the scene pending changes list that might refer to those RenderItems and their
clusterMatrices. We need to guard against this access to prevent reading from
memory that was previously freed.
Both of these issues were uncovered using the [avatar-thrasher](https://gist.github.com/hyperlogic/d82a61d141df43d576428501a82c5ee6) test script.
* Renamed enqueueLocationChange to updateRenderItems
* Call updateRenderItems when models are added to the scene.
This will fix entity render bounds being incorrect when they are first added to the scene,
then later being correct after a position update.
* Renamed getMeshPartBound to getRenderableMeshBound.
* Avatar now uses getRenderableMeshBound() to do boundingRadius vs frustum check.
* Model::getRenderableMeshBound now returns a more accurate bound, because it is the same one used for rendering.
This will fix avatar freezing, when they are in the corner of your frustum.
This was due to matrices not being updated because the avatar had to a small bounding sphere.
This was due to a default constructed PayloadPointer being sent to the scene via resetItem.
The fix is to A) not do that anymore, B) make resetItem more robust and not crash if this happens.
* Prevent clusterMatrices from being invalidated and re-computed in each updateItem lambda.
We do this by not setting _model->_needsUpdateClusterMatrices = true;
* Prevent redundant work if Model::enqueueLocationChange is called multiple times per frame.
We do this by introducing a preRenderLambdas map in the Application class.
Instead of adding work directly to the scene PendingChanges queue Model::enqueueLocationChange
adds a lambda to the Application preRenderLambdas map. The Application ensures that only one lambda will
be invoked for each model per frame.
* Use all cluster matrices to compute bound for skinned mesh.
This is far less expensive then doing per-vertex work, but it's not free, for avatars especially.
* Remove skinnedMeshBound, compute it instead.
* Compute clusterMatrices in render update, because we need them to update bounds.
* bug fix in AABox::operator+=
* added AABox::emiggen
* Avatar now has a default bound for it's skinned mesh.
* WIP: AABox tests; NEED MORE
* Model: split collision and model mesh render items.
Because ModelMeshRenderItems need special handling to update bounds for animated joints.
* Model: dynamically update the bound for rigidly bound animated meshes
* Rig: added access to geometryToRigTransform
* RenderableModelEntityItem: try to update bounds for skinned mesh to be the entity dimentions (this doesn't seem to be working)
* Geometry.cpp: removed unused bounds parameter in evalPartBounds
* ModelMeshPartPayload: bounds updating
* non-animated: use existing _localBound
* rigid bound mesh: use _localBound transformed by clusterMatrix joint transform
* fully skinned mesh: use _skinnedMeshBound provided by the application.
Is a subclass of Model, it overrides the updateClusterMatrices so it will pull
the actual joint matrices from a different rig override.
For the avatar soft attachment system, this override will be the Avatar::_skeletonModel rig.
This will give us the ability for an avatar to "wear" non-rigid attachments, such as clothing.
New JavaScript API to get the avatar's default pose.
MyAvatar.getDefaultJointRotation(index);
MyAvatar.getDefaultJointTranslation(index);
See `examples/tPose.js` for example usage
Logic which extracted rotations from a non-uniformly scaled matrices was sometimes incorrect.
This should fix the roads in Qbit as well as the blocks in toybox.