コード例 #1
0
ファイル: transform.cpp プロジェクト: buffer8848/kick
 void Transform::setRotation(glm::quat rot){
     assert(!glm::isnan(rot.w) && !glm::isnan(rot.x) && !glm::isnan(rot.y) && !glm::isnan(rot.z));
     if (mParent == nullptr ||
             mParent->mGlobalRotationQuat == glm::quat{1,0,0,0}){ // if parent is identity rotation
         setLocalRotation(rot);
     } else {
         quat diff = conjugate(rot) * rotation();
         setLocalRotation(mLocalRotationQuat * diff);
     }
 }
コード例 #2
0
ファイル: Transform.cpp プロジェクト: jpmit/mutiny
void Transform::setParent(Transform* transform)
{
  if(this->parent != NULL)
  {
    for(int i = 0; i < this->parent->children.size(); i++)
    {
      if(this->parent->children.at(i) == this)
      {
        this->parent->children.erase(this->parent->children.begin() + i);
        break;
      }
    }
  }

  if(transform != NULL)
  {
    transform->children.push_back(this);
  }

  setLocalPosition(getPosition());
  setLocalRotation(getRotation());
  this->parent = transform;
  setPosition(getLocalPosition());
  setRotation(getLocalRotation());
}
コード例 #3
0
/*! \brief Convenience function.
*
*/
void
TrackSpiralArcSpiral::setLocalStartHeading(double startHeading)
{
    while (startHeading <= -180.0)
    {
        startHeading += 360.0;
    }
    while (startHeading > 180.0)
    {
        startHeading -= 360.0;
    }

    // Local to internal (Parameters are given in internal coordinates) //
    //
    double deltaHeading(startHeading - heading());

    QTransform trafo;
    trafo.rotate(deltaHeading);

    pa_->setEndHeadingDeg(pa_->getEndHeadingRad() * 360.0 / (2.0 * M_PI) - deltaHeading);
    pa_->setEndPoint(trafo.inverted().map(pa_->getEndPoint()));
    pa_->init();
    applyParameters();

    // Set local translation //
    //
    setLocalRotation(startHeading);
}
コード例 #4
0
ファイル: VPathNode.cpp プロジェクト: AnteSim/Verve
bool VPathNode::fromString( const String &pString )
{
    // Split Data.
    // {Position} {Rotation} {Weight}
    const char *baseData = StringUnit::getUnit( pString.c_str(), 0, "\t" );

    Point3F  pos;
    AngAxisF aa;
    F32      weight;

    // Scan Base.
    dSscanf( baseData, "%g %g %g %g %g %g %g %g", &pos.x, &pos.y, &pos.z,
                                                  &aa.axis.x, &aa.axis.y, &aa.axis.z, &aa.angle,
                                                  &weight );

    // Apply Changes.
    setLocalPosition( pos );
    setLocalRotation( QuatF( aa ) );
    setWeight( weight );

    // Fetch Orientation Data.
    String orientationData = StringUnit::getUnit( pString.c_str(), 1, "\t" );

    // Fetch Orientation Type.
    String orientationTypeString = orientationData;
    if ( orientationData.find( " " ) )
    {
        // Use First Word.
        orientationTypeString = orientationData.substr( 0, orientationData.find( " " ) );
    }

    // Set Orientation Type.
    const eOrientationType &orientationType = getOrientationTypeEnum( orientationTypeString.c_str() );
    switch( orientationType )
    {
        case k_OrientationFree : 
            {
                // Apply Mode.
                setOrientationMode( orientationType );

            } break;

        case k_OrientationToPoint:
            {
                // Fetch Point.
                Point3F lookAtPoint;
                // Buffer String.
                dSscanf( orientationData.c_str(), "%*s %f %f %f", &lookAtPoint.x, &lookAtPoint.y, &lookAtPoint.z );

                // Apply Mode.
                setOrientationMode( orientationType, lookAtPoint );

            } break;
    }

    return true;
}