Пример #1
0
inline void UpdateNodeWorldMatrix( Node &node, int nodeDirtyFlags, BufferIndex updateBufferIndex )
{
  // If world-matrix needs to be recalculated
  if ( nodeDirtyFlags & TransformFlag )
  {
    if( node.GetInhibitLocalTransform() )
    {
      node.SetWorldMatrix( updateBufferIndex,
                           node.GetWorldScale(updateBufferIndex),
                           node.GetWorldRotation(updateBufferIndex) / node.GetRotation(updateBufferIndex),
                           node.GetWorldPosition(updateBufferIndex) - node.GetPosition(updateBufferIndex) );
    }
    else
    {
      node.SetWorldMatrix( updateBufferIndex,
                           node.GetWorldScale(updateBufferIndex),
                           node.GetWorldRotation(updateBufferIndex),
                           node.GetWorldPosition(updateBufferIndex) );
    }
  }
  else
  {
    node.CopyPreviousWorldMatrix( updateBufferIndex );
  }
}
Пример #2
0
inline void UpdateNodeWorldMatrix( Node& node, RenderableAttachment& updatedRenderable, int nodeDirtyFlags, BufferIndex updateBufferIndex )
{
  /**
   * If world-matrix needs to be recalculated.
   */
  if ( ( nodeDirtyFlags & TransformFlag ) ||
         updatedRenderable.IsScaleForSizeDirty() )
  {
    if( updatedRenderable.UsesGeometryScaling() )
    {
      // scaling, i.e. Text or Mesh
      Vector3 scaling;
      updatedRenderable.GetScaleForSize( node.GetSize( updateBufferIndex ), scaling );
      if( node.GetInhibitLocalTransform() )
      {
        node.SetWorldMatrix( updateBufferIndex,
                             node.GetWorldScale(updateBufferIndex) * scaling,
                             node.GetWorldRotation(updateBufferIndex) / node.GetRotation(updateBufferIndex),
                             node.GetWorldPosition(updateBufferIndex) - node.GetPosition(updateBufferIndex) );
      }
      else
      {
        node.SetWorldMatrix( updateBufferIndex,
                             node.GetWorldScale(updateBufferIndex) * scaling,
                             node.GetWorldRotation(updateBufferIndex),
                             node.GetWorldPosition(updateBufferIndex) );
      }
    }
    else
    {
      // no scaling, i.e. Image
      if( node.GetInhibitLocalTransform() )
      {
        node.SetWorldMatrix( updateBufferIndex,
                             node.GetWorldScale(updateBufferIndex),
                             node.GetWorldRotation(updateBufferIndex) / node.GetRotation(updateBufferIndex),
                             node.GetWorldPosition(updateBufferIndex) - node.GetPosition(updateBufferIndex) );
      }
      else
      {
        node.SetWorldMatrix( updateBufferIndex,
                             node.GetWorldScale(updateBufferIndex),
                             node.GetWorldRotation(updateBufferIndex),
                             node.GetWorldPosition(updateBufferIndex) );
      }
    }
  }
  else
  {
    node.CopyPreviousWorldMatrix( updateBufferIndex );
  }
}