コード例 #1
0
GLuint GLODMesh::createObject( const LODSettings& lodsettings )
{
    // check if object is already created
    assert( ( _lodGroupName == 0 ) && "LOD object has already been created!" );

    // make a local copy of lod settings object
    _p_lodSettings = new LODSettings( lodsettings );

    // first create a group
    createGroupName();

    _lodObjectName = s_lodObject;
    ++s_lodObject;
    glodNewObject( _lodGroupName, _lodObjectName, _p_lodSettings->getMode() );

    // create one single vertex array out of exsiting triangles and triangle strips
    osg::Vec3Array*  p_vertarray  = new osg::Vec3Array();
    osg::IndexArray* p_indexarray = new osg::UShortArray();

    osg::IndexArray* p_indices  = _p_geometry->getVertexIndices();
    unsigned int     numPrims   = _p_geometry->getNumPrimitiveSets();
    {
        for ( unsigned int primcnt = 0; primcnt < numPrims; ++primcnt )
        {
            osg::PrimitiveSet* p_set = _p_geometry->getPrimitiveSet( primcnt );
            switch( p_set->getMode() )
            {

                case osg::PrimitiveSet::TRIANGLES: 
                    buildObjectTrianlge( p_set, p_indices );
                    break;

                default:
                {
                    log_warning << "unsupported primitive for building LOD, only TRIANGLES supported" << std::endl; 
                    continue;
                }
            }
        }
    }

    return _lodObjectName;
}
コード例 #2
0
void create_glod_object_from_vertex_buffers(S32 object, S32 group, std::vector<LLPointer <LLVertexBuffer> >& vertex_buffers)
{
	glodNewGroup(group);
	stop_gloderror();
	glodNewObject(object, group, GLOD_DISCRETE);
	stop_gloderror();

	for (U32 i = 0; i < vertex_buffers.size(); ++i)
	{
		vertex_buffers[i]->setBuffer(LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_NORMAL | LLVertexBuffer::MAP_TEXCOORD0);
		
		U32 num_indices = vertex_buffers[i]->getNumIndices();
		
		if (num_indices > 2)
		{
			glodInsertElements(object, i, GL_TRIANGLES, num_indices, GL_UNSIGNED_SHORT,
							   vertex_buffers[i]->getIndicesPointer(), 0, 0.f);
		}
		stop_gloderror();
	}
	
	glodBuildObject(object);
	stop_gloderror();
}