예제 #1
0
    void DiCircleEmitter::InitParticlePosition(DiParticle* particle)
    {
        float angle = 0;
        if (mRandom)
        {
            angle = DiMath::RangeRandom(0, DiMath::TWO_PI);
        }
        else
        {
            mCircleAngle += mStep;
            mCircleAngle = mCircleAngle > DiMath::TWO_PI ? mCircleAngle - DiMath::TWO_PI : mCircleAngle;
            angle = mCircleAngle;
        }

        mX = DiMath::Cos(angle);
        mZ = DiMath::Sin(angle);
        DiParticleSystem* sys = mParentElement->GetParentSystem();
        if (sys)
        {
            particle->position = GetDerivedPosition() + 
                sys->GetDerivedOrientation() * mOrientation * (mEmitterScale * DiVec3(mX * mRadius, 0, mZ * mRadius));
        }
        else
        {
            particle->position = GetDerivedPosition() + mEmitterScale * ( mOrientation * DiVec3(mX * mRadius, 0, mZ * mRadius) );
        }
        particle->originalPosition = particle->position;
    }
예제 #2
0
파일: Bone.cpp 프로젝트: wangyanxing/Demi3D
 void DiBone::GetOffsetTransform( DiMat4& m ) const
 {
     DiVec3 locScale = GetDerivedScale() * mBindDerivedInverseScale;
     DiQuat locRotate = GetDerivedOrientation() * mBindDerivedInverseOrientation;
     DiVec3 locTranslate = GetDerivedPosition() +
         locRotate * (locScale * mBindDerivedInversePosition);
     m.makeTransform(locTranslate, locScale, locRotate);
 }
예제 #3
0
파일: Bone.cpp 프로젝트: wangyanxing/Demi3D
    void DiBone::SetBindingPose()
    {
        SetInitialState();

        mBindDerivedInversePosition    = -GetDerivedPosition();
        mBindDerivedInverseScale       = DiVec3::UNIT_SCALE / GetDerivedScale();
        mBindDerivedInverseOrientation = GetDerivedOrientation().Inverse();
    }
예제 #4
0
파일: Bone.cpp 프로젝트: wangyanxing/Demi3D
 void DiBone::GetOffsetTransform(btTransform& t) const
 {
     DiVec3 locScale = GetDerivedScale() * mBindDerivedInverseScale;
     DiQuat locRotate = GetDerivedOrientation() * mBindDerivedInverseOrientation;
     DiVec3 locTranslate = GetDerivedPosition() +
     locRotate * (locScale * mBindDerivedInversePosition);
     t.setOrigin(btVector3(locTranslate.x,locTranslate.y,locTranslate.z));
     btQuaternion qt;
     qt.setValue(locRotate.x,locRotate.y,locRotate.z,locRotate.w);
     t.setRotation(qt);
     t.setBasis(t.getBasis().scaled(btVector3(locScale.x, locScale.y, locScale.z)));
 }
예제 #5
0
    bool DiInstancedModel::FindVisible( DiCamera *camera ) const
    {
        bool retVal = GetVisible();
        float r = DiMath::BoundingRadiusFromAABB(GetBoundingBox());

        if( retVal && camera )
        {
            retVal = camera->IsVisible(DiSphere(GetDerivedPosition(),r));
        }

        return retVal;
    }
예제 #6
0
 void DiGravityController::PreProcessParticles(DiParticleElement* particleTechnique, float timeElapsed)
 {
     GetDerivedPosition();
 }