<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/">
	<channel>
		<title><![CDATA[Ogre3d.de Forum - Alle Foren]]></title>
		<link>http://www.ogre3d.de/forum/</link>
		<description><![CDATA[Ogre3d.de Forum - http://www.ogre3d.de/forum]]></description>
		<pubDate>Mon, 06 Feb 2012 15:42:08 +0000</pubDate>
		<generator>MyBB</generator>
		<item>
			<title><![CDATA[Videotutorial von mir]]></title>
			<link>http://www.ogre3d.de/forum/showthread.php?tid=408</link>
			<pubDate>Thu, 15 Dec 2011 21:03:01 +0100</pubDate>
			<guid isPermaLink="false">http://www.ogre3d.de/forum/showthread.php?tid=408</guid>
			<description><![CDATA[Hallo liebe Community.<br />
<br />
Ich hab selbst vor einiger Zeit den Einstieg in Ogre3D gewagt und bin für meinen Teil auf einige Probleme gestoßen... Nicht immer war alles in den Tutorials für mich auf anhieb verständlich.<br />
Daher habe ich beschlossen ein Video-tutorial zu machen in dem ich erkläre anhand von Quellcode, wie ich an die Sache rangehe. sicherlich ist das nicht das Beste, aber ich hoffe ich kann einigen den Einstieg der mir schwer fiel deutlich vereinfachen. <br />
<br />
Ich habe die Videos bei Youtube hochgeladen und ihr findet diese alle unter meinem Kanal: <br />
<br />
<a href="http://www.youtube.com/user/Volnatabu" target="_blank">http://www.youtube.com/user/Volnatabu</a><br />
<br />
Aktuell sind es leider nur zwei Videos, aber ich gedenke wenn möglich weiterhin zwei Videos pro Monat hochzuladen als Minimum.<br />
<br />
In der Hoffnung jemanden geholfen zu haben.<br />
<br />
Volnatabu]]></description>
			<content:encoded><![CDATA[Hallo liebe Community.<br />
<br />
Ich hab selbst vor einiger Zeit den Einstieg in Ogre3D gewagt und bin für meinen Teil auf einige Probleme gestoßen... Nicht immer war alles in den Tutorials für mich auf anhieb verständlich.<br />
Daher habe ich beschlossen ein Video-tutorial zu machen in dem ich erkläre anhand von Quellcode, wie ich an die Sache rangehe. sicherlich ist das nicht das Beste, aber ich hoffe ich kann einigen den Einstieg der mir schwer fiel deutlich vereinfachen. <br />
<br />
Ich habe die Videos bei Youtube hochgeladen und ihr findet diese alle unter meinem Kanal: <br />
<br />
<a href="http://www.youtube.com/user/Volnatabu" target="_blank">http://www.youtube.com/user/Volnatabu</a><br />
<br />
Aktuell sind es leider nur zwei Videos, aber ich gedenke wenn möglich weiterhin zwei Videos pro Monat hochzuladen als Minimum.<br />
<br />
In der Hoffnung jemanden geholfen zu haben.<br />
<br />
Volnatabu]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Pfeil abschießen]]></title>
			<link>http://www.ogre3d.de/forum/showthread.php?tid=407</link>
			<pubDate>Fri, 11 Nov 2011 11:38:15 +0100</pubDate>
			<guid isPermaLink="false">http://www.ogre3d.de/forum/showthread.php?tid=407</guid>
			<description><![CDATA[Hallo Leute, <br />
<br />
ich möchte einen Bogenschießen Spiel entwickeln, wie kann ich den Pfeil abschießen? Für die Physik Engine habe ich Bullet eingebunden. Der Pfeil habe ich als kinematische Gegenstand definiert.<br />
<br />
Ich habe den Pfeil schon im Programm eingebunden, nun möchte ihn losschießen, wenn die Bedingungen erfüllt sind. Die Bedingungen sind auch schon definiert.]]></description>
			<content:encoded><![CDATA[Hallo Leute, <br />
<br />
ich möchte einen Bogenschießen Spiel entwickeln, wie kann ich den Pfeil abschießen? Für die Physik Engine habe ich Bullet eingebunden. Der Pfeil habe ich als kinematische Gegenstand definiert.<br />
<br />
Ich habe den Pfeil schon im Programm eingebunden, nun möchte ihn losschießen, wenn die Bedingungen erfüllt sind. Die Bedingungen sind auch schon definiert.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[OGRE Programmierer gesucht - gute Bezahlung]]></title>
			<link>http://www.ogre3d.de/forum/showthread.php?tid=405</link>
			<pubDate>Mon, 12 Sep 2011 10:12:15 +0200</pubDate>
			<guid isPermaLink="false">http://www.ogre3d.de/forum/showthread.php?tid=405</guid>
			<description><![CDATA[Hallo,<br />
<br />
wir sind ein kleines VFX Studio in Stuttgart und suchen für ein Projekt einen Programmierer, der die OGRE Engine gut programmieren kann.<br />
Damit ihr euch ein Bild von uns machen könnt, hier der Link zu unserer Webpage: <a href="http://www.versilbert.de" target="_blank">http://www.versilbert.de</a><br />
<br />
Es geht um eine interaktive Produktpräsentation, in der das Produkt frei drehbar und zoombar ist. Man kann dann bestimmte Teile des Produktes anklicken, wodurch diese hervor gehoben werden und man eine Beschreibung dazu sieht.<br />
<br />
Der Job ist gut bezahlt, das Projekt wird im Oktober oder November 2011 stattfinden. Projektdauer ist 3 Wochen.<br />
Gearbeitet wird von Montag bis Freitag, 10 Stunden pro Tag plus 1 Stunde Mittagspause.<br />
<br />
Der Programmierer müsste dazu zu uns nach Stuttgart kommen.<br />
Fahrtkosten und Unterkunft übernehmen wir.<br />
<br />
Bei Interesse schickt bitte Eure Arbeitsproben an: office@versilbert.de<br />
<br />
Viele Grüße !<br />
<br />
Falk Büttner]]></description>
			<content:encoded><![CDATA[Hallo,<br />
<br />
wir sind ein kleines VFX Studio in Stuttgart und suchen für ein Projekt einen Programmierer, der die OGRE Engine gut programmieren kann.<br />
Damit ihr euch ein Bild von uns machen könnt, hier der Link zu unserer Webpage: <a href="http://www.versilbert.de" target="_blank">http://www.versilbert.de</a><br />
<br />
Es geht um eine interaktive Produktpräsentation, in der das Produkt frei drehbar und zoombar ist. Man kann dann bestimmte Teile des Produktes anklicken, wodurch diese hervor gehoben werden und man eine Beschreibung dazu sieht.<br />
<br />
Der Job ist gut bezahlt, das Projekt wird im Oktober oder November 2011 stattfinden. Projektdauer ist 3 Wochen.<br />
Gearbeitet wird von Montag bis Freitag, 10 Stunden pro Tag plus 1 Stunde Mittagspause.<br />
<br />
Der Programmierer müsste dazu zu uns nach Stuttgart kommen.<br />
Fahrtkosten und Unterkunft übernehmen wir.<br />
<br />
Bei Interesse schickt bitte Eure Arbeitsproben an: office@versilbert.de<br />
<br />
Viele Grüße !<br />
<br />
Falk Büttner]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Positionierung eines Objektes auf dem Terrain]]></title>
			<link>http://www.ogre3d.de/forum/showthread.php?tid=336</link>
			<pubDate>Thu, 30 Jun 2011 17:22:25 +0200</pubDate>
			<guid isPermaLink="false">http://www.ogre3d.de/forum/showthread.php?tid=336</guid>
			<description><![CDATA[Grüße euch!<br />
<br />
also ich bin absoluter anfänger was ogre und mesh-files angeht, wie ihr sicherlich an der fragestellung auch bemerken werdet <img src="images/smilies/wink.gif" style="vertical-align: middle;" border="0" alt="Wink" title="Wink" />.<br />
<br />
Ich möchte ein Object auf einem schon vorhandenem Terrain (mesh-file) platzieren. die x und y koordinate habe ich schon. diese beziehen sich jedoch nicht auf das terrain. meine frage:<br />
<br />
wie kann ich schnell und unkompliziert die höhe (z-koordinate) an dieser stelle des terrains herrausfinden?<br />
<br />
EDIT: ich habe selbstverständlich die x und z koordinate und brauche die y koordinate des terrains... sry<br />
<br />
kann man hier eigentlich mit einer antwort rechnen oder ist hier nicht mehr so viel los?]]></description>
			<content:encoded><![CDATA[Grüße euch!<br />
<br />
also ich bin absoluter anfänger was ogre und mesh-files angeht, wie ihr sicherlich an der fragestellung auch bemerken werdet <img src="images/smilies/wink.gif" style="vertical-align: middle;" border="0" alt="Wink" title="Wink" />.<br />
<br />
Ich möchte ein Object auf einem schon vorhandenem Terrain (mesh-file) platzieren. die x und y koordinate habe ich schon. diese beziehen sich jedoch nicht auf das terrain. meine frage:<br />
<br />
wie kann ich schnell und unkompliziert die höhe (z-koordinate) an dieser stelle des terrains herrausfinden?<br />
<br />
EDIT: ich habe selbstverständlich die x und z koordinate und brauche die y koordinate des terrains... sry<br />
<br />
kann man hier eigentlich mit einer antwort rechnen oder ist hier nicht mehr so viel los?]]></content:encoded>
		</item>
		<item>
			<title><![CDATA['ne Frage über Terrain]]></title>
			<link>http://www.ogre3d.de/forum/showthread.php?tid=334</link>
			<pubDate>Tue, 21 Jun 2011 14:23:07 +0200</pubDate>
			<guid isPermaLink="false">http://www.ogre3d.de/forum/showthread.php?tid=334</guid>
			<description><![CDATA[Hallo Leute,<br />
Ich bin ein newbie rund Ogre und habe eine Frage über Terrain.<br />
Die Frage ist einfach und zwar: was ist eigentlich Terrain?! <img src="images/smilies/smile.gif" style="vertical-align: middle;" border="0" alt="Smile" title="Smile" /><br />
<br />
Also genauer möchte ich wissen, wofür dient Terrain in einem Computerspiel und was ist die Anwendung. Was ist die Prinzip, um ein Terrain herzustellen.<br />
<br />
Ich lese zurzeit Ogre-wiki als Tutorial.<br />
<a href="http://www.ogre3d.org/tikiwiki/Basic+Tutorial+3&amp;structure=Tutorials#Terrain" target="_blank">http://www.ogre3d.org/tikiwiki/Basic+Tut...ls#Terrain</a> habe ich schon gelesen aber wenig Erklärung gibt es, deshalb verstehe ich nicht genau.<br />
<br />
Danke!!!]]></description>
			<content:encoded><![CDATA[Hallo Leute,<br />
Ich bin ein newbie rund Ogre und habe eine Frage über Terrain.<br />
Die Frage ist einfach und zwar: was ist eigentlich Terrain?! <img src="images/smilies/smile.gif" style="vertical-align: middle;" border="0" alt="Smile" title="Smile" /><br />
<br />
Also genauer möchte ich wissen, wofür dient Terrain in einem Computerspiel und was ist die Anwendung. Was ist die Prinzip, um ein Terrain herzustellen.<br />
<br />
Ich lese zurzeit Ogre-wiki als Tutorial.<br />
<a href="http://www.ogre3d.org/tikiwiki/Basic+Tutorial+3&amp;structure=Tutorials#Terrain" target="_blank">http://www.ogre3d.org/tikiwiki/Basic+Tut...ls#Terrain</a> habe ich schon gelesen aber wenig Erklärung gibt es, deshalb verstehe ich nicht genau.<br />
<br />
Danke!!!]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Keine Textur??]]></title>
			<link>http://www.ogre3d.de/forum/showthread.php?tid=329</link>
			<pubDate>Wed, 25 May 2011 19:39:35 +0200</pubDate>
			<guid isPermaLink="false">http://www.ogre3d.de/forum/showthread.php?tid=329</guid>
			<description><![CDATA[Tach!<br />
<br />
Also ich will ein Spiel mit Ogre3d erstellen. Nur habe ich ein Problem mit selbsterstellten Meshes (Mit Blender gemacht). Der Export funktioniert so weit, wenn ich aber das Mesh im Programm lade kann ich es zwar sehen, aber leider ist dort keine Textur?! Das Mesh ist einfach nur weiß, obwohl grün drauf sein sollte... Ist auch nichts komplexes, nur ein grüner Würfel.....Sollte das alles nicht mit der Mesh geladen werden?<br />
<br />
Würde mich freuen, wenn mir jemand helfen könnte!<br />
<br />
<br />
cookiezzz<br />
<br />
<br />
EDIT: Die "Beigelegten" Meshes gehn übrings,also Ogerkopf und so...]]></description>
			<content:encoded><![CDATA[Tach!<br />
<br />
Also ich will ein Spiel mit Ogre3d erstellen. Nur habe ich ein Problem mit selbsterstellten Meshes (Mit Blender gemacht). Der Export funktioniert so weit, wenn ich aber das Mesh im Programm lade kann ich es zwar sehen, aber leider ist dort keine Textur?! Das Mesh ist einfach nur weiß, obwohl grün drauf sein sollte... Ist auch nichts komplexes, nur ein grüner Würfel.....Sollte das alles nicht mit der Mesh geladen werden?<br />
<br />
Würde mich freuen, wenn mir jemand helfen könnte!<br />
<br />
<br />
cookiezzz<br />
<br />
<br />
EDIT: Die "Beigelegten" Meshes gehn übrings,also Ogerkopf und so...]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Manual Object - Occlusion Culling]]></title>
			<link>http://www.ogre3d.de/forum/showthread.php?tid=325</link>
			<pubDate>Sat, 14 May 2011 10:36:00 +0200</pubDate>
			<guid isPermaLink="false">http://www.ogre3d.de/forum/showthread.php?tid=325</guid>
			<description><![CDATA[Hallo zusammen,<br />
<br />
bevor ich meine Frage stelle, vielleicht mal eine kleine Erläuterung meiner allgemeinen Situation. Ich arbeite momentan mit Ogre auf den Modelldaten von einem großen Campus, bestehend aus mehreren Gebäuden. Mein Ziel ist es die Gebäudeaußenkanten hervorgehoben darzustellen. Um dies zu erreichen speichere ich nach einer Filterung alle in Frage kommenden Kanten in einem ManualObject per Start- und Endpunkt pro Kante.<br />
Somit habe ich nun ein großes ManualObject in dem alle meine Kanten gespeichert sind (Größenordnung ~ 700.000 Kanten).<br />
<br />
Da ich nicht immer alle Kanten sehe und somit nicht alle Kanten rendern will, wollte ich nachfragen, ob bei einem ManualObject automatisch das OcclusionCulling mit eingebaut ist, da es ja immer einzelne Kantenstücke sind, so dass sowieso nur die Kanten gerendert werden die ich auch gerade sehe oder ob ich mir besser für jedes einzelne Mesh ein neues ManualObject anlege, welches ja dann normal mit OcclusionCulling behandelt wird.<br />
<br />
Vielen Dank bereits im Voraus<br />
<br />
Gruß Satari]]></description>
			<content:encoded><![CDATA[Hallo zusammen,<br />
<br />
bevor ich meine Frage stelle, vielleicht mal eine kleine Erläuterung meiner allgemeinen Situation. Ich arbeite momentan mit Ogre auf den Modelldaten von einem großen Campus, bestehend aus mehreren Gebäuden. Mein Ziel ist es die Gebäudeaußenkanten hervorgehoben darzustellen. Um dies zu erreichen speichere ich nach einer Filterung alle in Frage kommenden Kanten in einem ManualObject per Start- und Endpunkt pro Kante.<br />
Somit habe ich nun ein großes ManualObject in dem alle meine Kanten gespeichert sind (Größenordnung ~ 700.000 Kanten).<br />
<br />
Da ich nicht immer alle Kanten sehe und somit nicht alle Kanten rendern will, wollte ich nachfragen, ob bei einem ManualObject automatisch das OcclusionCulling mit eingebaut ist, da es ja immer einzelne Kantenstücke sind, so dass sowieso nur die Kanten gerendert werden die ich auch gerade sehe oder ob ich mir besser für jedes einzelne Mesh ein neues ManualObject anlege, welches ja dann normal mit OcclusionCulling behandelt wird.<br />
<br />
Vielen Dank bereits im Voraus<br />
<br />
Gruß Satari]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[RPG Skellods sucht Mitarbeiter!]]></title>
			<link>http://www.ogre3d.de/forum/showthread.php?tid=321</link>
			<pubDate>Fri, 06 May 2011 15:21:37 +0200</pubDate>
			<guid isPermaLink="false">http://www.ogre3d.de/forum/showthread.php?tid=321</guid>
			<description><![CDATA[<div style="text-align: center;"><img src="http://img263.imageshack.us/img263/4513/logocst.png" border="0" alt="[Bild: logocst.png]" /><br />
<span style="font-style: italic;">ein RPG das von einem Team entwickelt wird.</span><br />
<br />
Skellods wurde im September 2010 gegründet. Seitdem arbeiten wir als ein Team zusammen. Hatten schon Erfolge und Errungenschaften. Jedoch haben wir jetzt ein Engine-Wechsel gemacht und fangen teilweise nochmal von Vorne an damit das RPG sauberer und besserer wird. Wir sind gerade mitten in der Produktion und suchen eifrige, tatkräftige, lernfähige und erfahrene Leute die uns dabei helfen möchten.<br />
<br />
Das ganze ist <span style="text-decoration: underline;">OHNE</span> Bezahlung, da wir das alles an Spaß und Lern Effekt an der Sache machen. Das heißt dieses Projekt bezahlt keinen der Mitarbeiter zumindest während der Produktion, wenn das Spiel fertig ist und man wirklich daran verdient werden sicherlich auch die Team-Mietglieder daran verdienen wobei die Fertigstellung noch nicht in absehbarer Zeit sein wird.<br />
<br />
Zum Spiel selbst:<br />
Die Atmosphäre ist mittelalterlich fantastisch. Trailergeschichte: Die Menschen in unserer Spielwelt leben ein eher friedliches Leben. Bis auf kleine Streitereien gibt es keinen Grund, sich Sorgen zu machen. Jeder genießt das Leben. Doch im Hintergrund spielt sich etwas großes ab. Etwas, woran niemand im Traum denken würde. Ein Krieg. Zwischen den 2 Gegensätzlichsten Polen, die sich die Menschen vorstellen können. Zwischen Himmel und Hölle! Aber noch weniger, als die Menschen ahnen, dass solch ein Krieg herrscht, ahnen die beiden Instanzen, dass sie bald mehr als ihnen lieb ist auf einen Erdenbewohner angewiesen sein werden.</div>
<br />
<br />
<br />
<span style="font-weight: bold;"><span style="font-size: large;">Stellen und Bereiche die benötigt werden:</span></span><br />
<br />
<span style="font-style: italic;">(Aufgabenbereiche und Voraussetzungen)</span><br />
<br />
<span style="font-weight: bold;">Artists:</span><br />
Skizzen, Zeichnungen, Vorlagen, Artworks	<br />
<br />
<span style="font-weight: bold;">Programmierer:</span><br />
C++/Delphi: non-.NET(/non-VCL) Kenntnisse<br />
KEIN .NET	<br />
optional: Erfahrungen mit der OGRE 3D Engine (keine Pflicht)<br />
<br />
<span style="font-weight: bold;">Scripters:</span><br />
HTML/CSS/JS, PHP, evtl. Perl, evtl. Java, evtl. Python	<br />
<br />
<span style="font-weight: bold;">Designer:</span><br />
Oberflächen, Texturen/Skins, GUI Design, Homepage<br />
<br />
<span style="font-weight: bold;">Storywriter:</span><br />
Story, Quests, Events, semi-final Design Festlegung, Gutes Deutsch<br />
<br />
<span style="font-weight: bold;">Promoter:</span><br />
Gutes Deutsch, den richtigen Blick für das Kreative und geordnete,<br />
optional: andere Sprachen wie Englisch, Französisch etc..<br />
<br />
<span style="font-weight: bold;">DB Wartung:</span><br />
Aufräumen - überall. MySQL DB, Dateien Verwalten (Liste führen"wo,wofür,was..."), Stand der Dinge im Blick halten, PR, Support,...	<br />
<br />
<span style="font-weight: bold;">Modellierer:</span><br />
Meshes, Landscape, Charakter Modellieren, Gegenstände, Architektur,<br />
<br />
<span style="font-weight: bold;">Soundtechniker:</span><br />
Musikstücke, OSTs... Wir suchen Musiker, Bands, etc. Eure Chance auf etwas Werbung für euch! Kostenlos!<br />
<br />
<span style="font-weight: bold;">Bereichsleiter:</span><br />
Schon länger im Team und schon gezeigt haben was man drauf hat.<br />
<br />
<br />
<span style="font-weight: bold;"><span style="font-size: large;">Fortschritte:</span></span><br />
<br />
-eigener Mapeditor: Der DAWN Editor von Skellods selbst.<br />
Mehr Infos dazu:<br />
<br />
<br />
<br />
<img src="http://skellods.de/graphics/1.png" border="0" alt="[Bild: 1.png]" /><br />
<br />
<br />
Für eine erfolgreiche Arbeit braucht man passendes Werkzeug. Da TrueVision bzw jetzt die neue Engine OGRE 3D keinerlei Mapeditoren mitliefert und im Internet auch nichts wirklich brauchbares zu finden ist müssen wir auch diesen Editor selber basteln. <br />
Features:<br />
<ul>
<li>Sämmtliche unterstützte Mapformate können genutzt werden (TVS, Hightmap)</li>
<li>Terrainbearbeitung</li>
<li>Texturing</li>
<li>Laden von Meshes und Actors</li>
<li>Positionierung von Meshes und Actors</li>
<li>Path Erstellung</li>
<li>Triggers</li>
<li>Sprite Generatoren</li>
<li>Lichtquellen</li>
<li>Wasser</li>
<li>Skybox</li>
<li>Materials</li>
<li>Physics (Newton oder PhysX muss noch entschieden werden)</li>
<li>Portals</li>
<li>etc etc etc.....<br />
</li></ul>
<br />
- Artistic Work/Zeichnungen<br />
Mehr Infos:<br />
<br />
<img src="http://img26.imageshack.us/img26/7830/monsterwq.jpg" border="0" alt="[Bild: monsterwq.jpg]" /><br />
<img src="http://img715.imageshack.us/img715/3974/dolchklein.jpg" border="0" alt="[Bild: dolchklein.jpg]" /><br />
<img src="http://img860.imageshack.us/img860/3079/image0o.jpg" border="0" alt="[Bild: image0o.jpg]" /><br />
<br />
<br />
- Modellierung <br />
Mehr Infos:<br />
<br />
<img src="http://img200.imageshack.us/img200/3653/sule.jpg" border="0" alt="[Bild: sule.jpg]" /><br />
<img src="http://img864.imageshack.us/img864/608/haus.png" border="0" alt="[Bild: haus.png]" /><br />
<br />
<br />
- erste Ideen zur Weiterführung der Story bestehen auch schon.<br />
<br />
<br />
<span style="font-weight: bold;"><span style="font-size: large;">Kontaktmöglichkeiten:</span></span><br />
<br />
<br />
Na, Interesse geweckt?<br />
<span style="font-weight: bold;">Für weitere Informationen </span><br />
<a href="http://www.skellods.de/" target="_blank">Homepage</a><br />
<br />
Bewerbung im <a href="http://www.skellods.de/bbs" target="_blank">Forum</a> oder hier an mich schreiben.<br />
<br />
Unter Skype: reich_michael oder minecrawlerx (das bin ich und Marco)]]></description>
			<content:encoded><![CDATA[<div style="text-align: center;"><img src="http://img263.imageshack.us/img263/4513/logocst.png" border="0" alt="[Bild: logocst.png]" /><br />
<span style="font-style: italic;">ein RPG das von einem Team entwickelt wird.</span><br />
<br />
Skellods wurde im September 2010 gegründet. Seitdem arbeiten wir als ein Team zusammen. Hatten schon Erfolge und Errungenschaften. Jedoch haben wir jetzt ein Engine-Wechsel gemacht und fangen teilweise nochmal von Vorne an damit das RPG sauberer und besserer wird. Wir sind gerade mitten in der Produktion und suchen eifrige, tatkräftige, lernfähige und erfahrene Leute die uns dabei helfen möchten.<br />
<br />
Das ganze ist <span style="text-decoration: underline;">OHNE</span> Bezahlung, da wir das alles an Spaß und Lern Effekt an der Sache machen. Das heißt dieses Projekt bezahlt keinen der Mitarbeiter zumindest während der Produktion, wenn das Spiel fertig ist und man wirklich daran verdient werden sicherlich auch die Team-Mietglieder daran verdienen wobei die Fertigstellung noch nicht in absehbarer Zeit sein wird.<br />
<br />
Zum Spiel selbst:<br />
Die Atmosphäre ist mittelalterlich fantastisch. Trailergeschichte: Die Menschen in unserer Spielwelt leben ein eher friedliches Leben. Bis auf kleine Streitereien gibt es keinen Grund, sich Sorgen zu machen. Jeder genießt das Leben. Doch im Hintergrund spielt sich etwas großes ab. Etwas, woran niemand im Traum denken würde. Ein Krieg. Zwischen den 2 Gegensätzlichsten Polen, die sich die Menschen vorstellen können. Zwischen Himmel und Hölle! Aber noch weniger, als die Menschen ahnen, dass solch ein Krieg herrscht, ahnen die beiden Instanzen, dass sie bald mehr als ihnen lieb ist auf einen Erdenbewohner angewiesen sein werden.</div>
<br />
<br />
<br />
<span style="font-weight: bold;"><span style="font-size: large;">Stellen und Bereiche die benötigt werden:</span></span><br />
<br />
<span style="font-style: italic;">(Aufgabenbereiche und Voraussetzungen)</span><br />
<br />
<span style="font-weight: bold;">Artists:</span><br />
Skizzen, Zeichnungen, Vorlagen, Artworks	<br />
<br />
<span style="font-weight: bold;">Programmierer:</span><br />
C++/Delphi: non-.NET(/non-VCL) Kenntnisse<br />
KEIN .NET	<br />
optional: Erfahrungen mit der OGRE 3D Engine (keine Pflicht)<br />
<br />
<span style="font-weight: bold;">Scripters:</span><br />
HTML/CSS/JS, PHP, evtl. Perl, evtl. Java, evtl. Python	<br />
<br />
<span style="font-weight: bold;">Designer:</span><br />
Oberflächen, Texturen/Skins, GUI Design, Homepage<br />
<br />
<span style="font-weight: bold;">Storywriter:</span><br />
Story, Quests, Events, semi-final Design Festlegung, Gutes Deutsch<br />
<br />
<span style="font-weight: bold;">Promoter:</span><br />
Gutes Deutsch, den richtigen Blick für das Kreative und geordnete,<br />
optional: andere Sprachen wie Englisch, Französisch etc..<br />
<br />
<span style="font-weight: bold;">DB Wartung:</span><br />
Aufräumen - überall. MySQL DB, Dateien Verwalten (Liste führen"wo,wofür,was..."), Stand der Dinge im Blick halten, PR, Support,...	<br />
<br />
<span style="font-weight: bold;">Modellierer:</span><br />
Meshes, Landscape, Charakter Modellieren, Gegenstände, Architektur,<br />
<br />
<span style="font-weight: bold;">Soundtechniker:</span><br />
Musikstücke, OSTs... Wir suchen Musiker, Bands, etc. Eure Chance auf etwas Werbung für euch! Kostenlos!<br />
<br />
<span style="font-weight: bold;">Bereichsleiter:</span><br />
Schon länger im Team und schon gezeigt haben was man drauf hat.<br />
<br />
<br />
<span style="font-weight: bold;"><span style="font-size: large;">Fortschritte:</span></span><br />
<br />
-eigener Mapeditor: Der DAWN Editor von Skellods selbst.<br />
Mehr Infos dazu:<br />
<br />
<br />
<br />
<img src="http://skellods.de/graphics/1.png" border="0" alt="[Bild: 1.png]" /><br />
<br />
<br />
Für eine erfolgreiche Arbeit braucht man passendes Werkzeug. Da TrueVision bzw jetzt die neue Engine OGRE 3D keinerlei Mapeditoren mitliefert und im Internet auch nichts wirklich brauchbares zu finden ist müssen wir auch diesen Editor selber basteln. <br />
Features:<br />
<ul>
<li>Sämmtliche unterstützte Mapformate können genutzt werden (TVS, Hightmap)</li>
<li>Terrainbearbeitung</li>
<li>Texturing</li>
<li>Laden von Meshes und Actors</li>
<li>Positionierung von Meshes und Actors</li>
<li>Path Erstellung</li>
<li>Triggers</li>
<li>Sprite Generatoren</li>
<li>Lichtquellen</li>
<li>Wasser</li>
<li>Skybox</li>
<li>Materials</li>
<li>Physics (Newton oder PhysX muss noch entschieden werden)</li>
<li>Portals</li>
<li>etc etc etc.....<br />
</li></ul>
<br />
- Artistic Work/Zeichnungen<br />
Mehr Infos:<br />
<br />
<img src="http://img26.imageshack.us/img26/7830/monsterwq.jpg" border="0" alt="[Bild: monsterwq.jpg]" /><br />
<img src="http://img715.imageshack.us/img715/3974/dolchklein.jpg" border="0" alt="[Bild: dolchklein.jpg]" /><br />
<img src="http://img860.imageshack.us/img860/3079/image0o.jpg" border="0" alt="[Bild: image0o.jpg]" /><br />
<br />
<br />
- Modellierung <br />
Mehr Infos:<br />
<br />
<img src="http://img200.imageshack.us/img200/3653/sule.jpg" border="0" alt="[Bild: sule.jpg]" /><br />
<img src="http://img864.imageshack.us/img864/608/haus.png" border="0" alt="[Bild: haus.png]" /><br />
<br />
<br />
- erste Ideen zur Weiterführung der Story bestehen auch schon.<br />
<br />
<br />
<span style="font-weight: bold;"><span style="font-size: large;">Kontaktmöglichkeiten:</span></span><br />
<br />
<br />
Na, Interesse geweckt?<br />
<span style="font-weight: bold;">Für weitere Informationen </span><br />
<a href="http://www.skellods.de/" target="_blank">Homepage</a><br />
<br />
Bewerbung im <a href="http://www.skellods.de/bbs" target="_blank">Forum</a> oder hier an mich schreiben.<br />
<br />
Unter Skype: reich_michael oder minecrawlerx (das bin ich und Marco)]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Eine Einfache Frage an alle OGRE/Cinema 4D User]]></title>
			<link>http://www.ogre3d.de/forum/showthread.php?tid=320</link>
			<pubDate>Fri, 06 May 2011 00:19:25 +0200</pubDate>
			<guid isPermaLink="false">http://www.ogre3d.de/forum/showthread.php?tid=320</guid>
			<description><![CDATA[Eine Einfache Frage an alle OGRE/Cinema 4D User: <a href="http://forum.coding-crew.de/index.php?page=Thread&amp;threadID=13" target="_blank">http://forum.coding-crew.de/index.php?pa...hreadID=13</a>]]></description>
			<content:encoded><![CDATA[Eine Einfache Frage an alle OGRE/Cinema 4D User: <a href="http://forum.coding-crew.de/index.php?page=Thread&amp;threadID=13" target="_blank">http://forum.coding-crew.de/index.php?pa...hreadID=13</a>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[c++ erster hack! Funzt nicht ]]></title>
			<link>http://www.ogre3d.de/forum/showthread.php?tid=319</link>
			<pubDate>Thu, 28 Apr 2011 14:31:57 +0200</pubDate>
			<guid isPermaLink="false">http://www.ogre3d.de/forum/showthread.php?tid=319</guid>
			<description><![CDATA[<img src="images/smilies/sad.gif" style="vertical-align: middle;" border="0" alt="Sad" title="Sad" /> Hallo, ich wollte eben meinen ersten Warrock hack erstellen, aber wenn ich fertig bin und f7 drücke kommt das: PLS Help!<br />
<br />
1&gt;------ Erstellen gestartet: Projekt: warrock test1, Konfiguration: Debug Win32 ------<br />
1&gt;  warrock test2.cpp<br />
1&gt;c:\users\eti\documents\visual studio 2010\projects\warrock test1\warrock test1\warrock test2.cpp(15): error C2065: 'Z_Offset': nichtdeklarierter Bezeichner<br />
1&gt;c:\users\eti\documents\visual studio 2010\projects\warrock test1\warrock test1\warrock test2.cpp(24): error C2065: 'NFD_Offset': nichtdeklarierter Bezeichner<br />
1&gt;c:\users\eti\documents\visual studio 2010\projects\warrock test1\warrock test1\warrock test2.cpp(28): error C2601: 'TheHacks': Lokale Funktionsdefinitionen sind unzulässig<br />
1&gt;          c:\users\eti\documents\visual studio 2010\projects\warrock test1\warrock test1\warrock test2.cpp(26): Diese Zeile enthält eine '{', die keine Entsprechung hat<br />
1&gt;c:\users\eti\documents\visual studio 2010\projects\warrock test1\warrock test1\warrock test2.cpp(37): error C2601: 'DllMain': Lokale Funktionsdefinitionen sind unzulässig<br />
1&gt;          c:\users\eti\documents\visual studio 2010\projects\warrock test1\warrock test1\warrock test2.cpp(26): Diese Zeile enthält eine '{', die keine Entsprechung hat<br />
1&gt;c:\users\eti\documents\visual studio 2010\projects\warrock test1\warrock test1\warrock test2.cpp(51): fatal error C1075: Dateiende erreicht, bevor das zugehörige Element für das linke Element Klammer "{" in "c:\users\eti\documents\visual studio 2010\projects\warrock test1\warrock test1\warrock test2.cpp(25)" gefunden wurde<br />
========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========]]></description>
			<content:encoded><![CDATA[<img src="images/smilies/sad.gif" style="vertical-align: middle;" border="0" alt="Sad" title="Sad" /> Hallo, ich wollte eben meinen ersten Warrock hack erstellen, aber wenn ich fertig bin und f7 drücke kommt das: PLS Help!<br />
<br />
1&gt;------ Erstellen gestartet: Projekt: warrock test1, Konfiguration: Debug Win32 ------<br />
1&gt;  warrock test2.cpp<br />
1&gt;c:\users\eti\documents\visual studio 2010\projects\warrock test1\warrock test1\warrock test2.cpp(15): error C2065: 'Z_Offset': nichtdeklarierter Bezeichner<br />
1&gt;c:\users\eti\documents\visual studio 2010\projects\warrock test1\warrock test1\warrock test2.cpp(24): error C2065: 'NFD_Offset': nichtdeklarierter Bezeichner<br />
1&gt;c:\users\eti\documents\visual studio 2010\projects\warrock test1\warrock test1\warrock test2.cpp(28): error C2601: 'TheHacks': Lokale Funktionsdefinitionen sind unzulässig<br />
1&gt;          c:\users\eti\documents\visual studio 2010\projects\warrock test1\warrock test1\warrock test2.cpp(26): Diese Zeile enthält eine '{', die keine Entsprechung hat<br />
1&gt;c:\users\eti\documents\visual studio 2010\projects\warrock test1\warrock test1\warrock test2.cpp(37): error C2601: 'DllMain': Lokale Funktionsdefinitionen sind unzulässig<br />
1&gt;          c:\users\eti\documents\visual studio 2010\projects\warrock test1\warrock test1\warrock test2.cpp(26): Diese Zeile enthält eine '{', die keine Entsprechung hat<br />
1&gt;c:\users\eti\documents\visual studio 2010\projects\warrock test1\warrock test1\warrock test2.cpp(51): fatal error C1075: Dateiende erreicht, bevor das zugehörige Element für das linke Element Klammer "{" in "c:\users\eti\documents\visual studio 2010\projects\warrock test1\warrock test1\warrock test2.cpp(25)" gefunden wurde<br />
========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[ratlos bei Fehler]]></title>
			<link>http://www.ogre3d.de/forum/showthread.php?tid=318</link>
			<pubDate>Wed, 27 Apr 2011 16:28:57 +0200</pubDate>
			<guid isPermaLink="false">http://www.ogre3d.de/forum/showthread.php?tid=318</guid>
			<description><![CDATA[Ich bin gerade dabei, das Basic-Tutorial auf der Ogre Wiki Seite durchzumachen.<br />
Bei Kapitel 3(Terrain, Sky, and Fog) habe ich jetzt einen Fehler, bei dem mir nichteinmal Google irgendein Ergebnis liefert-.-<br />
Ich verwende Visual Studio Express 2008.<br />
<br />
1&gt;BasicTutorial3.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: __thiscall BasicTutorial3::BasicTutorial3(void)" (??0BasicTutorial3@@QAE@XZ)" in Funktion "_WinMain@16".<br />
<br />
Ich würde mich über eine Lösung, auch über eine Erklärung des Fehlers sehr Freuen.<br />
<br />
mfg Fsteff<br />
----------------------------------------------------------<br />
Edit:<br />
Diesen Fehler habe ich bereits behoben, neuer Fehler weiter unten]]></description>
			<content:encoded><![CDATA[Ich bin gerade dabei, das Basic-Tutorial auf der Ogre Wiki Seite durchzumachen.<br />
Bei Kapitel 3(Terrain, Sky, and Fog) habe ich jetzt einen Fehler, bei dem mir nichteinmal Google irgendein Ergebnis liefert-.-<br />
Ich verwende Visual Studio Express 2008.<br />
<br />
1&gt;BasicTutorial3.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: __thiscall BasicTutorial3::BasicTutorial3(void)" (??0BasicTutorial3@@QAE@XZ)" in Funktion "_WinMain@16".<br />
<br />
Ich würde mich über eine Lösung, auch über eine Erklärung des Fehlers sehr Freuen.<br />
<br />
mfg Fsteff<br />
----------------------------------------------------------<br />
Edit:<br />
Diesen Fehler habe ich bereits behoben, neuer Fehler weiter unten]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Links zu alten Tutorials ... bitte vermerken]]></title>
			<link>http://www.ogre3d.de/forum/showthread.php?tid=314</link>
			<pubDate>Sat, 16 Apr 2011 19:42:56 +0200</pubDate>
			<guid isPermaLink="false">http://www.ogre3d.de/forum/showthread.php?tid=314</guid>
			<description><![CDATA[Ich habe auf der Seite von ogre3d.de einen Link zu einem Tutorial gefunden und es gleich ausprobiert.<br />
Nach stundenlanger Fehlersuche(-.-, ich *****) habe ich erst bemerkt, dass die Tutorials für alte Versionen von Ogre geschrieben sind...<br />
<br />
Wäre gut, wenn das jemand bei der Beschreibung vermerken würde(natürlich jemand,der die Rechte dazu hat), damit nicht noch jemand das selbe Problem hat wie ich und sich furchtbar ärgert...<br />
<br />
mfg Fsteff]]></description>
			<content:encoded><![CDATA[Ich habe auf der Seite von ogre3d.de einen Link zu einem Tutorial gefunden und es gleich ausprobiert.<br />
Nach stundenlanger Fehlersuche(-.-, ich *****) habe ich erst bemerkt, dass die Tutorials für alte Versionen von Ogre geschrieben sind...<br />
<br />
Wäre gut, wenn das jemand bei der Beschreibung vermerken würde(natürlich jemand,der die Rechte dazu hat), damit nicht noch jemand das selbe Problem hat wie ich und sich furchtbar ärgert...<br />
<br />
mfg Fsteff]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Objekt jeden Frame rotieren lassen]]></title>
			<link>http://www.ogre3d.de/forum/showthread.php?tid=295</link>
			<pubDate>Sun, 13 Mar 2011 22:11:00 +0100</pubDate>
			<guid isPermaLink="false">http://www.ogre3d.de/forum/showthread.php?tid=295</guid>
			<description><![CDATA[Hallo Leute,<br />
<br />
hab mich kürzlich angefagen in Oger einzuarbeiten.<br />
<br />
Ich hab versucht mittels des "translate" Befehl ein Node (headnode2 bei mir) jeden Frame ein Stüchchen zubewegen.<br />
<br />
Bin aber daran kläglich gescheitert und hab auch nix entsprechendes im Internet gefunden. <br />
<br />
Falls jemand weiss wie das geht oder eine Ahnung hat wo das steht mit mir sagen.<br />
<br />
Danke schon mal im Voraus]]></description>
			<content:encoded><![CDATA[Hallo Leute,<br />
<br />
hab mich kürzlich angefagen in Oger einzuarbeiten.<br />
<br />
Ich hab versucht mittels des "translate" Befehl ein Node (headnode2 bei mir) jeden Frame ein Stüchchen zubewegen.<br />
<br />
Bin aber daran kläglich gescheitert und hab auch nix entsprechendes im Internet gefunden. <br />
<br />
Falls jemand weiss wie das geht oder eine Ahnung hat wo das steht mit mir sagen.<br />
<br />
Danke schon mal im Voraus]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Cinema 4D -> OGRE Mesh Exporter]]></title>
			<link>http://www.ogre3d.de/forum/showthread.php?tid=294</link>
			<pubDate>Sun, 13 Mar 2011 00:07:07 +0100</pubDate>
			<guid isPermaLink="false">http://www.ogre3d.de/forum/showthread.php?tid=294</guid>
			<description><![CDATA[An alle die mit Cinema 4D und OGRE arbeiten: Wir haben einen Mesh exporter geschrieben. <br />
<br />
Er exportiert Meshgeometrien, Skeleton und Skeleton-animation als XML-Files was ihn Versionsunabhänig macht. Einstellungen können natürlich als Presets gespeichert werden.<br />
<br />
An ein paar zusätzlichen Features arbeiten wir gerade noch:<br />
- Materials<br />
- Keyframe-animation<br />
- Deformer (Skin-animation)<br />
<br />
<a href="http://www.coding-crew.de/d-c4d-ogre.html" target="_blank">http://www.coding-crew.de/d-c4d-ogre.html</a><br />
<br />
Feedback immer gerne <img src="images/smilies/smile.gif" style="vertical-align: middle;" border="0" alt="Smile" title="Smile" />]]></description>
			<content:encoded><![CDATA[An alle die mit Cinema 4D und OGRE arbeiten: Wir haben einen Mesh exporter geschrieben. <br />
<br />
Er exportiert Meshgeometrien, Skeleton und Skeleton-animation als XML-Files was ihn Versionsunabhänig macht. Einstellungen können natürlich als Presets gespeichert werden.<br />
<br />
An ein paar zusätzlichen Features arbeiten wir gerade noch:<br />
- Materials<br />
- Keyframe-animation<br />
- Deformer (Skin-animation)<br />
<br />
<a href="http://www.coding-crew.de/d-c4d-ogre.html" target="_blank">http://www.coding-crew.de/d-c4d-ogre.html</a><br />
<br />
Feedback immer gerne <img src="images/smilies/smile.gif" style="vertical-align: middle;" border="0" alt="Smile" title="Smile" />]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Espadon Online: MMORPG in der Entwicklung sucht Mitarbeiter]]></title>
			<link>http://www.ogre3d.de/forum/showthread.php?tid=293</link>
			<pubDate>Fri, 11 Mar 2011 15:05:46 +0100</pubDate>
			<guid isPermaLink="false">http://www.ogre3d.de/forum/showthread.php?tid=293</guid>
			<description><![CDATA[<div style="text-align: center;"><img src="http://upload.espadon-online.eu/uploads/1299916966.png" border="0" alt="[Bild: 1299916966.png]" /><br />
<span style="font-style: italic;">Espadon Online, das MMORPG im finsteren Mittelalter des rauen Norddeutschlands. Das abendländische Schisma spaltet das Christentum und die Hanse ist auf ihrem wirtschaftlichen Höhepunkt angelangt.</span></div>
<br />
Seit fast 3 Jahren ist "Espadon Online" nun in der Entwicklung und knapp 30 Mitarbeiter verfolgen das Ziel ein eigenständiges, kostenloses Mittelalter-MMORPG zu erschaffen.<br />
Immer sind wir auf der Suche nach neuen, motivierten Helfern, die mit uns das Projekt gemeinsam voranbringen wollen.<br />
<br />
Da dies hier ein Programmierer-Forum ist, möchte ich hier gezielt die Programmierer ansprechen. Die anderen Bereiche möchte ich dennoch kurz vorstellen.<br />
    Was wir von Dir (als Programmierer) erwarten:<br />
   <ul>
<li>Erfahrungen in C++ Programmierung</li>
<li>Grundlegende Erfahrungen mit STL</li>
<li>optional: Erfahrungen mit der OGRE 3D Engine (keine Pflicht)</li></ul>
    Besonders gefragt sind vor allem Programmierer, die sich auch in der Shaderprogrammierung (für Wasser, Billboards, etc.) auskennen oder Lust haben sich mit diesem Aspekt genauer zu beschäftigen.<br />
<br />
    In jedem Bereich gibt es einen - auf Halbjahresbasis gewählten - Bereichsleiter, der für die Aufgabenverteilung in seinem Bereich zuständig ist. Die Programmierer bei uns arbeiten auftragsorientiert, d.h. es gibt meistens direkte Anweisungen was zu tun ist ("Wir benötigen Modul XY mit den Funktionen A und B"), Eigeninitiative ist natürlich auch immer sehr gerne gesehen. Der Code wird dann mittels SVN "ausgetauscht".<br />
    Wir besitzen außerdem eine eigene Wiki, die Einsteigertipps, Coderichtlinien und Dokumentationen enthält.<br />
<br />
    Die meisten Programmierer arbeiten mit dem (kostenlosen) Programm "Visual Studio 2010 Express", als Grafikengine verwenden wir die Ogre3D Engine, sowie wxWidget und MyGUI als GUI Librarys für Editor und Ingame.<br />
<br />
    Unser selbstgeschriebener Welteditor ist in seiner ersten Version fast einsatzbereit. Als Nächstes geht es dann an die konkreten Server und Client Strukturen, deren Logik gerade auf Papier gebracht wird und bereits in einer ersten Testversion einsatzbereit ist.<br />
<br />
<div style="text-align: center;"><img src="http://upload.espadon-online.eu/uploads/1299872772.jpg" border="0" alt="[Bild: 1299872772.jpg]" /><br />
(Eine im Welteditor zusammen gebaute Stadtszene)</div>
<br />
    <span style="text-decoration: underline;">Die anderen Bereiche im Überblick:</span><br />
   <ul>
<li>Gamedesigner<br />
   <ul>Die Gamedesigner sind hauptsächlich für die endgültige Stimmung im Spiel verantwortlich. Sie sind dafür zuständig, über damalige Gebäude zu recherchieren, um den 3D-Designern eine Grundlage für die Objekterstellung zu bieten.</li></ul></li>
<li>2D-Bereich<br />
   <ul>Unsere 2D-Designer erstellen Texturen, Artworks und Skizzen, die als Vorlage für den 3D-Bereich dienen.</li></ul></li>
<li>3D-Bereich<br />
   <ul>Der 3D-Bereich erstellt - wie der Name schon sagt - alle 3D Objekte. Vom Haus über das Huhn bis zum Spielercharakter.</li></ul></li>
<li>PR-Bereich<br />
   <ul>Der PR Bereich ist z.B. für diese Werbung hier sowie die Aktualität der Homepage verantwortlich.</li></ul></li>
<li>Musik/SFX<br />
   <ul>Die Musik / SFX Abteilung ist für die musikalische Hinterlegung, sowie die Erstellung von allen Sounds zuständig.</li></ul>
</li></ul>
(Eine genaue Auflistung der Anforderungen der anderen Bereiche findet Ihr <a href="http://www.espadon-online.eu/artikel/12_Wir%20suchen!/" target="_blank">hier</a>.)<br />
<br />
    Interesse geweckt?<br />
    Dann besucht unsere <a href="http://www.espadon-online.eu" target="_blank">Homepage</a> und/oder bewerbt Euch im <a href="http://forum.espadon-online.eu/" target="_blank">Forum</a>.<br />
<br />
    Mit freundlichen Grüßen,<br />
    euer Espadon-Team]]></description>
			<content:encoded><![CDATA[<div style="text-align: center;"><img src="http://upload.espadon-online.eu/uploads/1299916966.png" border="0" alt="[Bild: 1299916966.png]" /><br />
<span style="font-style: italic;">Espadon Online, das MMORPG im finsteren Mittelalter des rauen Norddeutschlands. Das abendländische Schisma spaltet das Christentum und die Hanse ist auf ihrem wirtschaftlichen Höhepunkt angelangt.</span></div>
<br />
Seit fast 3 Jahren ist "Espadon Online" nun in der Entwicklung und knapp 30 Mitarbeiter verfolgen das Ziel ein eigenständiges, kostenloses Mittelalter-MMORPG zu erschaffen.<br />
Immer sind wir auf der Suche nach neuen, motivierten Helfern, die mit uns das Projekt gemeinsam voranbringen wollen.<br />
<br />
Da dies hier ein Programmierer-Forum ist, möchte ich hier gezielt die Programmierer ansprechen. Die anderen Bereiche möchte ich dennoch kurz vorstellen.<br />
    Was wir von Dir (als Programmierer) erwarten:<br />
   <ul>
<li>Erfahrungen in C++ Programmierung</li>
<li>Grundlegende Erfahrungen mit STL</li>
<li>optional: Erfahrungen mit der OGRE 3D Engine (keine Pflicht)</li></ul>
    Besonders gefragt sind vor allem Programmierer, die sich auch in der Shaderprogrammierung (für Wasser, Billboards, etc.) auskennen oder Lust haben sich mit diesem Aspekt genauer zu beschäftigen.<br />
<br />
    In jedem Bereich gibt es einen - auf Halbjahresbasis gewählten - Bereichsleiter, der für die Aufgabenverteilung in seinem Bereich zuständig ist. Die Programmierer bei uns arbeiten auftragsorientiert, d.h. es gibt meistens direkte Anweisungen was zu tun ist ("Wir benötigen Modul XY mit den Funktionen A und B"), Eigeninitiative ist natürlich auch immer sehr gerne gesehen. Der Code wird dann mittels SVN "ausgetauscht".<br />
    Wir besitzen außerdem eine eigene Wiki, die Einsteigertipps, Coderichtlinien und Dokumentationen enthält.<br />
<br />
    Die meisten Programmierer arbeiten mit dem (kostenlosen) Programm "Visual Studio 2010 Express", als Grafikengine verwenden wir die Ogre3D Engine, sowie wxWidget und MyGUI als GUI Librarys für Editor und Ingame.<br />
<br />
    Unser selbstgeschriebener Welteditor ist in seiner ersten Version fast einsatzbereit. Als Nächstes geht es dann an die konkreten Server und Client Strukturen, deren Logik gerade auf Papier gebracht wird und bereits in einer ersten Testversion einsatzbereit ist.<br />
<br />
<div style="text-align: center;"><img src="http://upload.espadon-online.eu/uploads/1299872772.jpg" border="0" alt="[Bild: 1299872772.jpg]" /><br />
(Eine im Welteditor zusammen gebaute Stadtszene)</div>
<br />
    <span style="text-decoration: underline;">Die anderen Bereiche im Überblick:</span><br />
   <ul>
<li>Gamedesigner<br />
   <ul>Die Gamedesigner sind hauptsächlich für die endgültige Stimmung im Spiel verantwortlich. Sie sind dafür zuständig, über damalige Gebäude zu recherchieren, um den 3D-Designern eine Grundlage für die Objekterstellung zu bieten.</li></ul></li>
<li>2D-Bereich<br />
   <ul>Unsere 2D-Designer erstellen Texturen, Artworks und Skizzen, die als Vorlage für den 3D-Bereich dienen.</li></ul></li>
<li>3D-Bereich<br />
   <ul>Der 3D-Bereich erstellt - wie der Name schon sagt - alle 3D Objekte. Vom Haus über das Huhn bis zum Spielercharakter.</li></ul></li>
<li>PR-Bereich<br />
   <ul>Der PR Bereich ist z.B. für diese Werbung hier sowie die Aktualität der Homepage verantwortlich.</li></ul></li>
<li>Musik/SFX<br />
   <ul>Die Musik / SFX Abteilung ist für die musikalische Hinterlegung, sowie die Erstellung von allen Sounds zuständig.</li></ul>
</li></ul>
(Eine genaue Auflistung der Anforderungen der anderen Bereiche findet Ihr <a href="http://www.espadon-online.eu/artikel/12_Wir%20suchen!/" target="_blank">hier</a>.)<br />
<br />
    Interesse geweckt?<br />
    Dann besucht unsere <a href="http://www.espadon-online.eu" target="_blank">Homepage</a> und/oder bewerbt Euch im <a href="http://forum.espadon-online.eu/" target="_blank">Forum</a>.<br />
<br />
    Mit freundlichen Grüßen,<br />
    euer Espadon-Team]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[16 Jähriger sucht Freund ...]]></title>
			<link>http://www.ogre3d.de/forum/showthread.php?tid=292</link>
			<pubDate>Mon, 07 Mar 2011 05:03:42 +0100</pubDate>
			<guid isPermaLink="false">http://www.ogre3d.de/forum/showthread.php?tid=292</guid>
			<description><![CDATA[Guten Morgen,<br />
<br />
zu erst einmal muss ich mich für den Titel entschuldigen aber ich fand ihn ganz witzig, da er auch ein wenig zutrifft. Dann würde ich mich gerne vorstellen:<br />
<br />
Ich bin 16 Jahre alt kommt aus RLP und bin begeisterter Programmierer. Angefangen hat das mit etwa 11, wo ich anfing, mich für Security im IT-Bereich zu interessieren. Dort wurde mir schnell klar das Ich eine Programmiersprache lernen möchte, um ein paar Ideen etc. umsetzen zu können. Damals hatte ich mich für Visual Basic .NET entschieden welche ich dann auch gelernt habe. Danach bin ich mehr oder weniger auf C# umgestiegen. Dort habe ich mir aber nur die Syntax und die Grundlagen angeschaut. So bin ich dann langsam wieder auf Visual Basic .NET umgependelt. Kurzfristig habe ich auch immer mal wieder in C++ herein geschnuppert. Und so wurde ich dann "Programmierer" und hatte diverse Projekte, die ich privat verkaufte. Dann fing ich mich immer mehr und mehr für die Spiele Entwicklung zu interessieren und schaute mir das ganze Mal näher an. Zuerst habe ich ein bisschen mit XNA und Visual Basic .NET herumgespielt bin aber daran gescheitert das Es keine weiter Führenden Tuturials für Visual Basic .NET gab. Und dann habe ich nach Alternativen gesucht und bin auf Blitz3D gestoßen, um genau zu sein gestern. Blitz3D ist wirklich klasse, ich hatte nach wenigen Stunden schon erste Erfolgserlebnisse und konnte kleine Spiele programmieren. Aber leider ist Blitz3D nun schon sehr veraltet usw. und ich möchte gerne etwas lernen das zukunftsorientiert ist und mir für meine späteren Pläne wirklich was bringt. Sicherlich war Blitz3D keine Zeitverschwendung, da es mir solche grundlegenden Sachen wie Meshs etc. erklärt hat. Um noch mal auf meine Pläne zurückzukommen, es ist ein fester Traum von mir später, wenn ich volljährig bin, eine eigene kleine Firma zu Gründen die sich mit der Entwicklung von Spielen befasst. Mein großes Vorbild ist da Notch(Der Programmierer von MineCraft). Aber wessen Traum ist das nicht <img src="images/smilies/rolleyes.gif" style="vertical-align: middle;" border="0" alt="Rolleyes" title="Rolleyes" /> . Habe mich vor langer Zeit auch mal ein bisschen mit Modellierung beschäftigt und mit Cinema4D gearbeitet. <br />
<br />
Nun ja soviel zu meiner Person. Zurück zum Thema. Es würde mich freuen, wenn ich jemanden kennenlernen könnte, der sich mit Ogre und der Spieleentwicklung auskennt und sich vll. mal mit mir unterhalten könnte und mir die Grundsachen vll. beibringen könnte. Ich meine jetzt nicht direkt Grundlagen von Ogre sondern von der Spiele Entwicklung allgemein. Und würde ich mich dann freuen wenn ich mal einen Ansprechpartner habe in dem Bereich.<br />
<br />
Welche Kontakt Möglichkeiten ich mal so in den Raum schmeißen könnte wären:<br />
ICQ: 315-668 und Skype: i-intelcore-i <img src="images/smilies/smile.gif" style="vertical-align: middle;" border="0" alt="Smile" title="Smile" /><br />
<br />
Ich würde mich sehr freuen, wenn sich jemand bei mir meldet <img src="images/smilies/smile.gif" style="vertical-align: middle;" border="0" alt="Smile" title="Smile" /><br />
<br />
Mit freundlichen Grüßen,<br />
Series]]></description>
			<content:encoded><![CDATA[Guten Morgen,<br />
<br />
zu erst einmal muss ich mich für den Titel entschuldigen aber ich fand ihn ganz witzig, da er auch ein wenig zutrifft. Dann würde ich mich gerne vorstellen:<br />
<br />
Ich bin 16 Jahre alt kommt aus RLP und bin begeisterter Programmierer. Angefangen hat das mit etwa 11, wo ich anfing, mich für Security im IT-Bereich zu interessieren. Dort wurde mir schnell klar das Ich eine Programmiersprache lernen möchte, um ein paar Ideen etc. umsetzen zu können. Damals hatte ich mich für Visual Basic .NET entschieden welche ich dann auch gelernt habe. Danach bin ich mehr oder weniger auf C# umgestiegen. Dort habe ich mir aber nur die Syntax und die Grundlagen angeschaut. So bin ich dann langsam wieder auf Visual Basic .NET umgependelt. Kurzfristig habe ich auch immer mal wieder in C++ herein geschnuppert. Und so wurde ich dann "Programmierer" und hatte diverse Projekte, die ich privat verkaufte. Dann fing ich mich immer mehr und mehr für die Spiele Entwicklung zu interessieren und schaute mir das ganze Mal näher an. Zuerst habe ich ein bisschen mit XNA und Visual Basic .NET herumgespielt bin aber daran gescheitert das Es keine weiter Führenden Tuturials für Visual Basic .NET gab. Und dann habe ich nach Alternativen gesucht und bin auf Blitz3D gestoßen, um genau zu sein gestern. Blitz3D ist wirklich klasse, ich hatte nach wenigen Stunden schon erste Erfolgserlebnisse und konnte kleine Spiele programmieren. Aber leider ist Blitz3D nun schon sehr veraltet usw. und ich möchte gerne etwas lernen das zukunftsorientiert ist und mir für meine späteren Pläne wirklich was bringt. Sicherlich war Blitz3D keine Zeitverschwendung, da es mir solche grundlegenden Sachen wie Meshs etc. erklärt hat. Um noch mal auf meine Pläne zurückzukommen, es ist ein fester Traum von mir später, wenn ich volljährig bin, eine eigene kleine Firma zu Gründen die sich mit der Entwicklung von Spielen befasst. Mein großes Vorbild ist da Notch(Der Programmierer von MineCraft). Aber wessen Traum ist das nicht <img src="images/smilies/rolleyes.gif" style="vertical-align: middle;" border="0" alt="Rolleyes" title="Rolleyes" /> . Habe mich vor langer Zeit auch mal ein bisschen mit Modellierung beschäftigt und mit Cinema4D gearbeitet. <br />
<br />
Nun ja soviel zu meiner Person. Zurück zum Thema. Es würde mich freuen, wenn ich jemanden kennenlernen könnte, der sich mit Ogre und der Spieleentwicklung auskennt und sich vll. mal mit mir unterhalten könnte und mir die Grundsachen vll. beibringen könnte. Ich meine jetzt nicht direkt Grundlagen von Ogre sondern von der Spiele Entwicklung allgemein. Und würde ich mich dann freuen wenn ich mal einen Ansprechpartner habe in dem Bereich.<br />
<br />
Welche Kontakt Möglichkeiten ich mal so in den Raum schmeißen könnte wären:<br />
ICQ: 315-668 und Skype: i-intelcore-i <img src="images/smilies/smile.gif" style="vertical-align: middle;" border="0" alt="Smile" title="Smile" /><br />
<br />
Ich würde mich sehr freuen, wenn sich jemand bei mir meldet <img src="images/smilies/smile.gif" style="vertical-align: middle;" border="0" alt="Smile" title="Smile" /><br />
<br />
Mit freundlichen Grüßen,<br />
Series]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Basic Tutorial 3 Terrain FPS Problem]]></title>
			<link>http://www.ogre3d.de/forum/showthread.php?tid=291</link>
			<pubDate>Mon, 14 Feb 2011 19:29:44 +0100</pubDate>
			<guid isPermaLink="false">http://www.ogre3d.de/forum/showthread.php?tid=291</guid>
			<description><![CDATA[Hallo Leute,<br />
<br />
ich verzweifel grad ein bisschen. Habe heute angefangen mich mit Ogre3D auseinander zusetzen.<br />
<br />
Bin jetzt bei den Ogre3d.org Basic Tutorials bei "Basic Tutorial 3         Terrain, Sky, and Fog" <a href="http://www.ogre3d.org/tikiwiki/Basic+Tutorial+3&amp;structure=Tutorials" target="_blank">Zum Tutorial</a><br />
<br />
Habe alles so gemacht wie es dort beschrieben wird. Nun zu meinem Problem:<br />
<br />
Wenn ich das im OpenGL Modus starte, habe ich nicht mehr als 4 FPS. Meine Graka: GeForce GTX260. Daran kann es schonmal nicht liegen.<br />
<br />
Wenn ich das Game im DirectX Modus laufen lassen will, stürzt die ganze Geschichte bei mir ab.... und bekomme folgenden fehler:<br />
<br />
Unbehandelte Ausnahme bei 0x0fc2c63e in WaceWars.exe 0xC0000005: Zugriffsverletzung beim Lesen an Position 0xcccccccc<br />
<br />
Und markieren tut er mir in der BaseApplication.cpp:     mRoot-&gt;startRendering();<br />
<br />
Hier mal mein Code:<br />
<br />
RaceWars.cpp<br />
<div class="codeblock">
<div class="title">Code:<br />
</div><div class="body" dir="ltr"><code>/*<br />
-----------------------------------------------------------------------------<br />
Filename:&nbsp;&nbsp;&nbsp;&nbsp;RaceWars.cpp<br />
-----------------------------------------------------------------------------<br />
<br />
<br />
This source file is generated by the<br />
&nbsp;&nbsp; ___&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;__&nbsp;&nbsp;&nbsp;&nbsp;__ _&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_ <br />
&nbsp;&nbsp;/___&#92;__ _ _ __ ___&nbsp;&nbsp;&nbsp;&nbsp;/_&#92;&nbsp;&nbsp;_ __&nbsp;&nbsp;_ __/ / /&#92; &#92; (_)______ _ _ __ __| |<br />
 //&nbsp;&nbsp;// _` | '__/ _ &#92;&nbsp;&nbsp;//_&#92;&#92;| '_ &#92;| '_ &#92; &#92;/&nbsp;&nbsp;&#92;/ / |_&nbsp;&nbsp;/ _` | '__/ _` |<br />
/ &#92;_// (_| | | |&nbsp;&nbsp;__/ /&nbsp;&nbsp;_&nbsp;&nbsp;&#92; |_) | |_) &#92;&nbsp;&nbsp;/&#92;&nbsp;&nbsp;/| |/ / (_| | | | (_| |<br />
&#92;___/ &#92;__, |_|&nbsp;&nbsp;&#92;___| &#92;_/ &#92;_/ .__/| .__/ &#92;/&nbsp;&nbsp;&#92;/ |_/___&#92;__,_|_|&nbsp;&nbsp;&#92;__,_|<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|___/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |_|&nbsp;&nbsp; |_|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ogre 1.7.x Application Wizard for VC10 (August 2010)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;http://code.google.com/p/ogreappwizards/<br />
-----------------------------------------------------------------------------<br />
*/<br />
<br />
#include "RaceWars.h"<br />
<br />
OgreBites::Label* mInfoLabel;<br />
<br />
//-------------------------------------------------------------------------------------<br />
RaceWars::RaceWars(void)<br />
{<br />
}<br />
//-------------------------------------------------------------------------------------<br />
RaceWars::~RaceWars(void)<br />
{<br />
}<br />
<br />
//-------------------------------------------------------------------------------------<br />
<br />
<br />
void RaceWars::destroyScene(void)<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp; OGRE_DELETE mTerrainGroup;<br />
&nbsp;&nbsp;&nbsp;&nbsp; OGRE_DELETE mTerrainGlobals;<br />
}<br />
//-------------------------------------------------------------------------------------<br />
void getTerrainImage(bool flipX, bool flipY, Ogre::Image&amp; img)<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;img.load("terrain.png", Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME);<br />
&nbsp;&nbsp;&nbsp;&nbsp;if (flipX)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;img.flipAroundY();<br />
&nbsp;&nbsp;&nbsp;&nbsp;if (flipY)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;img.flipAroundX();<br />
}<br />
//-------------------------------------------------------------------------------------<br />
void RaceWars::defineTerrain(long x, long y)<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;Ogre::String filename = mTerrainGroup-&gt;generateFilename(x, y);<br />
&nbsp;&nbsp;&nbsp;&nbsp;if (Ogre::ResourceGroupManager::getSingleton().resourceExists(mTerrainGroup-&gt;getResourceGroup(), filename))<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mTerrainGroup-&gt;defineTerrain(x, y);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;else<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ogre::Image img;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;getTerrainImage(x % 2 != 0, y % 2 != 0, img);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mTerrainGroup-&gt;defineTerrain(x, y, &amp;img);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mTerrainsImported = true;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
//-------------------------------------------------------------------------------------<br />
void RaceWars::initBlendMaps(Ogre::Terrain* terrain)<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;Ogre::TerrainLayerBlendMap* blendMap0 = terrain-&gt;getLayerBlendMap(1);<br />
&nbsp;&nbsp;&nbsp;&nbsp;Ogre::TerrainLayerBlendMap* blendMap1 = terrain-&gt;getLayerBlendMap(2);<br />
&nbsp;&nbsp;&nbsp;&nbsp;Ogre::Real minHeight0 = 70;<br />
&nbsp;&nbsp;&nbsp;&nbsp;Ogre::Real fadeDist0 = 40;<br />
&nbsp;&nbsp;&nbsp;&nbsp;Ogre::Real minHeight1 = 70;<br />
&nbsp;&nbsp;&nbsp;&nbsp;Ogre::Real fadeDist1 = 15;<br />
&nbsp;&nbsp;&nbsp;&nbsp;float* pBlend1 = blendMap1-&gt;getBlendPointer();<br />
&nbsp;&nbsp;&nbsp;&nbsp;for (Ogre::uint16 y = 0; y &lt; terrain-&gt;getLayerBlendMapSize(); ++y)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (Ogre::uint16 x = 0; x &lt; terrain-&gt;getLayerBlendMapSize(); ++x)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ogre::Real tx, ty;<br />
 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;blendMap0-&gt;convertImageToTerrainSpace(x, y, &amp;tx, &amp;ty);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ogre::Real height = terrain-&gt;getHeightAtTerrainPosition(tx, ty);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ogre::Real val = (height - minHeight0) / fadeDist0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;val = Ogre::Math::Clamp(val, (Ogre::Real)0, (Ogre::Real)1);<br />
 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;val = (height - minHeight1) / fadeDist1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;val = Ogre::Math::Clamp(val, (Ogre::Real)0, (Ogre::Real)1);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*pBlend1++ = val;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;blendMap0-&gt;dirty();<br />
&nbsp;&nbsp;&nbsp;&nbsp;blendMap1-&gt;dirty();<br />
&nbsp;&nbsp;&nbsp;&nbsp;blendMap0-&gt;update();<br />
&nbsp;&nbsp;&nbsp;&nbsp;blendMap1-&gt;update();<br />
}<br />
//-------------------------------------------------------------------------------------<br />
void RaceWars::configureTerrainDefaults(Ogre::Light* light)<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;// Configure global<br />
&nbsp;&nbsp;&nbsp;&nbsp;mTerrainGlobals-&gt;setMaxPixelError(8);<br />
&nbsp;&nbsp;&nbsp;&nbsp;// testing composite map<br />
&nbsp;&nbsp;&nbsp;&nbsp;mTerrainGlobals-&gt;setCompositeMapDistance(3000);<br />
&nbsp;&nbsp;&nbsp;&nbsp;// Important to set these so that the terrain knows what to use for derived (non-realtime) data<br />
&nbsp;&nbsp;&nbsp;&nbsp;mTerrainGlobals-&gt;setLightMapDirection(light-&gt;getDerivedDirection());<br />
&nbsp;&nbsp;&nbsp;&nbsp;mTerrainGlobals-&gt;setCompositeMapAmbient(mSceneMgr-&gt;getAmbientLight());<br />
&nbsp;&nbsp;&nbsp;&nbsp;mTerrainGlobals-&gt;setCompositeMapDiffuse(light-&gt;getDiffuseColour());<br />
&nbsp;&nbsp;&nbsp;&nbsp;// Configure default import settings for if we use imported image<br />
&nbsp;&nbsp;&nbsp;&nbsp;Ogre::Terrain::ImportData&amp; defaultimp = mTerrainGroup-&gt;getDefaultImportSettings();<br />
&nbsp;&nbsp;&nbsp;&nbsp;defaultimp.terrainSize = 513;<br />
&nbsp;&nbsp;&nbsp;&nbsp;defaultimp.worldSize = 12000.0f;<br />
&nbsp;&nbsp;&nbsp;&nbsp;defaultimp.inputScale = 600;<br />
&nbsp;&nbsp;&nbsp;&nbsp;defaultimp.minBatchSize = 33;<br />
&nbsp;&nbsp;&nbsp;&nbsp;defaultimp.maxBatchSize = 65;<br />
&nbsp;&nbsp;&nbsp;&nbsp;// textures<br />
&nbsp;&nbsp;&nbsp;&nbsp;defaultimp.layerList.resize(3);<br />
&nbsp;&nbsp;&nbsp;&nbsp;defaultimp.layerList[0].worldSize = 100;<br />
&nbsp;&nbsp;&nbsp;&nbsp;defaultimp.layerList[0].textureNames.push_back("dirt_grayrocky_diffusespecular.dds");<br />
&nbsp;&nbsp;&nbsp;&nbsp;defaultimp.layerList[0].textureNames.push_back("dirt_grayrocky_normalheight.dds");<br />
&nbsp;&nbsp;&nbsp;&nbsp;defaultimp.layerList[1].worldSize = 30;<br />
&nbsp;&nbsp;&nbsp;&nbsp;defaultimp.layerList[1].textureNames.push_back("grass_green-01_diffusespecular.dds");<br />
&nbsp;&nbsp;&nbsp;&nbsp;defaultimp.layerList[1].textureNames.push_back("grass_green-01_normalheight.dds");<br />
&nbsp;&nbsp;&nbsp;&nbsp;defaultimp.layerList[2].worldSize = 200;<br />
&nbsp;&nbsp;&nbsp;&nbsp;defaultimp.layerList[2].textureNames.push_back("growth_weirdfungus-03_diffusespecular.dds");<br />
&nbsp;&nbsp;&nbsp;&nbsp;defaultimp.layerList[2].textureNames.push_back("growth_weirdfungus-03_normalheight.dds");<br />
}<br />
//-------------------------------------------------------------------------------------<br />
void RaceWars::createFrameListener(void)<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;BaseApplication::createFrameListener();<br />
 <br />
&nbsp;&nbsp;&nbsp;&nbsp;mInfoLabel = mTrayMgr-&gt;createLabel(OgreBites::TL_TOP, "TInfo", "", 350);<br />
}<br />
//-------------------------------------------------------------------------------------<br />
void RaceWars::createScene(void)<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;mCamera-&gt;setPosition(Ogre::Vector3(1683, 50, 2116));<br />
&nbsp;&nbsp;&nbsp;&nbsp;mCamera-&gt;lookAt(Ogre::Vector3(1963, 50, 1660));<br />
&nbsp;&nbsp;&nbsp;&nbsp;mCamera-&gt;setNearClipDistance(0.1);<br />
&nbsp;&nbsp;&nbsp;&nbsp;mCamera-&gt;setFarClipDistance(50000);<br />
 <br />
&nbsp;&nbsp;&nbsp;&nbsp;if (mRoot-&gt;getRenderSystem()-&gt;getCapabilities()-&gt;hasCapability(Ogre::RSC_INFINITE_FAR_PLANE))<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mCamera-&gt;setFarClipDistance(0);&nbsp;&nbsp; // enable infinite far clip distance if we can<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
 <br />
&nbsp;&nbsp;&nbsp;&nbsp;Ogre::MaterialManager::getSingleton().setDefaultTextureFiltering(Ogre::TFO_ANISOTROPIC);<br />
&nbsp;&nbsp;&nbsp;&nbsp;Ogre::MaterialManager::getSingleton().setDefaultAnisotropy(7);<br />
 <br />
&nbsp;&nbsp;&nbsp;&nbsp;Ogre::Vector3 lightdir(0.55, -0.3, 0.75);<br />
&nbsp;&nbsp;&nbsp;&nbsp;lightdir.normalise();<br />
 <br />
&nbsp;&nbsp;&nbsp;&nbsp;Ogre::Light* light = mSceneMgr-&gt;createLight("tstLight");<br />
&nbsp;&nbsp;&nbsp;&nbsp;light-&gt;setType(Ogre::Light::LT_DIRECTIONAL);<br />
&nbsp;&nbsp;&nbsp;&nbsp;light-&gt;setDirection(lightdir);<br />
&nbsp;&nbsp;&nbsp;&nbsp;light-&gt;setDiffuseColour(Ogre::ColourValue::White);<br />
&nbsp;&nbsp;&nbsp;&nbsp;light-&gt;setSpecularColour(Ogre::ColourValue(0.4, 0.4, 0.4));<br />
 <br />
&nbsp;&nbsp;&nbsp;&nbsp;mSceneMgr-&gt;setAmbientLight(Ogre::ColourValue(0.2, 0.2, 0.2));<br />
 <br />
&nbsp;&nbsp;&nbsp;&nbsp;mTerrainGlobals = OGRE_NEW Ogre::TerrainGlobalOptions();<br />
 <br />
&nbsp;&nbsp;&nbsp;&nbsp;mTerrainGroup = OGRE_NEW Ogre::TerrainGroup(mSceneMgr, Ogre::Terrain::ALIGN_X_Z, 513, 12000.0f);<br />
&nbsp;&nbsp;&nbsp;&nbsp;mTerrainGroup-&gt;setFilenameConvention(Ogre::String("RaceWars"), Ogre::String("dat"));<br />
&nbsp;&nbsp;&nbsp;&nbsp;mTerrainGroup-&gt;setOrigin(Ogre::Vector3::ZERO);<br />
 <br />
&nbsp;&nbsp;&nbsp;&nbsp;configureTerrainDefaults(light);<br />
 <br />
&nbsp;&nbsp;&nbsp;&nbsp;for (long x = 0; x &lt;= 0; ++x)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (long y = 0; y &lt;= 0; ++y)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;defineTerrain(x, y);<br />
 <br />
&nbsp;&nbsp;&nbsp;&nbsp;// sync load since we want everything in place when we start<br />
&nbsp;&nbsp;&nbsp;&nbsp;mTerrainGroup-&gt;loadAllTerrains(true);<br />
 <br />
&nbsp;&nbsp;&nbsp;&nbsp;if (mTerrainsImported)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ogre::TerrainGroup::TerrainIterator ti = mTerrainGroup-&gt;getTerrainIterator();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(ti.hasMoreElements())<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ogre::Terrain* t = ti.getNext()-&gt;instance;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;initBlendMaps(t);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
 <br />
&nbsp;&nbsp;&nbsp;&nbsp;mTerrainGroup-&gt;freeTemporaryResources();<br />
&nbsp;&nbsp;&nbsp;&nbsp;mSceneMgr-&gt;setSkyBox(true, "Examples/SpaceSkyBox", 100, false);<br />
&nbsp;&nbsp;&nbsp;&nbsp;Ogre::Plane plane;<br />
&nbsp;&nbsp;&nbsp;&nbsp;plane.d = 1000;<br />
&nbsp;&nbsp;&nbsp;&nbsp;plane.normal = Ogre::Vector3::NEGATIVE_UNIT_Y;<br />
<br />
}<br />
//-------------------------------------------------------------------------------------<br />
bool RaceWars::frameRenderingQueued(const Ogre::FrameEvent&amp; evt)<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;bool ret = BaseApplication::frameRenderingQueued(evt);<br />
 <br />
&nbsp;&nbsp;&nbsp;&nbsp;if (mTerrainGroup-&gt;isDerivedDataUpdateInProgress())<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mTrayMgr-&gt;moveWidgetToTray(mInfoLabel, OgreBites::TL_TOP, 0);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mInfoLabel-&gt;show();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (mTerrainsImported)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mInfoLabel-&gt;setCaption("Building terrain, please wait...");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mInfoLabel-&gt;setCaption("Updating textures, patience...");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;else<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mTrayMgr-&gt;removeWidgetFromTray(mInfoLabel);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mInfoLabel-&gt;hide();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (mTerrainsImported)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mTerrainGroup-&gt;saveAllTerrains(true);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mTerrainsImported = false;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
 <br />
&nbsp;&nbsp;&nbsp;&nbsp;return ret;<br />
}<br />
<br />
#if OGRE_PLATFORM == OGRE_PLATFORM_WIN32<br />
#define WIN32_LEAN_AND_MEAN<br />
#include "windows.h"<br />
#endif<br />
<br />
#ifdef __cplusplus<br />
extern "C" {<br />
#endif<br />
<br />
#if OGRE_PLATFORM == OGRE_PLATFORM_WIN32<br />
&nbsp;&nbsp;&nbsp;&nbsp;INT WINAPI WinMain( HINSTANCE hInst, HINSTANCE, LPSTR strCmdLine, INT )<br />
#else<br />
&nbsp;&nbsp;&nbsp;&nbsp;int main(int argc, char *argv[])<br />
#endif<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Create application object<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RaceWars app;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;app.go();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} catch( Ogre::Exception&amp; e ) {<br />
#if OGRE_PLATFORM == OGRE_PLATFORM_WIN32<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBox( NULL, e.getFullDescription().c_str(), "An exception has occured!", MB_OK | MB_ICONERROR | MB_TASKMODAL);<br />
#else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;std::cerr &lt;&lt; "An exception has occured: " &lt;&lt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.getFullDescription().c_str() &lt;&lt; std::endl;<br />
#endif<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
#ifdef __cplusplus<br />
}<br />
#endif</code></div></div>
<br />
<br />
<br />
RaceWars.h<br />
<div class="codeblock">
<div class="title">Code:<br />
</div><div class="body" dir="ltr"><code>/*<br />
-----------------------------------------------------------------------------<br />
Filename:&nbsp;&nbsp;&nbsp;&nbsp;RaceWars.h<br />
-----------------------------------------------------------------------------<br />
<br />
<br />
This source file is generated by the<br />
&nbsp;&nbsp; ___&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;__&nbsp;&nbsp;&nbsp;&nbsp;__ _&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_ <br />
&nbsp;&nbsp;/___&#92;__ _ _ __ ___&nbsp;&nbsp;&nbsp;&nbsp;/_&#92;&nbsp;&nbsp;_ __&nbsp;&nbsp;_ __/ / /&#92; &#92; (_)______ _ _ __ __| |<br />
 //&nbsp;&nbsp;// _` | '__/ _ &#92;&nbsp;&nbsp;//_&#92;&#92;| '_ &#92;| '_ &#92; &#92;/&nbsp;&nbsp;&#92;/ / |_&nbsp;&nbsp;/ _` | '__/ _` |<br />
/ &#92;_// (_| | | |&nbsp;&nbsp;__/ /&nbsp;&nbsp;_&nbsp;&nbsp;&#92; |_) | |_) &#92;&nbsp;&nbsp;/&#92;&nbsp;&nbsp;/| |/ / (_| | | | (_| |<br />
&#92;___/ &#92;__, |_|&nbsp;&nbsp;&#92;___| &#92;_/ &#92;_/ .__/| .__/ &#92;/&nbsp;&nbsp;&#92;/ |_/___&#92;__,_|_|&nbsp;&nbsp;&#92;__,_|<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|___/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |_|&nbsp;&nbsp; |_|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ogre 1.7.x Application Wizard for VC10 (August 2010)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;http://code.google.com/p/ogreappwizards/<br />
-----------------------------------------------------------------------------<br />
*/<br />
#ifndef __RaceWars_h_<br />
#define __RaceWars_h_<br />
<br />
#include "BaseApplication.h"<br />
#if OGRE_PLATFORM == OGRE_PLATFORM_WIN32<br />
#include "../res/resource.h"<br />
#endif<br />
#include &lt;Terrain&#92;OgreTerrain.h&gt;<br />
#include &lt;Terrain&#92;OgreTerrainGroup.h&gt;<br />
<br />
class RaceWars : public BaseApplication<br />
{<br />
private:<br />
&nbsp;&nbsp;&nbsp;&nbsp;Ogre::TerrainGlobalOptions* mTerrainGlobals;<br />
&nbsp;&nbsp;&nbsp;&nbsp;Ogre::TerrainGroup* mTerrainGroup;<br />
&nbsp;&nbsp;&nbsp;&nbsp;bool mTerrainsImported;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;void defineTerrain(long x, long y);<br />
&nbsp;&nbsp;&nbsp;&nbsp;void initBlendMaps(Ogre::Terrain* terrain);<br />
&nbsp;&nbsp;&nbsp;&nbsp;void configureTerrainDefaults(Ogre::Light* light);<br />
<br />
public:<br />
&nbsp;&nbsp;&nbsp;&nbsp;RaceWars(void);<br />
&nbsp;&nbsp;&nbsp;&nbsp;virtual ~RaceWars(void);<br />
<br />
protected:<br />
&nbsp;&nbsp;&nbsp;&nbsp;virtual void createScene(void);<br />
&nbsp;&nbsp;&nbsp;&nbsp;virtual void createFrameListener(void);<br />
&nbsp;&nbsp;&nbsp;&nbsp;virtual void destroyScene(void);<br />
&nbsp;&nbsp;&nbsp;&nbsp;virtual bool frameRenderingQueued(const Ogre::FrameEvent&amp; evt);<br />
};<br />
<br />
#endif // #ifndef __RaceWars_h_</code></div></div>
<br />
<br />
<br />
BaseApplication.cpp<br />
<div class="codeblock">
<div class="title">Code:<br />
</div><div class="body" dir="ltr"><code>/*<br />
-----------------------------------------------------------------------------<br />
Filename:&nbsp;&nbsp;&nbsp;&nbsp;BaseApplication.cpp<br />
-----------------------------------------------------------------------------<br />
<br />
<br />
This source file is generated by the<br />
&nbsp;&nbsp; ___&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;__&nbsp;&nbsp;&nbsp;&nbsp;__ _&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_ <br />
&nbsp;&nbsp;/___&#92;__ _ _ __ ___&nbsp;&nbsp;&nbsp;&nbsp;/_&#92;&nbsp;&nbsp;_ __&nbsp;&nbsp;_ __/ / /&#92; &#92; (_)______ _ _ __ __| |<br />
 //&nbsp;&nbsp;// _` | '__/ _ &#92;&nbsp;&nbsp;//_&#92;&#92;| '_ &#92;| '_ &#92; &#92;/&nbsp;&nbsp;&#92;/ / |_&nbsp;&nbsp;/ _` | '__/ _` |<br />
/ &#92;_// (_| | | |&nbsp;&nbsp;__/ /&nbsp;&nbsp;_&nbsp;&nbsp;&#92; |_) | |_) &#92;&nbsp;&nbsp;/&#92;&nbsp;&nbsp;/| |/ / (_| | | | (_| |<br />
&#92;___/ &#92;__, |_|&nbsp;&nbsp;&#92;___| &#92;_/ &#92;_/ .__/| .__/ &#92;/&nbsp;&nbsp;&#92;/ |_/___&#92;__,_|_|&nbsp;&nbsp;&#92;__,_|<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|___/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |_|&nbsp;&nbsp; |_|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ogre 1.7.x Application Wizard for VC10 (August 2010)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;http://code.google.com/p/ogreappwizards/<br />
-----------------------------------------------------------------------------<br />
*/<br />
#include "BaseApplication.h"<br />
<br />
#if OGRE_PLATFORM == OGRE_PLATFORM_WIN32<br />
#include "../res/resource.h"<br />
#endif<br />
<br />
<br />
//-------------------------------------------------------------------------------------<br />
BaseApplication::BaseApplication(void)<br />
&nbsp;&nbsp;&nbsp;&nbsp;: mRoot(0),<br />
&nbsp;&nbsp;&nbsp;&nbsp;mCamera(0),<br />
&nbsp;&nbsp;&nbsp;&nbsp;mSceneMgr(0),<br />
&nbsp;&nbsp;&nbsp;&nbsp;mWindow(0),<br />
&nbsp;&nbsp;&nbsp;&nbsp;mResourcesCfg(Ogre::StringUtil::BLANK),<br />
&nbsp;&nbsp;&nbsp;&nbsp;mPluginsCfg(Ogre::StringUtil::BLANK),<br />
&nbsp;&nbsp;&nbsp;&nbsp;mTrayMgr(0),<br />
&nbsp;&nbsp;&nbsp;&nbsp;mCameraMan(0),<br />
&nbsp;&nbsp;&nbsp;&nbsp;mDetailsPanel(0),<br />
&nbsp;&nbsp;&nbsp;&nbsp;mCursorWasVisible(false),<br />
&nbsp;&nbsp;&nbsp;&nbsp;mShutDown(false),<br />
&nbsp;&nbsp;&nbsp;&nbsp;mInputManager(0),<br />
&nbsp;&nbsp;&nbsp;&nbsp;mMouse(0),<br />
&nbsp;&nbsp;&nbsp;&nbsp;mKeyboard(0)<br />
{<br />
}<br />
<br />
//-------------------------------------------------------------------------------------<br />
BaseApplication::~BaseApplication(void)<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;if (mTrayMgr) delete mTrayMgr;<br />
&nbsp;&nbsp;&nbsp;&nbsp;if (mCameraMan) delete mCameraMan;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;//Remove ourself as a Window listener<br />
&nbsp;&nbsp;&nbsp;&nbsp;Ogre::WindowEventUtilities::removeWindowEventListener(mWindow, this);<br />
&nbsp;&nbsp;&nbsp;&nbsp;windowClosed(mWindow);<br />
&nbsp;&nbsp;&nbsp;&nbsp;delete mRoot;<br />
}<br />
<br />
//-------------------------------------------------------------------------------------<br />
bool BaseApplication::configure(void)<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;// Show the configuration dialog and initialise the system<br />
&nbsp;&nbsp;&nbsp;&nbsp;// You can skip this and use root.restoreConfig() to load configuration<br />
&nbsp;&nbsp;&nbsp;&nbsp;// settings if you were sure there are valid ones saved in ogre.cfg<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(mRoot-&gt;showConfigDialog())<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// If returned true, user clicked OK so initialise<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Here we choose to let the system create a default rendering window by passing 'true'<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mWindow = mRoot-&gt;initialise(true, "RaceWars Render Window");<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Let's add a nice window icon<br />
#if OGRE_PLATFORM == OGRE_PLATFORM_WIN32<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HWND hwnd;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mWindow-&gt;getCustomAttribute("WINDOW", (void*)&amp;hwnd);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LONG iconID&nbsp;&nbsp; = (LONG)LoadIcon( GetModuleHandle(0), MAKEINTRESOURCE(IDI_APPICON) );<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetClassLong( hwnd, GCL_HICON, iconID );<br />
#endif<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return true;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;else<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return false;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
//-------------------------------------------------------------------------------------<br />
void BaseApplication::chooseSceneManager(void)<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;// Get the SceneManager, in this case a generic one<br />
&nbsp;&nbsp;&nbsp;&nbsp;mSceneMgr = mRoot-&gt;createSceneManager(Ogre::ST_GENERIC);<br />
}<br />
//-------------------------------------------------------------------------------------<br />
void BaseApplication::createCamera(void)<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;// Create the camera<br />
&nbsp;&nbsp;&nbsp;&nbsp;mCamera = mSceneMgr-&gt;createCamera("PlayerCam");<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;// Position it at 500 in Z direction<br />
&nbsp;&nbsp;&nbsp;&nbsp;mCamera-&gt;setPosition(Ogre::Vector3(0,0,80));<br />
&nbsp;&nbsp;&nbsp;&nbsp;// Look back along -Z<br />
&nbsp;&nbsp;&nbsp;&nbsp;mCamera-&gt;lookAt(Ogre::Vector3(0,0,-300));<br />
&nbsp;&nbsp;&nbsp;&nbsp;mCamera-&gt;setNearClipDistance(5);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;mCameraMan = new OgreBites::SdkCameraMan(mCamera);&nbsp;&nbsp; // create a default camera controller<br />
}<br />
//-------------------------------------------------------------------------------------<br />
void BaseApplication::createFrameListener(void)<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;Ogre::LogManager::getSingletonPtr()-&gt;logMessage("*** Initializing OIS ***");<br />
&nbsp;&nbsp;&nbsp;&nbsp;OIS::ParamList pl;<br />
&nbsp;&nbsp;&nbsp;&nbsp;size_t windowHnd = 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;std::ostringstream windowHndStr;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;mWindow-&gt;getCustomAttribute("WINDOW", &amp;windowHnd);<br />
&nbsp;&nbsp;&nbsp;&nbsp;windowHndStr &lt;&lt; windowHnd;<br />
&nbsp;&nbsp;&nbsp;&nbsp;pl.insert(std::make_pair(std::string("WINDOW"), windowHndStr.str()));<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;mInputManager = OIS::InputManager::createInputSystem( pl );<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;mKeyboard = static_cast&lt;OIS::Keyboard*&gt;(mInputManager-&gt;createInputObject( OIS::OISKeyboard, true ));<br />
&nbsp;&nbsp;&nbsp;&nbsp;mMouse = static_cast&lt;OIS::Mouse*&gt;(mInputManager-&gt;createInputObject( OIS::OISMouse, true ));<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;mMouse-&gt;setEventCallback(this);<br />
&nbsp;&nbsp;&nbsp;&nbsp;mKeyboard-&gt;setEventCallback(this);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;//Set initial mouse clipping size<br />
&nbsp;&nbsp;&nbsp;&nbsp;windowResized(mWindow);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;//Register as a Window listener<br />
&nbsp;&nbsp;&nbsp;&nbsp;Ogre::WindowEventUtilities::addWindowEventListener(mWindow, this);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;mTrayMgr = new OgreBites::SdkTrayManager("InterfaceName", mWindow, mMouse, this);<br />
&nbsp;&nbsp;&nbsp;&nbsp;mTrayMgr-&gt;showFrameStats(OgreBites::TL_BOTTOMLEFT);<br />
&nbsp;&nbsp;&nbsp;&nbsp;mTrayMgr-&gt;showLogo(OgreBites::TL_BOTTOMRIGHT);<br />
&nbsp;&nbsp;&nbsp;&nbsp;mTrayMgr-&gt;hideCursor();<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;// create a params panel for displaying sample details<br />
&nbsp;&nbsp;&nbsp;&nbsp;Ogre::StringVector items;<br />
&nbsp;&nbsp;&nbsp;&nbsp;items.push_back("cam.pX");<br />
&nbsp;&nbsp;&nbsp;&nbsp;items.push_back("cam.pY");<br />
&nbsp;&nbsp;&nbsp;&nbsp;items.push_back("cam.pZ");<br />
&nbsp;&nbsp;&nbsp;&nbsp;items.push_back("");<br />
&nbsp;&nbsp;&nbsp;&nbsp;items.push_back("cam.oW");<br />
&nbsp;&nbsp;&nbsp;&nbsp;items.push_back("cam.oX");<br />
&nbsp;&nbsp;&nbsp;&nbsp;items.push_back("cam.oY");<br />
&nbsp;&nbsp;&nbsp;&nbsp;items.push_back("cam.oZ");<br />
&nbsp;&nbsp;&nbsp;&nbsp;items.push_back("");<br />
&nbsp;&nbsp;&nbsp;&nbsp;items.push_back("Filtering");<br />
&nbsp;&nbsp;&nbsp;&nbsp;items.push_back("Poly Mode");<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;mDetailsPanel = mTrayMgr-&gt;createParamsPanel(OgreBites::TL_NONE, "DetailsPanel", 200, items);<br />
&nbsp;&nbsp;&nbsp;&nbsp;mDetailsPanel-&gt;setParamValue(9, "Bilinear");<br />
&nbsp;&nbsp;&nbsp;&nbsp;mDetailsPanel-&gt;setParamValue(10, "Solid");<br />
&nbsp;&nbsp;&nbsp;&nbsp;mDetailsPanel-&gt;hide();<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;mRoot-&gt;addFrameListener(this);<br />
}<br />
//-------------------------------------------------------------------------------------<br />
void BaseApplication::destroyScene(void)<br />
{<br />
}<br />
//-------------------------------------------------------------------------------------<br />
void BaseApplication::createViewports(void)<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;// Create one viewport, entire window<br />
&nbsp;&nbsp;&nbsp;&nbsp;Ogre::Viewport* vp = mWindow-&gt;addViewport(mCamera);<br />
&nbsp;&nbsp;&nbsp;&nbsp;vp-&gt;setBackgroundColour(Ogre::ColourValue(0,0,0));<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;// Alter the camera aspect ratio to match the viewport<br />
&nbsp;&nbsp;&nbsp;&nbsp;mCamera-&gt;setAspectRatio(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ogre::Real(vp-&gt;getActualWidth()) / Ogre::Real(vp-&gt;getActualHeight()));<br />
}<br />
//-------------------------------------------------------------------------------------<br />
void BaseApplication::setupResources(void)<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;// Load resource paths from config file<br />
&nbsp;&nbsp;&nbsp;&nbsp;Ogre::ConfigFile cf;<br />
&nbsp;&nbsp;&nbsp;&nbsp;cf.load(mResourcesCfg);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;// Go through all sections &amp; settings in the file<br />
&nbsp;&nbsp;&nbsp;&nbsp;Ogre::ConfigFile::SectionIterator seci = cf.getSectionIterator();<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;Ogre::String secName, typeName, archName;<br />
&nbsp;&nbsp;&nbsp;&nbsp;while (seci.hasMoreElements())<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;secName = seci.peekNextKey();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ogre::ConfigFile::SettingsMultiMap *settings = seci.getNext();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ogre::ConfigFile::SettingsMultiMap::iterator i;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (i = settings-&gt;begin(); i != settings-&gt;end(); ++i)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;typeName = i-&gt;first;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;archName = i-&gt;second;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ogre::ResourceGroupManager::getSingleton().addResourceLocation(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;archName, typeName, secName);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
//-------------------------------------------------------------------------------------<br />
void BaseApplication::createResourceListener(void)<br />
{<br />
<br />
}<br />
//-------------------------------------------------------------------------------------<br />
void BaseApplication::loadResources(void)<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;Ogre::ResourceGroupManager::getSingleton().initialiseAllResourceGroups();<br />
}<br />
//-------------------------------------------------------------------------------------<br />
void BaseApplication::go(void)<br />
{<br />
#ifdef _DEBUG<br />
&nbsp;&nbsp;&nbsp;&nbsp;mResourcesCfg = "resources_d.cfg";<br />
&nbsp;&nbsp;&nbsp;&nbsp;mPluginsCfg = "plugins_d.cfg";<br />
#else<br />
&nbsp;&nbsp;&nbsp;&nbsp;mResourcesCfg = "resources.cfg";<br />
&nbsp;&nbsp;&nbsp;&nbsp;mPluginsCfg = "plugins.cfg";<br />
#endif<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;if (!setup())<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;mRoot-&gt;startRendering();<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;// clean up<br />
&nbsp;&nbsp;&nbsp;&nbsp;destroyScene();<br />
}<br />
//-------------------------------------------------------------------------------------<br />
bool BaseApplication::setup(void)<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;mRoot = new Ogre::Root(mPluginsCfg);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;setupResources();<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;bool carryOn = configure();<br />
&nbsp;&nbsp;&nbsp;&nbsp;if (!carryOn) return false;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;chooseSceneManager();<br />
&nbsp;&nbsp;&nbsp;&nbsp;createCamera();<br />
&nbsp;&nbsp;&nbsp;&nbsp;createViewports();<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;// Set default mipmap level (NB some APIs ignore this)<br />
&nbsp;&nbsp;&nbsp;&nbsp;Ogre::TextureManager::getSingleton().setDefaultNumMipmaps(5);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;// Create any resource listeners (for loading screens)<br />
&nbsp;&nbsp;&nbsp;&nbsp;createResourceListener();<br />
&nbsp;&nbsp;&nbsp;&nbsp;// Load resources<br />
&nbsp;&nbsp;&nbsp;&nbsp;loadResources();<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;createFrameListener();<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;// Create the scene<br />
&nbsp;&nbsp;&nbsp;&nbsp;createScene();<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;return true;<br />
};<br />
//-------------------------------------------------------------------------------------<br />
bool BaseApplication::frameRenderingQueued(const Ogre::FrameEvent&amp; evt)<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(mWindow-&gt;isClosed())<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return false;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(mShutDown)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return false;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;//Need to capture/update each device<br />
&nbsp;&nbsp;&nbsp;&nbsp;mKeyboard-&gt;capture();<br />
&nbsp;&nbsp;&nbsp;&nbsp;mMouse-&gt;capture();<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;mTrayMgr-&gt;frameRenderingQueued(evt);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;if (!mTrayMgr-&gt;isDialogVisible())<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mCameraMan-&gt;frameRenderingQueued(evt);&nbsp;&nbsp; // if dialog isn't up, then update the camera<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (mDetailsPanel-&gt;isVisible())&nbsp;&nbsp; // if details panel is visible, then update its contents<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mDetailsPanel-&gt;setParamValue(0, Ogre::StringConverter::toString(mCamera-&gt;getDerivedPosition().x));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mDetailsPanel-&gt;setParamValue(1, Ogre::StringConverter::toString(mCamera-&gt;getDerivedPosition().y));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mDetailsPanel-&gt;setParamValue(2, Ogre::StringConverter::toString(mCamera-&gt;getDerivedPosition().z));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mDetailsPanel-&gt;setParamValue(4, Ogre::StringConverter::toString(mCamera-&gt;getDerivedOrientation().w));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mDetailsPanel-&gt;setParamValue(5, Ogre::StringConverter::toString(mCamera-&gt;getDerivedOrientation().x));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mDetailsPanel-&gt;setParamValue(6, Ogre::StringConverter::toString(mCamera-&gt;getDerivedOrientation().y));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mDetailsPanel-&gt;setParamValue(7, Ogre::StringConverter::toString(mCamera-&gt;getDerivedOrientation().z));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;return true;<br />
}<br />
//-------------------------------------------------------------------------------------<br />
bool BaseApplication::keyPressed( const OIS::KeyEvent &amp;arg )<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;if (mTrayMgr-&gt;isDialogVisible()) return true;&nbsp;&nbsp; // don't process any more keys if dialog is up<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;if (arg.key == OIS::KC_F)&nbsp;&nbsp; // toggle visibility of advanced frame stats<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mTrayMgr-&gt;toggleAdvancedFrameStats();<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;else if (arg.key == OIS::KC_G)&nbsp;&nbsp; // toggle visibility of even rarer debugging details<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (mDetailsPanel-&gt;getTrayLocation() == OgreBites::TL_NONE)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mTrayMgr-&gt;moveWidgetToTray(mDetailsPanel, OgreBites::TL_TOPRIGHT, 0);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mDetailsPanel-&gt;show();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mTrayMgr-&gt;removeWidgetFromTray(mDetailsPanel);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mDetailsPanel-&gt;hide();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;else if (arg.key == OIS::KC_T)&nbsp;&nbsp; // cycle polygon rendering mode<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ogre::String newVal;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ogre::TextureFilterOptions tfo;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsigned int aniso;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;switch (mDetailsPanel-&gt;getParamValue(9).asUTF8()[0])<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case 'B':<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newVal = "Trilinear";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tfo = Ogre::TFO_TRILINEAR;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;aniso = 1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case 'T':<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newVal = "Anisotropic";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tfo = Ogre::TFO_ANISOTROPIC;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;aniso = 8;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case 'A':<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newVal = "None";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tfo = Ogre::TFO_NONE;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;aniso = 1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;default:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newVal = "Bilinear";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tfo = Ogre::TFO_BILINEAR;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;aniso = 1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ogre::MaterialManager::getSingleton().setDefaultTextureFiltering(tfo);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ogre::MaterialManager::getSingleton().setDefaultAnisotropy(aniso);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mDetailsPanel-&gt;setParamValue(9, newVal);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;else if (arg.key == OIS::KC_R)&nbsp;&nbsp; // cycle polygon rendering mode<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ogre::String newVal;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ogre::PolygonMode pm;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;switch (mCamera-&gt;getPolygonMode())<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case Ogre::PM_SOLID:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newVal = "Wireframe";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pm = Ogre::PM_WIREFRAME;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case Ogre::PM_WIREFRAME:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newVal = "Points";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pm = Ogre::PM_POINTS;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;default:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newVal = "Solid";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pm = Ogre::PM_SOLID;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mCamera-&gt;setPolygonMode(pm);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mDetailsPanel-&gt;setParamValue(10, newVal);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;else if(arg.key == OIS::KC_F5)&nbsp;&nbsp; // refresh all textures<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ogre::TextureManager::getSingleton().reloadAll();<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;else if (arg.key == OIS::KC_SYSRQ)&nbsp;&nbsp; // take a screenshot<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mWindow-&gt;writeContentsToTimestampedFile("screenshot", ".jpg");<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;else if (arg.key == OIS::KC_ESCAPE)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mShutDown = true;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;mCameraMan-&gt;injectKeyDown(arg);<br />
&nbsp;&nbsp;&nbsp;&nbsp;return true;<br />
}<br />
<br />
bool BaseApplication::keyReleased( const OIS::KeyEvent &amp;arg )<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;mCameraMan-&gt;injectKeyUp(arg);<br />
&nbsp;&nbsp;&nbsp;&nbsp;return true;<br />
}<br />
<br />
bool BaseApplication::mouseMoved( const OIS::MouseEvent &amp;arg )<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;if (mTrayMgr-&gt;injectMouseMove(arg)) return true;<br />
&nbsp;&nbsp;&nbsp;&nbsp;mCameraMan-&gt;injectMouseMove(arg);<br />
&nbsp;&nbsp;&nbsp;&nbsp;return true;<br />
}<br />
<br />
bool BaseApplication::mousePressed( const OIS::MouseEvent &amp;arg, OIS::MouseButtonID id )<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;if (mTrayMgr-&gt;injectMouseDown(arg, id)) return true;<br />
&nbsp;&nbsp;&nbsp;&nbsp;mCameraMan-&gt;injectMouseDown(arg, id);<br />
&nbsp;&nbsp;&nbsp;&nbsp;return true;<br />
}<br />
<br />
bool BaseApplication::mouseReleased( const OIS::MouseEvent &amp;arg, OIS::MouseButtonID id )<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;if (mTrayMgr-&gt;injectMouseUp(arg, id)) return true;<br />
&nbsp;&nbsp;&nbsp;&nbsp;mCameraMan-&gt;injectMouseUp(arg, id);<br />
&nbsp;&nbsp;&nbsp;&nbsp;return true;<br />
}<br />
<br />
//Adjust mouse clipping area<br />
void BaseApplication::windowResized(Ogre::RenderWindow* rw)<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;unsigned int width, height, depth;<br />
&nbsp;&nbsp;&nbsp;&nbsp;int left, top;<br />
&nbsp;&nbsp;&nbsp;&nbsp;rw-&gt;getMetrics(width, height, depth, left, top);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;const OIS::MouseState &amp;ms = mMouse-&gt;getMouseState();<br />
&nbsp;&nbsp;&nbsp;&nbsp;ms.width = width;<br />
&nbsp;&nbsp;&nbsp;&nbsp;ms.height = height;<br />
}<br />
<br />
//Unattach OIS before window shutdown (very important under Linux)<br />
void BaseApplication::windowClosed(Ogre::RenderWindow* rw)<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;//Only close for window that created OIS (the main window in these demos)<br />
&nbsp;&nbsp;&nbsp;&nbsp;if( rw == mWindow )<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if( mInputManager )<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mInputManager-&gt;destroyInputObject( mMouse );<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mInputManager-&gt;destroyInputObject( mKeyboard );<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OIS::InputManager::destroyInputSystem(mInputManager);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mInputManager = 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}</code></div></div>
<br />
<br />
<br />
Ich komme nicht weiter<img src="images/smilies/sad.gif" style="vertical-align: middle;" border="0" alt="Sad" title="Sad" /> Bitte helft mir]]></description>
			<content:encoded><![CDATA[Hallo Leute,<br />
<br />
ich verzweifel grad ein bisschen. Habe heute angefangen mich mit Ogre3D auseinander zusetzen.<br />
<br />
Bin jetzt bei den Ogre3d.org Basic Tutorials bei "Basic Tutorial 3         Terrain, Sky, and Fog" <a href="http://www.ogre3d.org/tikiwiki/Basic+Tutorial+3&amp;structure=Tutorials" target="_blank">Zum Tutorial</a><br />
<br />
Habe alles so gemacht wie es dort beschrieben wird. Nun zu meinem Problem:<br />
<br />
Wenn ich das im OpenGL Modus starte, habe ich nicht mehr als 4 FPS. Meine Graka: GeForce GTX260. Daran kann es schonmal nicht liegen.<br />
<br />
Wenn ich das Game im DirectX Modus laufen lassen will, stürzt die ganze Geschichte bei mir ab.... und bekomme folgenden fehler:<br />
<br />
Unbehandelte Ausnahme bei 0x0fc2c63e in WaceWars.exe 0xC0000005: Zugriffsverletzung beim Lesen an Position 0xcccccccc<br />
<br />
Und markieren tut er mir in der BaseApplication.cpp:     mRoot-&gt;startRendering();<br />
<br />
Hier mal mein Code:<br />
<br />
RaceWars.cpp<br />
<div class="codeblock">
<div class="title">Code:<br />
</div><div class="body" dir="ltr"><code>/*<br />
-----------------------------------------------------------------------------<br />
Filename:&nbsp;&nbsp;&nbsp;&nbsp;RaceWars.cpp<br />
-----------------------------------------------------------------------------<br />
<br />
<br />
This source file is generated by the<br />
&nbsp;&nbsp; ___&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;__&nbsp;&nbsp;&nbsp;&nbsp;__ _&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_ <br />
&nbsp;&nbsp;/___&#92;__ _ _ __ ___&nbsp;&nbsp;&nbsp;&nbsp;/_&#92;&nbsp;&nbsp;_ __&nbsp;&nbsp;_ __/ / /&#92; &#92; (_)______ _ _ __ __| |<br />
 //&nbsp;&nbsp;// _` | '__/ _ &#92;&nbsp;&nbsp;//_&#92;&#92;| '_ &#92;| '_ &#92; &#92;/&nbsp;&nbsp;&#92;/ / |_&nbsp;&nbsp;/ _` | '__/ _` |<br />
/ &#92;_// (_| | | |&nbsp;&nbsp;__/ /&nbsp;&nbsp;_&nbsp;&nbsp;&#92; |_) | |_) &#92;&nbsp;&nbsp;/&#92;&nbsp;&nbsp;/| |/ / (_| | | | (_| |<br />
&#92;___/ &#92;__, |_|&nbsp;&nbsp;&#92;___| &#92;_/ &#92;_/ .__/| .__/ &#92;/&nbsp;&nbsp;&#92;/ |_/___&#92;__,_|_|&nbsp;&nbsp;&#92;__,_|<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|___/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |_|&nbsp;&nbsp; |_|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ogre 1.7.x Application Wizard for VC10 (August 2010)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;http://code.google.com/p/ogreappwizards/<br />
-----------------------------------------------------------------------------<br />
*/<br />
<br />
#include "RaceWars.h"<br />
<br />
OgreBites::Label* mInfoLabel;<br />
<br />
//-------------------------------------------------------------------------------------<br />
RaceWars::RaceWars(void)<br />
{<br />
}<br />
//-------------------------------------------------------------------------------------<br />
RaceWars::~RaceWars(void)<br />
{<br />
}<br />
<br />
//-------------------------------------------------------------------------------------<br />
<br />
<br />
void RaceWars::destroyScene(void)<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp; OGRE_DELETE mTerrainGroup;<br />
&nbsp;&nbsp;&nbsp;&nbsp; OGRE_DELETE mTerrainGlobals;<br />
}<br />
//-------------------------------------------------------------------------------------<br />
void getTerrainImage(bool flipX, bool flipY, Ogre::Image&amp; img)<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;img.load("terrain.png", Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME);<br />
&nbsp;&nbsp;&nbsp;&nbsp;if (flipX)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;img.flipAroundY();<br />
&nbsp;&nbsp;&nbsp;&nbsp;if (flipY)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;img.flipAroundX();<br />
}<br />
//-------------------------------------------------------------------------------------<br />
void RaceWars::defineTerrain(long x, long y)<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;Ogre::String filename = mTerrainGroup-&gt;generateFilename(x, y);<br />
&nbsp;&nbsp;&nbsp;&nbsp;if (Ogre::ResourceGroupManager::getSingleton().resourceExists(mTerrainGroup-&gt;getResourceGroup(), filename))<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mTerrainGroup-&gt;defineTerrain(x, y);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;else<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ogre::Image img;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;getTerrainImage(x % 2 != 0, y % 2 != 0, img);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mTerrainGroup-&gt;defineTerrain(x, y, &amp;img);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mTerrainsImported = true;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
//-------------------------------------------------------------------------------------<br />
void RaceWars::initBlendMaps(Ogre::Terrain* terrain)<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;Ogre::TerrainLayerBlendMap* blendMap0 = terrain-&gt;getLayerBlendMap(1);<br />
&nbsp;&nbsp;&nbsp;&nbsp;Ogre::TerrainLayerBlendMap* blendMap1 = terrain-&gt;getLayerBlendMap(2);<br />
&nbsp;&nbsp;&nbsp;&nbsp;Ogre::Real minHeight0 = 70;<br />
&nbsp;&nbsp;&nbsp;&nbsp;Ogre::Real fadeDist0 = 40;<br />
&nbsp;&nbsp;&nbsp;&nbsp;Ogre::Real minHeight1 = 70;<br />
&nbsp;&nbsp;&nbsp;&nbsp;Ogre::Real fadeDist1 = 15;<br />
&nbsp;&nbsp;&nbsp;&nbsp;float* pBlend1 = blendMap1-&gt;getBlendPointer();<br />
&nbsp;&nbsp;&nbsp;&nbsp;for (Ogre::uint16 y = 0; y &lt; terrain-&gt;getLayerBlendMapSize(); ++y)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (Ogre::uint16 x = 0; x &lt; terrain-&gt;getLayerBlendMapSize(); ++x)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ogre::Real tx, ty;<br />
 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;blendMap0-&gt;convertImageToTerrainSpace(x, y, &amp;tx, &amp;ty);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ogre::Real height = terrain-&gt;getHeightAtTerrainPosition(tx, ty);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ogre::Real val = (height - minHeight0) / fadeDist0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;val = Ogre::Math::Clamp(val, (Ogre::Real)0, (Ogre::Real)1);<br />
 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;val = (height - minHeight1) / fadeDist1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;val = Ogre::Math::Clamp(val, (Ogre::Real)0, (Ogre::Real)1);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*pBlend1++ = val;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;blendMap0-&gt;dirty();<br />
&nbsp;&nbsp;&nbsp;&nbsp;blendMap1-&gt;dirty();<br />
&nbsp;&nbsp;&nbsp;&nbsp;blendMap0-&gt;update();<br />
&nbsp;&nbsp;&nbsp;&nbsp;blendMap1-&gt;update();<br />
}<br />
//-------------------------------------------------------------------------------------<br />
void RaceWars::configureTerrainDefaults(Ogre::Light* light)<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;// Configure global<br />
&nbsp;&nbsp;&nbsp;&nbsp;mTerrainGlobals-&gt;setMaxPixelError(8);<br />
&nbsp;&nbsp;&nbsp;&nbsp;// testing composite map<br />
&nbsp;&nbsp;&nbsp;&nbsp;mTerrainGlobals-&gt;setCompositeMapDistance(3000);<br />
&nbsp;&nbsp;&nbsp;&nbsp;// Important to set these so that the terrain knows what to use for derived (non-realtime) data<br />
&nbsp;&nbsp;&nbsp;&nbsp;mTerrainGlobals-&gt;setLightMapDirection(light-&gt;getDerivedDirection());<br />
&nbsp;&nbsp;&nbsp;&nbsp;mTerrainGlobals-&gt;setCompositeMapAmbient(mSceneMgr-&gt;getAmbientLight());<br />
&nbsp;&nbsp;&nbsp;&nbsp;mTerrainGlobals-&gt;setCompositeMapDiffuse(light-&gt;getDiffuseColour());<br />
&nbsp;&nbsp;&nbsp;&nbsp;// Configure default import settings for if we use imported image<br />
&nbsp;&nbsp;&nbsp;&nbsp;Ogre::Terrain::ImportData&amp; defaultimp = mTerrainGroup-&gt;getDefaultImportSettings();<br />
&nbsp;&nbsp;&nbsp;&nbsp;defaultimp.terrainSize = 513;<br />
&nbsp;&nbsp;&nbsp;&nbsp;defaultimp.worldSize = 12000.0f;<br />
&nbsp;&nbsp;&nbsp;&nbsp;defaultimp.inputScale = 600;<br />
&nbsp;&nbsp;&nbsp;&nbsp;defaultimp.minBatchSize = 33;<br />
&nbsp;&nbsp;&nbsp;&nbsp;defaultimp.maxBatchSize = 65;<br />
&nbsp;&nbsp;&nbsp;&nbsp;// textures<br />
&nbsp;&nbsp;&nbsp;&nbsp;defaultimp.layerList.resize(3);<br />
&nbsp;&nbsp;&nbsp;&nbsp;defaultimp.layerList[0].worldSize = 100;<br />
&nbsp;&nbsp;&nbsp;&nbsp;defaultimp.layerList[0].textureNames.push_back("dirt_grayrocky_diffusespecular.dds");<br />
&nbsp;&nbsp;&nbsp;&nbsp;defaultimp.layerList[0].textureNames.push_back("dirt_grayrocky_normalheight.dds");<br />
&nbsp;&nbsp;&nbsp;&nbsp;defaultimp.layerList[1].worldSize = 30;<br />
&nbsp;&nbsp;&nbsp;&nbsp;defaultimp.layerList[1].textureNames.push_back("grass_green-01_diffusespecular.dds");<br />
&nbsp;&nbsp;&nbsp;&nbsp;defaultimp.layerList[1].textureNames.push_back("grass_green-01_normalheight.dds");<br />
&nbsp;&nbsp;&nbsp;&nbsp;defaultimp.layerList[2].worldSize = 200;<br />
&nbsp;&nbsp;&nbsp;&nbsp;defaultimp.layerList[2].textureNames.push_back("growth_weirdfungus-03_diffusespecular.dds");<br />
&nbsp;&nbsp;&nbsp;&nbsp;defaultimp.layerList[2].textureNames.push_back("growth_weirdfungus-03_normalheight.dds");<br />
}<br />
//-------------------------------------------------------------------------------------<br />
void RaceWars::createFrameListener(void)<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;BaseApplication::createFrameListener();<br />
 <br />
&nbsp;&nbsp;&nbsp;&nbsp;mInfoLabel = mTrayMgr-&gt;createLabel(OgreBites::TL_TOP, "TInfo", "", 350);<br />
}<br />
//-------------------------------------------------------------------------------------<br />
void RaceWars::createScene(void)<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;mCamera-&gt;setPosition(Ogre::Vector3(1683, 50, 2116));<br />
&nbsp;&nbsp;&nbsp;&nbsp;mCamera-&gt;lookAt(Ogre::Vector3(1963, 50, 1660));<br />
&nbsp;&nbsp;&nbsp;&nbsp;mCamera-&gt;setNearClipDistance(0.1);<br />
&nbsp;&nbsp;&nbsp;&nbsp;mCamera-&gt;setFarClipDistance(50000);<br />
 <br />
&nbsp;&nbsp;&nbsp;&nbsp;if (mRoot-&gt;getRenderSystem()-&gt;getCapabilities()-&gt;hasCapability(Ogre::RSC_INFINITE_FAR_PLANE))<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mCamera-&gt;setFarClipDistance(0);&nbsp;&nbsp; // enable infinite far clip distance if we can<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
 <br />
&nbsp;&nbsp;&nbsp;&nbsp;Ogre::MaterialManager::getSingleton().setDefaultTextureFiltering(Ogre::TFO_ANISOTROPIC);<br />
&nbsp;&nbsp;&nbsp;&nbsp;Ogre::MaterialManager::getSingleton().setDefaultAnisotropy(7);<br />
 <br />
&nbsp;&nbsp;&nbsp;&nbsp;Ogre::Vector3 lightdir(0.55, -0.3, 0.75);<br />
&nbsp;&nbsp;&nbsp;&nbsp;lightdir.normalise();<br />
 <br />
&nbsp;&nbsp;&nbsp;&nbsp;Ogre::Light* light = mSceneMgr-&gt;createLight("tstLight");<br />
&nbsp;&nbsp;&nbsp;&nbsp;light-&gt;setType(Ogre::Light::LT_DIRECTIONAL);<br />
&nbsp;&nbsp;&nbsp;&nbsp;light-&gt;setDirection(lightdir);<br />
&nbsp;&nbsp;&nbsp;&nbsp;light-&gt;setDiffuseColour(Ogre::ColourValue::White);<br />
&nbsp;&nbsp;&nbsp;&nbsp;light-&gt;setSpecularColour(Ogre::ColourValue(0.4, 0.4, 0.4));<br />
 <br />
&nbsp;&nbsp;&nbsp;&nbsp;mSceneMgr-&gt;setAmbientLight(Ogre::ColourValue(0.2, 0.2, 0.2));<br />
 <br />
&nbsp;&nbsp;&nbsp;&nbsp;mTerrainGlobals = OGRE_NEW Ogre::TerrainGlobalOptions();<br />
 <br />
&nbsp;&nbsp;&nbsp;&nbsp;mTerrainGroup = OGRE_NEW Ogre::TerrainGroup(mSceneMgr, Ogre::Terrain::ALIGN_X_Z, 513, 12000.0f);<br />
&nbsp;&nbsp;&nbsp;&nbsp;mTerrainGroup-&gt;setFilenameConvention(Ogre::String("RaceWars"), Ogre::String("dat"));<br />
&nbsp;&nbsp;&nbsp;&nbsp;mTerrainGroup-&gt;setOrigin(Ogre::Vector3::ZERO);<br />
 <br />
&nbsp;&nbsp;&nbsp;&nbsp;configureTerrainDefaults(light);<br />
 <br />
&nbsp;&nbsp;&nbsp;&nbsp;for (long x = 0; x &lt;= 0; ++x)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (long y = 0; y &lt;= 0; ++y)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;defineTerrain(x, y);<br />
 <br />
&nbsp;&nbsp;&nbsp;&nbsp;// sync load since we want everything in place when we start<br />
&nbsp;&nbsp;&nbsp;&nbsp;mTerrainGroup-&gt;loadAllTerrains(true);<br />
 <br />
&nbsp;&nbsp;&nbsp;&nbsp;if (mTerrainsImported)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ogre::TerrainGroup::TerrainIterator ti = mTerrainGroup-&gt;getTerrainIterator();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(ti.hasMoreElements())<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ogre::Terrain* t = ti.getNext()-&gt;instance;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;initBlendMaps(t);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
 <br />
&nbsp;&nbsp;&nbsp;&nbsp;mTerrainGroup-&gt;freeTemporaryResources();<br />
&nbsp;&nbsp;&nbsp;&nbsp;mSceneMgr-&gt;setSkyBox(true, "Examples/SpaceSkyBox", 100, false);<br />
&nbsp;&nbsp;&nbsp;&nbsp;Ogre::Plane plane;<br />
&nbsp;&nbsp;&nbsp;&nbsp;plane.d = 1000;<br />
&nbsp;&nbsp;&nbsp;&nbsp;plane.normal = Ogre::Vector3::NEGATIVE_UNIT_Y;<br />
<br />
}<br />
//-------------------------------------------------------------------------------------<br />
bool RaceWars::frameRenderingQueued(const Ogre::FrameEvent&amp; evt)<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;bool ret = BaseApplication::frameRenderingQueued(evt);<br />
 <br />
&nbsp;&nbsp;&nbsp;&nbsp;if (mTerrainGroup-&gt;isDerivedDataUpdateInProgress())<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mTrayMgr-&gt;moveWidgetToTray(mInfoLabel, OgreBites::TL_TOP, 0);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mInfoLabel-&gt;show();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (mTerrainsImported)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mInfoLabel-&gt;setCaption("Building terrain, please wait...");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mInfoLabel-&gt;setCaption("Updating textures, patience...");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;else<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mTrayMgr-&gt;removeWidgetFromTray(mInfoLabel);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mInfoLabel-&gt;hide();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (mTerrainsImported)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mTerrainGroup-&gt;saveAllTerrains(true);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mTerrainsImported = false;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
 <br />
&nbsp;&nbsp;&nbsp;&nbsp;return ret;<br />
}<br />
<br />
#if OGRE_PLATFORM == OGRE_PLATFORM_WIN32<br />
#define WIN32_LEAN_AND_MEAN<br />
#include "windows.h"<br />
#endif<br />
<br />
#ifdef __cplusplus<br />
extern "C" {<br />
#endif<br />
<br />
#if OGRE_PLATFORM == OGRE_PLATFORM_WIN32<br />
&nbsp;&nbsp;&nbsp;&nbsp;INT WINAPI WinMain( HINSTANCE hInst, HINSTANCE, LPSTR strCmdLine, INT )<br />
#else<br />
&nbsp;&nbsp;&nbsp;&nbsp;int main(int argc, char *argv[])<br />
#endif<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Create application object<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RaceWars app;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;app.go();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} catch( Ogre::Exception&amp; e ) {<br />
#if OGRE_PLATFORM == OGRE_PLATFORM_WIN32<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBox( NULL, e.getFullDescription().c_str(), "An exception has occured!", MB_OK | MB_ICONERROR | MB_TASKMODAL);<br />
#else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;std::cerr &lt;&lt; "An exception has occured: " &lt;&lt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.getFullDescription().c_str() &lt;&lt; std::endl;<br />
#endif<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
#ifdef __cplusplus<br />
}<br />
#endif</code></div></div>
<br />
<br />
<br />
RaceWars.h<br />
<div class="codeblock">
<div class="title">Code:<br />
</div><div class="body" dir="ltr"><code>/*<br />
-----------------------------------------------------------------------------<br />
Filename:&nbsp;&nbsp;&nbsp;&nbsp;RaceWars.h<br />
-----------------------------------------------------------------------------<br />
<br />
<br />
This source file is generated by the<br />
&nbsp;&nbsp; ___&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;__&nbsp;&nbsp;&nbsp;&nbsp;__ _&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_ <br />
&nbsp;&nbsp;/___&#92;__ _ _ __ ___&nbsp;&nbsp;&nbsp;&nbsp;/_&#92;&nbsp;&nbsp;_ __&nbsp;&nbsp;_ __/ / /&#92; &#92; (_)______ _ _ __ __| |<br />
 //&nbsp;&nbsp;// _` | '__/ _ &#92;&nbsp;&nbsp;//_&#92;&#92;| '_ &#92;| '_ &#92; &#92;/&nbsp;&nbsp;&#92;/ / |_&nbsp;&nbsp;/ _` | '__/ _` |<br />
/ &#92;_// (_| | | |&nbsp;&nbsp;__/ /&nbsp;&nbsp;_&nbsp;&nbsp;&#92; |_) | |_) &#92;&nbsp;&nbsp;/&#92;&nbsp;&nbsp;/| |/ / (_| | | | (_| |<br />
&#92;___/ &#92;__, |_|&nbsp;&nbsp;&#92;___| &#92;_/ &#92;_/ .__/| .__/ &#92;/&nbsp;&nbsp;&#92;/ |_/___&#92;__,_|_|&nbsp;&nbsp;&#92;__,_|<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|___/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |_|&nbsp;&nbsp; |_|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ogre 1.7.x Application Wizard for VC10 (August 2010)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;http://code.google.com/p/ogreappwizards/<br />
-----------------------------------------------------------------------------<br />
*/<br />
#ifndef __RaceWars_h_<br />
#define __RaceWars_h_<br />
<br />
#include "BaseApplication.h"<br />
#if OGRE_PLATFORM == OGRE_PLATFORM_WIN32<br />
#include "../res/resource.h"<br />
#endif<br />
#include &lt;Terrain&#92;OgreTerrain.h&gt;<br />
#include &lt;Terrain&#92;OgreTerrainGroup.h&gt;<br />
<br />
class RaceWars : public BaseApplication<br />
{<br />
private:<br />
&nbsp;&nbsp;&nbsp;&nbsp;Ogre::TerrainGlobalOptions* mTerrainGlobals;<br />
&nbsp;&nbsp;&nbsp;&nbsp;Ogre::TerrainGroup* mTerrainGroup;<br />
&nbsp;&nbsp;&nbsp;&nbsp;bool mTerrainsImported;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;void defineTerrain(long x, long y);<br />
&nbsp;&nbsp;&nbsp;&nbsp;void initBlendMaps(Ogre::Terrain* terrain);<br />
&nbsp;&nbsp;&nbsp;&nbsp;void configureTerrainDefaults(Ogre::Light* light);<br />
<br />
public:<br />
&nbsp;&nbsp;&nbsp;&nbsp;RaceWars(void);<br />
&nbsp;&nbsp;&nbsp;&nbsp;virtual ~RaceWars(void);<br />
<br />
protected:<br />
&nbsp;&nbsp;&nbsp;&nbsp;virtual void createScene(void);<br />
&nbsp;&nbsp;&nbsp;&nbsp;virtual void createFrameListener(void);<br />
&nbsp;&nbsp;&nbsp;&nbsp;virtual void destroyScene(void);<br />
&nbsp;&nbsp;&nbsp;&nbsp;virtual bool frameRenderingQueued(const Ogre::FrameEvent&amp; evt);<br />
};<br />
<br />
#endif // #ifndef __RaceWars_h_</code></div></div>
<br />
<br />
<br />
BaseApplication.cpp<br />
<div class="codeblock">
<div class="title">Code:<br />
</div><div class="body" dir="ltr"><code>/*<br />
-----------------------------------------------------------------------------<br />
Filename:&nbsp;&nbsp;&nbsp;&nbsp;BaseApplication.cpp<br />
-----------------------------------------------------------------------------<br />
<br />
<br />
This source file is generated by the<br />
&nbsp;&nbsp; ___&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;__&nbsp;&nbsp;&nbsp;&nbsp;__ _&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_ <br />
&nbsp;&nbsp;/___&#92;__ _ _ __ ___&nbsp;&nbsp;&nbsp;&nbsp;/_&#92;&nbsp;&nbsp;_ __&nbsp;&nbsp;_ __/ / /&#92; &#92; (_)______ _ _ __ __| |<br />
 //&nbsp;&nbsp;// _` | '__/ _ &#92;&nbsp;&nbsp;//_&#92;&#92;| '_ &#92;| '_ &#92; &#92;/&nbsp;&nbsp;&#92;/ / |_&nbsp;&nbsp;/ _` | '__/ _` |<br />
/ &#92;_// (_| | | |&nbsp;&nbsp;__/ /&nbsp;&nbsp;_&nbsp;&nbsp;&#92; |_) | |_) &#92;&nbsp;&nbsp;/&#92;&nbsp;&nbsp;/| |/ / (_| | | | (_| |<br />
&#92;___/ &#92;__, |_|&nbsp;&nbsp;&#92;___| &#92;_/ &#92;_/ .__/| .__/ &#92;/&nbsp;&nbsp;&#92;/ |_/___&#92;__,_|_|&nbsp;&nbsp;&#92;__,_|<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|___/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |_|&nbsp;&nbsp; |_|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ogre 1.7.x Application Wizard for VC10 (August 2010)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;http://code.google.com/p/ogreappwizards/<br />
-----------------------------------------------------------------------------<br />
*/<br />
#include "BaseApplication.h"<br />
<br />
#if OGRE_PLATFORM == OGRE_PLATFORM_WIN32<br />
#include "../res/resource.h"<br />
#endif<br />
<br />
<br />
//-------------------------------------------------------------------------------------<br />
BaseApplication::BaseApplication(void)<br />
&nbsp;&nbsp;&nbsp;&nbsp;: mRoot(0),<br />
&nbsp;&nbsp;&nbsp;&nbsp;mCamera(0),<br />
&nbsp;&nbsp;&nbsp;&nbsp;mSceneMgr(0),<br />
&nbsp;&nbsp;&nbsp;&nbsp;mWindow(0),<br />
&nbsp;&nbsp;&nbsp;&nbsp;mResourcesCfg(Ogre::StringUtil::BLANK),<br />
&nbsp;&nbsp;&nbsp;&nbsp;mPluginsCfg(Ogre::StringUtil::BLANK),<br />
&nbsp;&nbsp;&nbsp;&nbsp;mTrayMgr(0),<br />
&nbsp;&nbsp;&nbsp;&nbsp;mCameraMan(0),<br />
&nbsp;&nbsp;&nbsp;&nbsp;mDetailsPanel(0),<br />
&nbsp;&nbsp;&nbsp;&nbsp;mCursorWasVisible(false),<br />
&nbsp;&nbsp;&nbsp;&nbsp;mShutDown(false),<br />
&nbsp;&nbsp;&nbsp;&nbsp;mInputManager(0),<br />
&nbsp;&nbsp;&nbsp;&nbsp;mMouse(0),<br />
&nbsp;&nbsp;&nbsp;&nbsp;mKeyboard(0)<br />
{<br />
}<br />
<br />
//-------------------------------------------------------------------------------------<br />
BaseApplication::~BaseApplication(void)<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;if (mTrayMgr) delete mTrayMgr;<br />
&nbsp;&nbsp;&nbsp;&nbsp;if (mCameraMan) delete mCameraMan;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;//Remove ourself as a Window listener<br />
&nbsp;&nbsp;&nbsp;&nbsp;Ogre::WindowEventUtilities::removeWindowEventListener(mWindow, this);<br />
&nbsp;&nbsp;&nbsp;&nbsp;windowClosed(mWindow);<br />
&nbsp;&nbsp;&nbsp;&nbsp;delete mRoot;<br />
}<br />
<br />
//-------------------------------------------------------------------------------------<br />
bool BaseApplication::configure(void)<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;// Show the configuration dialog and initialise the system<br />
&nbsp;&nbsp;&nbsp;&nbsp;// You can skip this and use root.restoreConfig() to load configuration<br />
&nbsp;&nbsp;&nbsp;&nbsp;// settings if you were sure there are valid ones saved in ogre.cfg<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(mRoot-&gt;showConfigDialog())<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// If returned true, user clicked OK so initialise<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Here we choose to let the system create a default rendering window by passing 'true'<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mWindow = mRoot-&gt;initialise(true, "RaceWars Render Window");<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Let's add a nice window icon<br />
#if OGRE_PLATFORM == OGRE_PLATFORM_WIN32<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HWND hwnd;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mWindow-&gt;getCustomAttribute("WINDOW", (void*)&amp;hwnd);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LONG iconID&nbsp;&nbsp; = (LONG)LoadIcon( GetModuleHandle(0), MAKEINTRESOURCE(IDI_APPICON) );<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetClassLong( hwnd, GCL_HICON, iconID );<br />
#endif<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return true;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;else<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return false;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
//-------------------------------------------------------------------------------------<br />
void BaseApplication::chooseSceneManager(void)<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;// Get the SceneManager, in this case a generic one<br />
&nbsp;&nbsp;&nbsp;&nbsp;mSceneMgr = mRoot-&gt;createSceneManager(Ogre::ST_GENERIC);<br />
}<br />
//-------------------------------------------------------------------------------------<br />
void BaseApplication::createCamera(void)<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;// Create the camera<br />
&nbsp;&nbsp;&nbsp;&nbsp;mCamera = mSceneMgr-&gt;createCamera("PlayerCam");<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;// Position it at 500 in Z direction<br />
&nbsp;&nbsp;&nbsp;&nbsp;mCamera-&gt;setPosition(Ogre::Vector3(0,0,80));<br />
&nbsp;&nbsp;&nbsp;&nbsp;// Look back along -Z<br />
&nbsp;&nbsp;&nbsp;&nbsp;mCamera-&gt;lookAt(Ogre::Vector3(0,0,-300));<br />
&nbsp;&nbsp;&nbsp;&nbsp;mCamera-&gt;setNearClipDistance(5);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;mCameraMan = new OgreBites::SdkCameraMan(mCamera);&nbsp;&nbsp; // create a default camera controller<br />
}<br />
//-------------------------------------------------------------------------------------<br />
void BaseApplication::createFrameListener(void)<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;Ogre::LogManager::getSingletonPtr()-&gt;logMessage("*** Initializing OIS ***");<br />
&nbsp;&nbsp;&nbsp;&nbsp;OIS::ParamList pl;<br />
&nbsp;&nbsp;&nbsp;&nbsp;size_t windowHnd = 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;std::ostringstream windowHndStr;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;mWindow-&gt;getCustomAttribute("WINDOW", &amp;windowHnd);<br />
&nbsp;&nbsp;&nbsp;&nbsp;windowHndStr &lt;&lt; windowHnd;<br />
&nbsp;&nbsp;&nbsp;&nbsp;pl.insert(std::make_pair(std::string("WINDOW"), windowHndStr.str()));<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;mInputManager = OIS::InputManager::createInputSystem( pl );<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;mKeyboard = static_cast&lt;OIS::Keyboard*&gt;(mInputManager-&gt;createInputObject( OIS::OISKeyboard, true ));<br />
&nbsp;&nbsp;&nbsp;&nbsp;mMouse = static_cast&lt;OIS::Mouse*&gt;(mInputManager-&gt;createInputObject( OIS::OISMouse, true ));<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;mMouse-&gt;setEventCallback(this);<br />
&nbsp;&nbsp;&nbsp;&nbsp;mKeyboard-&gt;setEventCallback(this);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;//Set initial mouse clipping size<br />
&nbsp;&nbsp;&nbsp;&nbsp;windowResized(mWindow);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;//Register as a Window listener<br />
&nbsp;&nbsp;&nbsp;&nbsp;Ogre::WindowEventUtilities::addWindowEventListener(mWindow, this);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;mTrayMgr = new OgreBites::SdkTrayManager("InterfaceName", mWindow, mMouse, this);<br />
&nbsp;&nbsp;&nbsp;&nbsp;mTrayMgr-&gt;showFrameStats(OgreBites::TL_BOTTOMLEFT);<br />
&nbsp;&nbsp;&nbsp;&nbsp;mTrayMgr-&gt;showLogo(OgreBites::TL_BOTTOMRIGHT);<br />
&nbsp;&nbsp;&nbsp;&nbsp;mTrayMgr-&gt;hideCursor();<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;// create a params panel for displaying sample details<br />
&nbsp;&nbsp;&nbsp;&nbsp;Ogre::StringVector items;<br />
&nbsp;&nbsp;&nbsp;&nbsp;items.push_back("cam.pX");<br />
&nbsp;&nbsp;&nbsp;&nbsp;items.push_back("cam.pY");<br />
&nbsp;&nbsp;&nbsp;&nbsp;items.push_back("cam.pZ");<br />
&nbsp;&nbsp;&nbsp;&nbsp;items.push_back("");<br />
&nbsp;&nbsp;&nbsp;&nbsp;items.push_back("cam.oW");<br />
&nbsp;&nbsp;&nbsp;&nbsp;items.push_back("cam.oX");<br />
&nbsp;&nbsp;&nbsp;&nbsp;items.push_back("cam.oY");<br />
&nbsp;&nbsp;&nbsp;&nbsp;items.push_back("cam.oZ");<br />
&nbsp;&nbsp;&nbsp;&nbsp;items.push_back("");<br />
&nbsp;&nbsp;&nbsp;&nbsp;items.push_back("Filtering");<br />
&nbsp;&nbsp;&nbsp;&nbsp;items.push_back("Poly Mode");<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;mDetailsPanel = mTrayMgr-&gt;createParamsPanel(OgreBites::TL_NONE, "DetailsPanel", 200, items);<br />
&nbsp;&nbsp;&nbsp;&nbsp;mDetailsPanel-&gt;setParamValue(9, "Bilinear");<br />
&nbsp;&nbsp;&nbsp;&nbsp;mDetailsPanel-&gt;setParamValue(10, "Solid");<br />
&nbsp;&nbsp;&nbsp;&nbsp;mDetailsPanel-&gt;hide();<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;mRoot-&gt;addFrameListener(this);<br />
}<br />
//-------------------------------------------------------------------------------------<br />
void BaseApplication::destroyScene(void)<br />
{<br />
}<br />
//-------------------------------------------------------------------------------------<br />
void BaseApplication::createViewports(void)<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;// Create one viewport, entire window<br />
&nbsp;&nbsp;&nbsp;&nbsp;Ogre::Viewport* vp = mWindow-&gt;addViewport(mCamera);<br />
&nbsp;&nbsp;&nbsp;&nbsp;vp-&gt;setBackgroundColour(Ogre::ColourValue(0,0,0));<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;// Alter the camera aspect ratio to match the viewport<br />
&nbsp;&nbsp;&nbsp;&nbsp;mCamera-&gt;setAspectRatio(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ogre::Real(vp-&gt;getActualWidth()) / Ogre::Real(vp-&gt;getActualHeight()));<br />
}<br />
//-------------------------------------------------------------------------------------<br />
void BaseApplication::setupResources(void)<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;// Load resource paths from config file<br />
&nbsp;&nbsp;&nbsp;&nbsp;Ogre::ConfigFile cf;<br />
&nbsp;&nbsp;&nbsp;&nbsp;cf.load(mResourcesCfg);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;// Go through all sections &amp; settings in the file<br />
&nbsp;&nbsp;&nbsp;&nbsp;Ogre::ConfigFile::SectionIterator seci = cf.getSectionIterator();<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;Ogre::String secName, typeName, archName;<br />
&nbsp;&nbsp;&nbsp;&nbsp;while (seci.hasMoreElements())<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;secName = seci.peekNextKey();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ogre::ConfigFile::SettingsMultiMap *settings = seci.getNext();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ogre::ConfigFile::SettingsMultiMap::iterator i;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (i = settings-&gt;begin(); i != settings-&gt;end(); ++i)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;typeName = i-&gt;first;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;archName = i-&gt;second;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ogre::ResourceGroupManager::getSingleton().addResourceLocation(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;archName, typeName, secName);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
//-------------------------------------------------------------------------------------<br />
void BaseApplication::createResourceListener(void)<br />
{<br />
<br />
}<br />
//-------------------------------------------------------------------------------------<br />
void BaseApplication::loadResources(void)<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;Ogre::ResourceGroupManager::getSingleton().initialiseAllResourceGroups();<br />
}<br />
//-------------------------------------------------------------------------------------<br />
void BaseApplication::go(void)<br />
{<br />
#ifdef _DEBUG<br />
&nbsp;&nbsp;&nbsp;&nbsp;mResourcesCfg = "resources_d.cfg";<br />
&nbsp;&nbsp;&nbsp;&nbsp;mPluginsCfg = "plugins_d.cfg";<br />
#else<br />
&nbsp;&nbsp;&nbsp;&nbsp;mResourcesCfg = "resources.cfg";<br />
&nbsp;&nbsp;&nbsp;&nbsp;mPluginsCfg = "plugins.cfg";<br />
#endif<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;if (!setup())<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;mRoot-&gt;startRendering();<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;// clean up<br />
&nbsp;&nbsp;&nbsp;&nbsp;destroyScene();<br />
}<br />
//-------------------------------------------------------------------------------------<br />
bool BaseApplication::setup(void)<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;mRoot = new Ogre::Root(mPluginsCfg);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;setupResources();<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;bool carryOn = configure();<br />
&nbsp;&nbsp;&nbsp;&nbsp;if (!carryOn) return false;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;chooseSceneManager();<br />
&nbsp;&nbsp;&nbsp;&nbsp;createCamera();<br />
&nbsp;&nbsp;&nbsp;&nbsp;createViewports();<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;// Set default mipmap level (NB some APIs ignore this)<br />
&nbsp;&nbsp;&nbsp;&nbsp;Ogre::TextureManager::getSingleton().setDefaultNumMipmaps(5);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;// Create any resource listeners (for loading screens)<br />
&nbsp;&nbsp;&nbsp;&nbsp;createResourceListener();<br />
&nbsp;&nbsp;&nbsp;&nbsp;// Load resources<br />
&nbsp;&nbsp;&nbsp;&nbsp;loadResources();<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;createFrameListener();<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;// Create the scene<br />
&nbsp;&nbsp;&nbsp;&nbsp;createScene();<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;return true;<br />
};<br />
//-------------------------------------------------------------------------------------<br />
bool BaseApplication::frameRenderingQueued(const Ogre::FrameEvent&amp; evt)<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(mWindow-&gt;isClosed())<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return false;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(mShutDown)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return false;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;//Need to capture/update each device<br />
&nbsp;&nbsp;&nbsp;&nbsp;mKeyboard-&gt;capture();<br />
&nbsp;&nbsp;&nbsp;&nbsp;mMouse-&gt;capture();<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;mTrayMgr-&gt;frameRenderingQueued(evt);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;if (!mTrayMgr-&gt;isDialogVisible())<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mCameraMan-&gt;frameRenderingQueued(evt);&nbsp;&nbsp; // if dialog isn't up, then update the camera<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (mDetailsPanel-&gt;isVisible())&nbsp;&nbsp; // if details panel is visible, then update its contents<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mDetailsPanel-&gt;setParamValue(0, Ogre::StringConverter::toString(mCamera-&gt;getDerivedPosition().x));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mDetailsPanel-&gt;setParamValue(1, Ogre::StringConverter::toString(mCamera-&gt;getDerivedPosition().y));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mDetailsPanel-&gt;setParamValue(2, Ogre::StringConverter::toString(mCamera-&gt;getDerivedPosition().z));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mDetailsPanel-&gt;setParamValue(4, Ogre::StringConverter::toString(mCamera-&gt;getDerivedOrientation().w));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mDetailsPanel-&gt;setParamValue(5, Ogre::StringConverter::toString(mCamera-&gt;getDerivedOrientation().x));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mDetailsPanel-&gt;setParamValue(6, Ogre::StringConverter::toString(mCamera-&gt;getDerivedOrientation().y));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mDetailsPanel-&gt;setParamValue(7, Ogre::StringConverter::toString(mCamera-&gt;getDerivedOrientation().z));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;return true;<br />
}<br />
//-------------------------------------------------------------------------------------<br />
bool BaseApplication::keyPressed( const OIS::KeyEvent &amp;arg )<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;if (mTrayMgr-&gt;isDialogVisible()) return true;&nbsp;&nbsp; // don't process any more keys if dialog is up<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;if (arg.key == OIS::KC_F)&nbsp;&nbsp; // toggle visibility of advanced frame stats<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mTrayMgr-&gt;toggleAdvancedFrameStats();<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;else if (arg.key == OIS::KC_G)&nbsp;&nbsp; // toggle visibility of even rarer debugging details<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (mDetailsPanel-&gt;getTrayLocation() == OgreBites::TL_NONE)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mTrayMgr-&gt;moveWidgetToTray(mDetailsPanel, OgreBites::TL_TOPRIGHT, 0);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mDetailsPanel-&gt;show();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mTrayMgr-&gt;removeWidgetFromTray(mDetailsPanel);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mDetailsPanel-&gt;hide();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;else if (arg.key == OIS::KC_T)&nbsp;&nbsp; // cycle polygon rendering mode<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ogre::String newVal;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ogre::TextureFilterOptions tfo;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsigned int aniso;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;switch (mDetailsPanel-&gt;getParamValue(9).asUTF8()[0])<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case 'B':<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newVal = "Trilinear";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tfo = Ogre::TFO_TRILINEAR;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;aniso = 1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case 'T':<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newVal = "Anisotropic";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tfo = Ogre::TFO_ANISOTROPIC;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;aniso = 8;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case 'A':<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newVal = "None";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tfo = Ogre::TFO_NONE;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;aniso = 1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;default:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newVal = "Bilinear";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tfo = Ogre::TFO_BILINEAR;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;aniso = 1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ogre::MaterialManager::getSingleton().setDefaultTextureFiltering(tfo);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ogre::MaterialManager::getSingleton().setDefaultAnisotropy(aniso);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mDetailsPanel-&gt;setParamValue(9, newVal);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;else if (arg.key == OIS::KC_R)&nbsp;&nbsp; // cycle polygon rendering mode<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ogre::String newVal;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ogre::PolygonMode pm;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;switch (mCamera-&gt;getPolygonMode())<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case Ogre::PM_SOLID:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newVal = "Wireframe";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pm = Ogre::PM_WIREFRAME;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case Ogre::PM_WIREFRAME:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newVal = "Points";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pm = Ogre::PM_POINTS;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;default:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newVal = "Solid";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pm = Ogre::PM_SOLID;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mCamera-&gt;setPolygonMode(pm);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mDetailsPanel-&gt;setParamValue(10, newVal);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;else if(arg.key == OIS::KC_F5)&nbsp;&nbsp; // refresh all textures<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ogre::TextureManager::getSingleton().reloadAll();<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;else if (arg.key == OIS::KC_SYSRQ)&nbsp;&nbsp; // take a screenshot<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mWindow-&gt;writeContentsToTimestampedFile("screenshot", ".jpg");<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;else if (arg.key == OIS::KC_ESCAPE)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mShutDown = true;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;mCameraMan-&gt;injectKeyDown(arg);<br />
&nbsp;&nbsp;&nbsp;&nbsp;return true;<br />
}<br />
<br />
bool BaseApplication::keyReleased( const OIS::KeyEvent &amp;arg )<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;mCameraMan-&gt;injectKeyUp(arg);<br />
&nbsp;&nbsp;&nbsp;&nbsp;return true;<br />
}<br />
<br />
bool BaseApplication::mouseMoved( const OIS::MouseEvent &amp;arg )<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;if (mTrayMgr-&gt;injectMouseMove(arg)) return true;<br />
&nbsp;&nbsp;&nbsp;&nbsp;mCameraMan-&gt;injectMouseMove(arg);<br />
&nbsp;&nbsp;&nbsp;&nbsp;return true;<br />
}<br />
<br />
bool BaseApplication::mousePressed( const OIS::MouseEvent &amp;arg, OIS::MouseButtonID id )<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;if (mTrayMgr-&gt;injectMouseDown(arg, id)) return true;<br />
&nbsp;&nbsp;&nbsp;&nbsp;mCameraMan-&gt;injectMouseDown(arg, id);<br />
&nbsp;&nbsp;&nbsp;&nbsp;return true;<br />
}<br />
<br />
bool BaseApplication::mouseReleased( const OIS::MouseEvent &amp;arg, OIS::MouseButtonID id )<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;if (mTrayMgr-&gt;injectMouseUp(arg, id)) return true;<br />
&nbsp;&nbsp;&nbsp;&nbsp;mCameraMan-&gt;injectMouseUp(arg, id);<br />
&nbsp;&nbsp;&nbsp;&nbsp;return true;<br />
}<br />
<br />
//Adjust mouse clipping area<br />
void BaseApplication::windowResized(Ogre::RenderWindow* rw)<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;unsigned int width, height, depth;<br />
&nbsp;&nbsp;&nbsp;&nbsp;int left, top;<br />
&nbsp;&nbsp;&nbsp;&nbsp;rw-&gt;getMetrics(width, height, depth, left, top);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;const OIS::MouseState &amp;ms = mMouse-&gt;getMouseState();<br />
&nbsp;&nbsp;&nbsp;&nbsp;ms.width = width;<br />
&nbsp;&nbsp;&nbsp;&nbsp;ms.height = height;<br />
}<br />
<br />
//Unattach OIS before window shutdown (very important under Linux)<br />
void BaseApplication::windowClosed(Ogre::RenderWindow* rw)<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;//Only close for window that created OIS (the main window in these demos)<br />
&nbsp;&nbsp;&nbsp;&nbsp;if( rw == mWindow )<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if( mInputManager )<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mInputManager-&gt;destroyInputObject( mMouse );<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mInputManager-&gt;destroyInputObject( mKeyboard );<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OIS::InputManager::destroyInputSystem(mInputManager);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mInputManager = 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}</code></div></div>
<br />
<br />
<br />
Ich komme nicht weiter<img src="images/smilies/sad.gif" style="vertical-align: middle;" border="0" alt="Sad" title="Sad" /> Bitte helft mir]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Problem c::b Ogre]]></title>
			<link>http://www.ogre3d.de/forum/showthread.php?tid=290</link>
			<pubDate>Wed, 09 Feb 2011 15:40:47 +0100</pubDate>
			<guid isPermaLink="false">http://www.ogre3d.de/forum/showthread.php?tid=290</guid>
			<description><![CDATA[Hallo zusammen,<br />
<br />
ich möchte gern mein Projekt auf c::b umstellen und bin nun auch schon so weit das ich das Projekt erstellen kann. Nun habe ich das Problem das ich beim Starten noch einige Fehler habe. In der SDK für minGW ist zwar die Datei RenderSystem_Direct3D9_d.dll enhalten aber diese ist leer und daher bekomme ich beim ausführen Fehler.<br />
<br />
MfG Pahli]]></description>
			<content:encoded><![CDATA[Hallo zusammen,<br />
<br />
ich möchte gern mein Projekt auf c::b umstellen und bin nun auch schon so weit das ich das Projekt erstellen kann. Nun habe ich das Problem das ich beim Starten noch einige Fehler habe. In der SDK für minGW ist zwar die Datei RenderSystem_Direct3D9_d.dll enhalten aber diese ist leer und daher bekomme ich beim ausführen Fehler.<br />
<br />
MfG Pahli]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Fehler mit meshes: MeshSerializer]]></title>
			<link>http://www.ogre3d.de/forum/showthread.php?tid=289</link>
			<pubDate>Fri, 21 Jan 2011 15:47:30 +0100</pubDate>
			<guid isPermaLink="false">http://www.ogre3d.de/forum/showthread.php?tid=289</guid>
			<description><![CDATA[Hallo Leute,<br />
<br />
nachdem alles installiert wurde (Ogre, CodeBlocks, OIS,..usw), kompilierte auch alles ganz schön. Beim starten TutorialApplication.cpp gibt es jedoch Probleme mit den Models.<br />
<br />
<div class="codeblock">
<div class="title">Code:<br />
</div><div class="body" dir="ltr"><code>An exception has occured: OGRE EXCEPTION(7:InternalErrorException): Cannot find serializer implementation for current version [MeshSerializer_v1.8] in MeshSerializer::importMesh at /build/buildd/ogre-1.7.2/OgreMain/src/OgreMeshSerializer.cpp (line 118)</code></div></div>
<br />
Derzeit steht nur folgendes in der createSzene Methode:<br />
<div class="codeblock">
<div class="title">Code:<br />
</div><div class="body" dir="ltr"><code>mSceneMgr-&gt;setAmbientLight(Ogre::ColourValue(1.0, 1.0, 1.0));<br />
&nbsp;&nbsp;&nbsp;&nbsp;Ogre::Entity* ogreHead = mSceneMgr-&gt;createEntity("Head", "penguin.mesh");<br />
&nbsp;&nbsp;&nbsp;&nbsp;Ogre::SceneNode* headNode = mSceneMgr-&gt;getRootSceneNode()-&gt;createChildSceneNode("HeadNode");<br />
&nbsp;&nbsp;&nbsp;&nbsp;headNode-&gt;attachObject(ogreHead);</code></div></div>
<br />
Passen da die .mesh nicht zu meiner Ogre Version 1.7.2 (Ubuntu).<br />
<br />
Na ja ok, dachte mir, ich probiere das einfach mal mit einem Cube von Blender exportiert. Blender exportiert mir aber nur cube.mesh.xml.<br />
Das sollte ich also noch ingendwie in die binary konvertieren.<br />
<br />
Angeblich gibts ja auch was damit blender das direkt kann. (kriege aber nur .xml) =&gt; Konverter nicht installiert.<br />
<br />
Der OgreXMLConverter in der Shell sollte bei Linux dabei sein. Nur leider hat da mein cmake auch versagt (cmake schreint übrigends ziemlich cool zu sein, muss mir das mal genauer reinziehen)<br />
<br />
[edit]Habe gerade erst gecheckt dass es ja ogre-tools gibt, das mit dem Konvertieren könnt ihr jetzt also erstmal vergessen habt mit eigenen Files auch nicht funktioniert[/später]<br />
<br />
So, wie könnte ich jetzt weiter machen, mir gehen langsam die ideen aus.<br />
<br />
Heißt die Fehlermeldung dass mein MeshSerializer zu alt ist für die meshes oder umgekehrt? Oder wie?<br />
<br />
Wäre super wenn mir ein paar nette Leute helfen würden.<br />
<br />
thx und lg<br />
Darian]]></description>
			<content:encoded><![CDATA[Hallo Leute,<br />
<br />
nachdem alles installiert wurde (Ogre, CodeBlocks, OIS,..usw), kompilierte auch alles ganz schön. Beim starten TutorialApplication.cpp gibt es jedoch Probleme mit den Models.<br />
<br />
<div class="codeblock">
<div class="title">Code:<br />
</div><div class="body" dir="ltr"><code>An exception has occured: OGRE EXCEPTION(7:InternalErrorException): Cannot find serializer implementation for current version [MeshSerializer_v1.8] in MeshSerializer::importMesh at /build/buildd/ogre-1.7.2/OgreMain/src/OgreMeshSerializer.cpp (line 118)</code></div></div>
<br />
Derzeit steht nur folgendes in der createSzene Methode:<br />
<div class="codeblock">
<div class="title">Code:<br />
</div><div class="body" dir="ltr"><code>mSceneMgr-&gt;setAmbientLight(Ogre::ColourValue(1.0, 1.0, 1.0));<br />
&nbsp;&nbsp;&nbsp;&nbsp;Ogre::Entity* ogreHead = mSceneMgr-&gt;createEntity("Head", "penguin.mesh");<br />
&nbsp;&nbsp;&nbsp;&nbsp;Ogre::SceneNode* headNode = mSceneMgr-&gt;getRootSceneNode()-&gt;createChildSceneNode("HeadNode");<br />
&nbsp;&nbsp;&nbsp;&nbsp;headNode-&gt;attachObject(ogreHead);</code></div></div>
<br />
Passen da die .mesh nicht zu meiner Ogre Version 1.7.2 (Ubuntu).<br />
<br />
Na ja ok, dachte mir, ich probiere das einfach mal mit einem Cube von Blender exportiert. Blender exportiert mir aber nur cube.mesh.xml.<br />
Das sollte ich also noch ingendwie in die binary konvertieren.<br />
<br />
Angeblich gibts ja auch was damit blender das direkt kann. (kriege aber nur .xml) =&gt; Konverter nicht installiert.<br />
<br />
Der OgreXMLConverter in der Shell sollte bei Linux dabei sein. Nur leider hat da mein cmake auch versagt (cmake schreint übrigends ziemlich cool zu sein, muss mir das mal genauer reinziehen)<br />
<br />
[edit]Habe gerade erst gecheckt dass es ja ogre-tools gibt, das mit dem Konvertieren könnt ihr jetzt also erstmal vergessen habt mit eigenen Files auch nicht funktioniert[/später]<br />
<br />
So, wie könnte ich jetzt weiter machen, mir gehen langsam die ideen aus.<br />
<br />
Heißt die Fehlermeldung dass mein MeshSerializer zu alt ist für die meshes oder umgekehrt? Oder wie?<br />
<br />
Wäre super wenn mir ein paar nette Leute helfen würden.<br />
<br />
thx und lg<br />
Darian]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Ogre installation (ois_d.lib)]]></title>
			<link>http://www.ogre3d.de/forum/showthread.php?tid=287</link>
			<pubDate>Thu, 18 Nov 2010 18:45:54 +0100</pubDate>
			<guid isPermaLink="false">http://www.ogre3d.de/forum/showthread.php?tid=287</guid>
			<description><![CDATA[Hallo zusammen,<br />
<br />
ich habe ein Problem bei der Installation von Ogre. Vorweg, ich benutze Arch Linux. <br />
Zuerst habe ich Ogre über das Archlinux Repo installiert und versucht ein neues projekt in Codeblocks zu starten. Zuerst kam die fehlermeldung das OgreMain_d fehlt. Nach einigem Lesen von Wiki etc herausgefunden das diese Datei nur für den Debug Modus benötigt wird (bei Release ging alles wunderbar mit linken von OgreMain) nur eben der Debug Modus würde fehlen.<br />
<br />
Dann hab ich mir die Source geladen und selber kompiliert (sowohl für release als auch debug) weil ich schon gerne einen Debug Modus hätte, vor allem da ich kompletter Anfänger bin. Das hat soweit funktioniert, nur bin ich jetzt wieder an einem Problem angelangt, eben bei der ois_d.lib. Hab mir dann auch for OIS die Source geladen, kompiliert und installiert. Doch hier fehlt nun eben auch die ois_d für den Debug modus. Für Release sind die Dateien vorhanden und es funktioniert soweit. Ich finde auch keinen Sample Ordner wo angeblich die ois_d drinliegen könnte (Obwohl ich die Ogre Source mit Samples kompiliert und installiert habe).<br />
Ich habe jetzt keine Ahnung wo ich diese herbekommen soll (bzw weiß auch nicht ob noch mehr dateien für den debug modus nötig sind). Auch vor der Installation von OIS bei ./configure und make keine Ahnung ob es eine Option gibt die mir diese Dateien erstellt.<br />
Wäre super wenn mir jemand einige Denkanstöße oder Lösungen geben könnte.<br />
<br />
Grüße Skullcrasher]]></description>
			<content:encoded><![CDATA[Hallo zusammen,<br />
<br />
ich habe ein Problem bei der Installation von Ogre. Vorweg, ich benutze Arch Linux. <br />
Zuerst habe ich Ogre über das Archlinux Repo installiert und versucht ein neues projekt in Codeblocks zu starten. Zuerst kam die fehlermeldung das OgreMain_d fehlt. Nach einigem Lesen von Wiki etc herausgefunden das diese Datei nur für den Debug Modus benötigt wird (bei Release ging alles wunderbar mit linken von OgreMain) nur eben der Debug Modus würde fehlen.<br />
<br />
Dann hab ich mir die Source geladen und selber kompiliert (sowohl für release als auch debug) weil ich schon gerne einen Debug Modus hätte, vor allem da ich kompletter Anfänger bin. Das hat soweit funktioniert, nur bin ich jetzt wieder an einem Problem angelangt, eben bei der ois_d.lib. Hab mir dann auch for OIS die Source geladen, kompiliert und installiert. Doch hier fehlt nun eben auch die ois_d für den Debug modus. Für Release sind die Dateien vorhanden und es funktioniert soweit. Ich finde auch keinen Sample Ordner wo angeblich die ois_d drinliegen könnte (Obwohl ich die Ogre Source mit Samples kompiliert und installiert habe).<br />
Ich habe jetzt keine Ahnung wo ich diese herbekommen soll (bzw weiß auch nicht ob noch mehr dateien für den debug modus nötig sind). Auch vor der Installation von OIS bei ./configure und make keine Ahnung ob es eine Option gibt die mir diese Dateien erstellt.<br />
Wäre super wenn mir jemand einige Denkanstöße oder Lösungen geben könnte.<br />
<br />
Grüße Skullcrasher]]></content:encoded>
		</item>
	</channel>
</rss>
