<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Probleme mit einem Object (Recast &amp;amp; Detour)]]></title><description><![CDATA[<p>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:<br />
(Orginal Recast Funktion / nicht verändert da meine Veränderte Version nicht funtz)</p>
<pre><code class="language-cpp">dtNavMesh* LoadAll(const char* path)
{
	FILE* fp = fopen(path, &quot;rb&quot;);
	if (!fp) return 0;

	// Read header.
	NavMeshSetHeader header;
	fread(&amp;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&lt;&lt;header.numTiles&lt;&lt;endl;
	if (!mesh || !mesh-&gt;init(&amp;header.params))
	{
		fclose(fp);
		return 0;
	}

	// Read tiles.
	for (int i = 0; i &lt; header.numTiles; ++i)
	{
		NavMeshTileHeader tileHeader;
		fread(&amp;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-&gt;addTile(data, tileHeader.dataSize, DT_TILE_FREE_DATA, tileHeader.tileRef);
	}

	fclose(fp);
	cout&lt;&lt;mesh-&gt;getMaxTiles()&lt;&lt;endl;
	return mesh;
}
</code></pre>
<p>MemMeshHeader ist eine Struktur die wie folgt aussiht:</p>
<pre><code class="language-cpp">struct NavMeshSetHeader
{
	int magic;
	int version;
	int numTiles;
	dtNavMeshParams params;
};

struct NavMeshTileHeader
{
	dtTileRef tileRef;
	int dataSize;
};
</code></pre>
<p>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.</p>
<p>Mesh ist ein einmalig declariertes objekt.</p>
<p>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.</p>
<p>Ich denke ich habe mich schlecht ausgedrückt also hier nochmal wo ich den Fehler sehe:</p>
<p>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?</p>
<p>Vielen dank der Hamburger.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/277056/probleme-mit-einem-object-recast-amp-detour</link><generator>RSS for Node</generator><lastBuildDate>Wed, 26 Aug 2026 02:23:51 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/277056.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 12 Nov 2010 10:57:48 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Probleme mit einem Object (Recast &amp;amp; Detour) on Fri, 12 Nov 2010 10:57:48 GMT]]></title><description><![CDATA[<p>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:<br />
(Orginal Recast Funktion / nicht verändert da meine Veränderte Version nicht funtz)</p>
<pre><code class="language-cpp">dtNavMesh* LoadAll(const char* path)
{
	FILE* fp = fopen(path, &quot;rb&quot;);
	if (!fp) return 0;

	// Read header.
	NavMeshSetHeader header;
	fread(&amp;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&lt;&lt;header.numTiles&lt;&lt;endl;
	if (!mesh || !mesh-&gt;init(&amp;header.params))
	{
		fclose(fp);
		return 0;
	}

	// Read tiles.
	for (int i = 0; i &lt; header.numTiles; ++i)
	{
		NavMeshTileHeader tileHeader;
		fread(&amp;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-&gt;addTile(data, tileHeader.dataSize, DT_TILE_FREE_DATA, tileHeader.tileRef);
	}

	fclose(fp);
	cout&lt;&lt;mesh-&gt;getMaxTiles()&lt;&lt;endl;
	return mesh;
}
</code></pre>
<p>MemMeshHeader ist eine Struktur die wie folgt aussiht:</p>
<pre><code class="language-cpp">struct NavMeshSetHeader
{
	int magic;
	int version;
	int numTiles;
	dtNavMeshParams params;
};

struct NavMeshTileHeader
{
	dtTileRef tileRef;
	int dataSize;
};
</code></pre>
<p>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.</p>
<p>Mesh ist ein einmalig declariertes objekt.</p>
<p>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.</p>
<p>Ich denke ich habe mich schlecht ausgedrückt also hier nochmal wo ich den Fehler sehe:</p>
<p>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?</p>
<p>Vielen dank der Hamburger.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1979376</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1979376</guid><dc:creator><![CDATA[hamburger]]></dc:creator><pubDate>Fri, 12 Nov 2010 10:57:48 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit einem Object (Recast &amp;amp; Detour) on Fri, 12 Nov 2010 11:02:39 GMT]]></title><description><![CDATA[<p>Dann schreib eine zweite Funktion, die eine weitere Datei anhängt und dabei den Header und Datenpuffer entsprechend korrigiert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1979379</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1979379</guid><dc:creator><![CDATA[DocShoe]]></dc:creator><pubDate>Fri, 12 Nov 2010 11:02:39 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit einem Object (Recast &amp;amp; Detour) on Fri, 12 Nov 2010 12:53:15 GMT]]></title><description><![CDATA[<p>Kannst du mir ein kleines Bsp schreiben?? wäre sehr nett !</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1979423</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1979423</guid><dc:creator><![CDATA[hamburger]]></dc:creator><pubDate>Fri, 12 Nov 2010 12:53:15 GMT</pubDate></item></channel></rss>