Cocos2d-x: Source-Code modifizieren

Lesezeit: 3 Minuten

Cocos2d-x kommt als Open-Source daher. Viele Funktionalitäten kann man aus dem Code ablesen. Grundsätzlich bin ich abgeneigt, an diesen Sourcen rumzufummeln, hat man doch später bei Updates der Engine dann größere Probleme.

Nicht immer lassen sich allerdings Funktionalitäten der internen Basis-Klassen durch Ableitungen erweitern. Ich modifiziere also die Sourcen des internen Materials.

Das Material für 2D

Die Basis für das Sprite3DMaterial liegt im zweidimensionalen – genauer unter cocos2d\cocos\renderer\CCMaterial.h/.cpp (im Projektverzeichnis). Hier ist auch der Parser für die Sampler versteckt – dieser ermöglicht das Laden der Datei tile3d.material, in der ich ja Shader und Texturen definiere. Ich möchte vorerst die Textur parametrieren – also die Material-Datei so aufbauen:

Statt des fixen Pfades (vorher ja terrain/default_tile.png) soll zur Laufzeit dort die heruntergeladene Textur benutzt werden – un zwar an der Stelle *uv*.

In CCMaterial.h füge ich hinzu:

Und in CCMaterial.cpp ab Zeile 218 ersetze ich meinen Platzhalter durch den (später) übergebenen String:

Das Material für 3D

CCSprite3DMaterial ist von CCMaterial abgeleitet und erweitert die Funktionalität für die Belange von dreidimensionalen Objekten. Finden kann man die Klasse unter cocos2d\cocos\3d\CCSprite3dMaterial.h/.cpp. Dort füge ich eine neue statische Funktion hinzu:

Implementiert analog der createWithFilename – lediglich ohne Cache und mit Setzen des internen Parameters:

Falls ich dann auf Cocos2d-x 3.18 update, muss ich diese Änderungen dann wieder dort neu modifizieren – es sei denn, die Funktionalität wird entsprechend ereitert.

Als Memo an mich selbst gibt ja diesen Blog hier, der dokumentiert, was ich da verbrochen habe.

Umstrukturieren gfxTile3d

Mein Tile hat ja immer noch die Textur vom Server geladen – jetzt kann ich ihm das wieder geben. Dazu verschiebe ich allerdings die Material-Definition auf den Zeitpunkt, nach dem die Textur geladen wurde – also ans Ende von gfxTile::onLoadTextureCompleted:

Der zweite Parameter ist jetzt mein Textur-File, das hoffentlich den Weg bis ins Material findet.

Na also!

Revision 63

Android, iOS

Weiterführende Links

Damit es mal endlich marsähnlich wird, lege ich nun den Fokus auf das Mesh und seine Textur – vom Server aus. In den nächsten Blogs beschäftige ich mit der Oberfläche des Mars und wie diese als 3d Tiles generiert werden können: Mission on Mars: Ein Tile aus einer Highmap

 

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.