コード例 #1
0
// ---------------------------------------------
void GeometryPolygonExporter::getPolygonInputAttributes ( COLLADASW::InputList &inputList )
{
    // Generate the polygon set inputs.
    int nextIdx = 1, normalsIdx = -1;
    int offset = 0; // Offset for the input list

    size_t inputCount = mPolygonSources->size();
    for ( size_t p = 0; p < inputCount; ++p )
    {
        const SourceInput param = ( *mPolygonSources ) [p];
        const COLLADASW::SourceBase source = param.getSource();
        const COLLADASW::InputSemantic::Semantics type = param.getType();

        // Check if the vertex is already registered
        bool isVertexSource = SourceInput::containsSourceBase ( mVertexSources, &source );

        // Add the per-face, per-vertex input to the polygons description
        if ( !isVertexSource )
        {
            // Get the generated id of the source for reference
            String sourceId = source.getId();

            // The vertex sources must reference to the vertexes element
            if ( type == COLLADASW::InputSemantic::VERTEX )
            {
                String suffix = getSuffixBySemantic ( type );
                sourceId = mMeshId + suffix;
            }

            if ( type == COLLADASW::InputSemantic::TEXCOORD )
            {
                // For texture coordinate-related inputs: set the 'set' attribute.
                if ( param.getIdx () >= 0 )
                    inputList.push_back ( COLLADASW::Input ( type, COLLADASW::URI ( EMPTY_STRING, sourceId ), offset++, param.getIdx() ) );
                else
                    inputList.push_back ( COLLADASW::Input ( type, COLLADASW::URI ( EMPTY_STRING, sourceId ), offset++ ) );
            }
            else if ( type == COLLADASW::InputSemantic::TANGENT || type == COLLADASW::InputSemantic::BINORMAL || type == COLLADASW::InputSemantic::TEXBINORMAL )
            {
                // Tangents and binormals can use the same index than the normals.
                // Texture binormals can use the index list of texture tangents.
                if ( param.getIdx () >= 0 )
                    inputList.push_back ( COLLADASW::Input ( type, COLLADASW::URI ( EMPTY_STRING, sourceId ), offset-1, param.getIdx() ) );
                else
                    inputList.push_back ( COLLADASW::Input ( type, COLLADASW::URI ( EMPTY_STRING, sourceId ), offset-1 ) );
            }
            else
            {
                if ( param.getIdx () >= 0 )
                    inputList.push_back ( COLLADASW::Input ( type, COLLADASW::URI ( EMPTY_STRING, sourceId ), offset++, param.getIdx () ) );
                else
                    inputList.push_back ( COLLADASW::Input ( type, COLLADASW::URI ( EMPTY_STRING, sourceId ), offset++ ) );
            }
        }
    }
}
コード例 #2
0
std::string GeometryExporter::getIdBySemantics(std::string geom_id, COLLADASW::InputSemantic::Semantics type, std::string other_suffix) {
	return geom_id + getSuffixBySemantic(type) + other_suffix;
}