Exemple #1
0
GMVector3D GMViewport::project(const GMVector3D& source, const GMMatrix& projection, const GMMatrix& view, const GMMatrix& world)
{
    GMVector4D result = GMVector4D::Transform(source, world);
    result = result.transform(view);
    result = result.transform(projection);
    result.z = result.z * (maxDepth - minDepth);
    result /=  result.w;
    
    GMVector3D finalResult(result.x, result.y, result.z);    
    finalResult.x = x + (1 + finalResult.x) * width / 2;
    finalResult.y = y + (1 - finalResult.y) * height / 2;
    finalResult.z = finalResult.z + minDepth;
    return finalResult;    
}
double ATCAbstractProfile::mixedInterval(ATCInterpolator2D &interpolator, ATCInterpolator2D &inverseInterpolator, double key, double lvlFrom, double interval)
{
    //Calculate quantity X from initial level using standard interpolator
    QVector<double> site(1, lvlFrom);
    QVector<double> result(1);
    interpolator.interpolate(key, site, result);

    //Update quantity X for final level using input interval
    double finalX = interval + result.at(0);

    //Calculate final level using updated quantity X
    QVector<double> finalSite(1, finalX);
    QVector<double> finalResult(1);
    inverseInterpolator.interpolate(key, finalSite, finalResult);

    //Return calculated level
    return finalResult.at(0);
}