Probleme mit einem Object (Recast & Detour)



  • Hallo! Ich habe ein Problem. Ich möchte gerne mit Recast mehrere zuvor erstellte meshes laden. Mein problem, ist das ich nur 1 Datei zur zeit landen kann. Die funtkion die ich nutze siht wie folgt aus:
    (Orginal Recast Funktion / nicht verändert da meine Veränderte Version nicht funtz)

    dtNavMesh* LoadAll(const char* path)
    {
    	FILE* fp = fopen(path, "rb");
    	if (!fp) return 0;
    
    	// Read header.
    	NavMeshSetHeader header;
    	fread(&header, sizeof(NavMeshSetHeader), 1, fp);
    	if (header.magic != NAVMESHSET_MAGIC)
    	{
    		fclose(fp);
    		return 0;
    	}
    	if (header.version != NAVMESHSET_VERSION)
    	{
    		fclose(fp);
    		return 0;
    	}
    
    	//dtNavMesh* mesh = dtAllocNavMesh();
    	cout<<header.numTiles<<endl;
    	if (!mesh || !mesh->init(&header.params))
    	{
    		fclose(fp);
    		return 0;
    	}
    
    	// Read tiles.
    	for (int i = 0; i < header.numTiles; ++i)
    	{
    		NavMeshTileHeader tileHeader;
    		fread(&tileHeader, sizeof(tileHeader), 1, fp);
    		if (!tileHeader.tileRef || !tileHeader.dataSize)
    			break;
    
    		unsigned char* data = (unsigned char*)dtAlloc(tileHeader.dataSize, DT_ALLOC_PERM);
    		if (!data) break;
    		memset(data, 0, tileHeader.dataSize);
    		fread(data, tileHeader.dataSize, 1, fp);
    
    		mesh->addTile(data, tileHeader.dataSize, DT_TILE_FREE_DATA, tileHeader.tileRef);
    	}
    
    	fclose(fp);
    	cout<<mesh->getMaxTiles()<<endl;
    	return mesh;
    }
    

    MemMeshHeader ist eine Struktur die wie folgt aussiht:

    struct NavMeshSetHeader
    {
    	int magic;
    	int version;
    	int numTiles;
    	dtNavMeshParams params;
    };
    
    struct NavMeshTileHeader
    {
    	dtTileRef tileRef;
    	int dataSize;
    };
    

    So wenn ich jetzt 1. Mesh datei lade geht es ohne probleme. wenn ich nun aber mehrere laden möchte wird nur die zulestgeladende datei genutzt (ist ja klar da ja beim laden jedesmal ein neues Objekt erstellt wird.

    Mesh ist ein einmalig declariertes objekt.

    Nun zu meiner Frage. Wie kann man es machen das ich z.B mehrere datein Laden kann das object der Struktur NavMeshHeader nur erweitert wird und ich somit nicht jedesmal für jede datei das object resetten muss und dann nur die teile der Datei add.

    Ich denke ich habe mich schlecht ausgedrückt also hier nochmal wo ich den Fehler sehe:

    Bsp: ich möchte 2 Meshdatein laden. Wenn ich datei 1 lade dann wird ein neues Object erstellt und die daten in das Objekt Header geladen. dann wird die datei mit dem Object Mesh verknüpft. Dann werden die Daten aus dem Object Header in die Meshdatei geladen. Naja das ganze klappt auch wunderbar nur leider nur mit 1 Date. Ich möchte aber mehrere datein laden. Wisst ihr ne möglichkeit das zu realisieren?

    Vielen dank der Hamburger.



  • Dann schreib eine zweite Funktion, die eine weitere Datei anhängt und dabei den Header und Datenpuffer entsprechend korrigiert.



  • Kannst du mir ein kleines Bsp schreiben?? wäre sehr nett !


Anmelden zum Antworten