Transform XMLReader::LoadTransform(QXmlStreamReader &xml_reader)
{
    glm::vec3 t, r, s;
    s = glm::vec3(1,1,1);
    while(!xml_reader.isEndElement() || QStringRef::compare(xml_reader.name(), QString("transform")) != 0)
    {
        xml_reader.readNext();
        QString tag(xml_reader.name().toString());
        if(xml_reader.isStartElement() && QString::compare(tag, QString("translate")) == 0)
        {
            xml_reader.readNext();
            if(xml_reader.isCharacters())
            {
                QStringRef vec = xml_reader.text();
                t = ToVec3(vec);
            }
            xml_reader.readNext();
        }
        else if(xml_reader.isStartElement() && QString::compare(tag, QString("rotate")) == 0)
        {
            xml_reader.readNext();
            if(xml_reader.isCharacters())
            {
                QStringRef vec = xml_reader.text();
                r = ToVec3(vec);
            }
            xml_reader.readNext();
        }
        else if(xml_reader.isStartElement() && QString::compare(tag, QString("scale")) == 0)
        {
            xml_reader.readNext();
            if(xml_reader.isCharacters())
            {
                QStringRef vec = xml_reader.text();
                s = ToVec3(vec);
            }
            xml_reader.readNext();
        }
    }
    return Transform(t, r, s);
}
math::vector3d PhysXShape::getLocalTranslation()const
{
	NxVec3 r=m_nxShape->getLocalPosition();
	return ToVec3(r);
}
Camera XMLReader::LoadCamera(QXmlStreamReader &xml_reader)
{
    Camera result;
    while(!xml_reader.isEndElement() || QStringRef::compare(xml_reader.name(), QString("camera")) != 0)
    {
        xml_reader.readNext();
        QString tag(xml_reader.name().toString());


        if(QString::compare(tag, QString("target")) == 0)
        {
            xml_reader.readNext();
            if(xml_reader.isCharacters())
            {
                result.ref = ToVec3(xml_reader.text());
            }
            xml_reader.readNext();
        }
        else if(QString::compare(tag, QString("eye")) == 0)
        {
            xml_reader.readNext();
            if(xml_reader.isCharacters())
            {
                result.eye = ToVec3(xml_reader.text());
            }
            xml_reader.readNext();
        }
        else if(QString::compare(tag, QString("worldUp")) == 0)
        {
            xml_reader.readNext();
            if(xml_reader.isCharacters())
            {
                result.world_up = ToVec3(xml_reader.text());
            }
            xml_reader.readNext();
        }
        else if(QString::compare(tag, QString("width")) == 0)
        {
            xml_reader.readNext();
            if(xml_reader.isCharacters())
            {
                result.width = xml_reader.text().toFloat();
            }
            xml_reader.readNext();
        }
        else if(QString::compare(tag, QString("height")) == 0)
        {
            xml_reader.readNext();
            if(xml_reader.isCharacters())
            {
                result.height = xml_reader.text().toFloat();
            }
            xml_reader.readNext();
        }
        else if(QString::compare(tag, QString("fov")) == 0)
        {
            xml_reader.readNext();
            if(xml_reader.isCharacters())
            {
                result.fovy = xml_reader.text().toFloat();
            }
            xml_reader.readNext();
        }
        else if(QString::compare(tag, QString("nearClip")) == 0)
        {
            xml_reader.readNext();
            if(xml_reader.isCharacters())
            {
                result.near_clip = xml_reader.text().toFloat();
            }
            xml_reader.readNext();
        }
        else if(QString::compare(tag, QString("farClip")) == 0)
        {
            xml_reader.readNext();
            if(xml_reader.isCharacters())
            {
                result.far_clip = xml_reader.text().toFloat();
            }
            xml_reader.readNext();
        }
    }
    result.RecomputeAttributes();
    return result;
}
Material* XMLReader::LoadMaterial(QXmlStreamReader &xml_reader, const QStringRef &local_path)
{
    Material* result;
    //First check what type of material we're supposed to load
    QXmlStreamAttributes attribs(xml_reader.attributes());
    QStringRef type = attribs.value(QString(), QString("type"));
    if(QStringRef::compare(type, QString("lambert")) == 0)
    {
        result = new LambertMaterial();
    }
    else if(QStringRef::compare(type, QString("phong")) == 0)
    {
        result = new PhongMaterial();
        QStringRef spec_pow = attribs.value(QString(), QString("specularPower"));
        if(QStringRef::compare(spec_pow, QString("")) != 0)
        {
            ((PhongMaterial*)result)->specular_power = spec_pow.toFloat();
        }
    }
    else
    {
        std::cout << "Could not parse the material!" << std::endl;
        return NULL;
    }

    result->name = attribs.value(QString(), QString("name")).toString();

    while(!xml_reader.isEndElement() || QStringRef::compare(xml_reader.name(), QString("material")) != 0)
    {
        xml_reader.readNext();
        QString tag(xml_reader.name().toString());
        if(QString::compare(tag, QString("baseColor")) == 0)
        {
            xml_reader.readNext();
            if(xml_reader.isCharacters())
            {
                result->base_color = ToVec3(xml_reader.text());
            }
            xml_reader.readNext();
        }
        else if(QString::compare(tag, QString("reflectivity")) == 0)
        {
            xml_reader.readNext();
            if(xml_reader.isCharacters())
            {
                result->reflectivity = xml_reader.text().toFloat();
            }
            xml_reader.readNext();
        }
        else if(QString::compare(tag, QString("iorIn")) == 0)
        {
            xml_reader.readNext();
            if(xml_reader.isCharacters())
            {
                result->refract_idx_in = xml_reader.text().toFloat();
            }
            xml_reader.readNext();
        }
        else if(QString::compare(tag, QString("iorOut")) == 0)
        {
            xml_reader.readNext();
            if(xml_reader.isCharacters())
            {
                result->refract_idx_out = xml_reader.text().toFloat();
            }
            xml_reader.readNext();
        }
        else if(QString::compare(tag, QString("emissive")) == 0)
        {
            xml_reader.readNext();
            if(xml_reader.isCharacters())
            {
                if(QStringRef::compare(xml_reader.text(), QString("false"), Qt::CaseInsensitive) == 0)
                {
                    result->emissive = false;
                }
                else if(QStringRef::compare(xml_reader.text(), QString("true"), Qt::CaseInsensitive) == 0)
                {
                    result->emissive = true;
                }
            }
            xml_reader.readNext();
        }
        else if(QString::compare(tag, QString("texture")) == 0)
        {
            xml_reader.readNext();
            if(xml_reader.isCharacters())
            {
                QString img_filepath = local_path.toString().append(xml_reader.text().toString());
                QImage* texture = new QImage(img_filepath);
                result->texture = texture;
            }
            xml_reader.readNext();
        }
        else if(QString::compare(tag, QString("normalMap")) == 0)
        {
            xml_reader.readNext();
            if(xml_reader.isCharacters())
            {
                QString img_filepath = local_path.toString().append(xml_reader.text().toString());
                QImage* texture = new QImage(img_filepath);
                result->normal_map = texture;
            }
            xml_reader.readNext();
        }
    }
    return result;
}
math::vector3d PhysXCylinderJoint::getGlobalAxis(){
	NxVec3 vec=m_joint->getGlobalAxis();
	return ToVec3(vec);
}
Example #6
0
BxDF* XMLReader::LoadBxDF(QXmlStreamReader &xml_reader)
{
    BxDF* result = NULL;
    //First check what type of material we're supposed to load
    QXmlStreamAttributes attribs(xml_reader.attributes());
    QStringRef type = attribs.value(QString(), QString("type"));
    if(QStringRef::compare(type, QString("lambert")) == 0)
    {
        glm::vec3 diffuseColor(0.5f);
        QStringRef color = attribs.value(QString(), QString("diffuseColor"));
        if(QStringRef::compare(color, QString("")) != 0)
        {
            diffuseColor = ToVec3(color);
        }
        result = new LambertBxDF(diffuseColor);
    }
    else if(QStringRef::compare(type, QString("specularReflection")) == 0)
    {
        glm::vec3 refl_color(0.5f);
        QStringRef color = attribs.value(QString(), QString("reflectionColor"));
        if(QStringRef::compare(color, QString("")) != 0)
        {
            refl_color = ToVec3(color);
        }
        result = new SpecularReflectionBxDF(refl_color);
    }
    else if(QStringRef::compare(type, QString("blinnMicrofacet")) == 0)
    {
        glm::vec3 refl_color(0.5f);
        QStringRef color = attribs.value(QString(), QString("reflectionColor"));
        if(QStringRef::compare(color, QString("")) != 0)
        {
            refl_color = ToVec3(color);
        }
        result = new BlinnMicrofacetBxDF(refl_color);

        QStringRef exponent = attribs.value(QString(), QString("exponent"));
        if(QStringRef::compare(exponent, QString("")) != 0)
        {
            ((BlinnMicrofacetBxDF*)result)->exponent = exponent.toFloat();
        }
    }

    else if(QStringRef::compare(type, QString("anisotropic")) == 0)
    {
        glm::vec3 refl_color(0.5f);
        QStringRef color = attribs.value(QString(), QString("reflectionColor"));
        if(QStringRef::compare(color, QString("")) != 0)
        {
            refl_color = ToVec3(color);
        }

        float exp1 = 4.0f;
        QStringRef e1 = attribs.value(QString(), QString("exponent1"));
        if(QStringRef::compare(e1, QString("")) != 0)
        {
            exp1 =  e1.toFloat();
        }

        float exp2 = 20.0f;
        QStringRef e2 = attribs.value(QString(), QString("exponent2"));
        if(QStringRef::compare(e2, QString("")) != 0)
        {
            exp2 =  e2.toFloat();
        }
        result = new AnisotropicBxDF(refl_color, exp1, exp2);
    }

    else if(QStringRef::compare(type, QString("phong")) == 0)
    {
        glm::vec3 diffuseColor(0.5f);
        QStringRef diffuse_color = attribs.value(QString(), QString("diffuseColor"));
        if(QStringRef::compare(diffuse_color, QString("")) != 0)
        {
            diffuseColor = ToVec3(diffuse_color);
        }

        glm::vec3 specularColor(1);
        QStringRef specular_color = attribs.value(QString(), QString("specularColor"));
        if(QStringRef::compare(specular_color, QString("")) != 0)
        {
            specularColor = ToVec3(specular_color);
        }

        float specularPower = 5.0f;
        QStringRef specular_power = attribs.value(QString(), QString("specularPower"));
        if(QStringRef::compare(specular_power, QString("")) != 0)
        {
            specularPower = specular_power.toFloat();
        }

        result = new PhongBxDF(diffuseColor, specularColor, specularPower);
    }
    else if(QStringRef::compare(type, QString("transmission")) == 0)
    {

        float ei = 1.0f;
        float et = 1.0f;

        QStringRef eta_i = attribs.value(QString(), QString("etai"));
        if(QStringRef::compare(eta_i, QString("")) != 0)
        {
            ei = eta_i.toFloat();
        }

        QStringRef eta_t = attribs.value(QString(), QString("etat"));
        if(QStringRef::compare(eta_i, QString("")) != 0)
        {
            et = eta_t.toFloat();
        }

        glm::vec3 transmissionColor(1);
        QStringRef trans = attribs.value(QString(), QString("transmissionColor"));
        if(QStringRef::compare(trans, QString("")) != 0)
        {
            transmissionColor = ToVec3(trans);
        }

        result = new TransmissionBxDF(ei,et,transmissionColor);
    }
    else
    {
        std::cout << "Could not parse the BxDF!" << std::endl;
        return NULL;
    }
    result->name = attribs.value(QString(), QString("name")).toString();
    return result;
}
Example #7
0
Material* XMLReader::LoadMaterial(QXmlStreamReader &xml_reader, const QStringRef &local_path, QMap<QString, QList<Material *> > &map)
{
    Material* result;
    bool weighted_material = false;
    //First check what type of material we're supposed to load
    QXmlStreamAttributes attribs(xml_reader.attributes());
    QStringRef type = attribs.value(QString(), QString("type"));
    if(QStringRef::compare(type, QString("default")) == 0)
    {
        result = new Material();
    }
    else if(QStringRef::compare(type, QString("light")) == 0)
    {
        result = new LightMaterial();
        result->is_light_source = true;
        QStringRef intensity = attribs.value(QString(), QString("intensity"));
        if(QStringRef::compare(intensity, QString("")) != 0)
        {
            result->intensity = intensity.toFloat();
        }
    }
    else if(QStringRef::compare(type, QString("weighted")) == 0)
    {
        result = new WeightedMaterial();
        weighted_material = true;
        //weights are handled below
    }
    else
    {
        std::cout << "Could not parse the material!" << std::endl;
        return NULL;
    }

    result->name = attribs.value(QString(), QString("name")).toString();

    while(!xml_reader.isEndElement() || QStringRef::compare(xml_reader.name(), QString("material")) != 0)
    {
        xml_reader.readNext();
        QString tag(xml_reader.name().toString());
        if(QString::compare(tag, QString("baseColor")) == 0)
        {
            xml_reader.readNext();
            if(xml_reader.isCharacters())
            {
                result->base_color = ToVec3(xml_reader.text());
            }
            xml_reader.readNext();
        }
        else if(QString::compare(tag, QString("bxdf")) == 0)
        {
            //Add the Material to the map of BxDF names to Materials so that we can assign it a BxDF later
            xml_reader.readNext();
            if(xml_reader.isCharacters())
            {
                QString bxdf_name = xml_reader.text().toString();
                QList<Material*> list = map.value(bxdf_name);
                list.append(result);
                map.insert(bxdf_name, list);
                xml_reader.readNext();

            }
        }
        else if(QString::compare(tag, QString("texture")) == 0)
        {
            result->texture = LoadTextureFile(xml_reader, local_path);
        }
        else if(QString::compare(tag, QString("normalMap")) == 0)
        {
            result->normal_map = LoadTextureFile(xml_reader, local_path);
        }
        else if(QString::compare(tag, QString("weight")) == 0 && weighted_material)
        {
            xml_reader.readNext();
            float weight;
            if(xml_reader.isCharacters())
            {
                weight = xml_reader.text().toFloat();
            }
            ((WeightedMaterial*)result)->bxdf_weights.append(weight);
            xml_reader.readNext(); // add this line
        }
    }
    return result;
}
Example #8
0
tt::DualQuaternion Combine(const tt::DualQuaternion& lhs, const tt::DualQuaternion& rhs)
{
	//Example: lhs = invBindpose, rhs = transform
	return tt::DualQuaternion(lhs.Data[0] * rhs.Data[0]*-1, ToVec3(tt::Quaternion::Inverse(rhs.Data[0]) * ExtractPos(lhs) * rhs.Data[0] + ExtractPos(rhs)));
}