Hallo liebe Community.
Ich arbeite mich derzeit in Irrlicht ein und habe bereits viele Tutorials durchgearbeitet. Nun versuche ich als erste kleine "eigene" Übung, ein einfaches Kartenspiel, welches ich in 2D (ohne Irrlicht) geschrieben hatte, mit Irrlicht in 3D umzuschreiben.
Dazu habe ich mit Blender ein mesh erstellt und mit 2 Texturen versehen. Eine Textur für die Vorderseite und eine für die Rückseite. Exportiert habe ich das mesh in das 3ds-Format. Das Laden und Anzeigen mit Irrlicht klappt inzwischen wunderbar (Ich benutze Code::Blocks, falls das wichtig ist).
Nun zu meinem Problem:
Für das Spiel brauche ich 32 Karten und möchte das mesh entsprechend für alle Karten benutzen. Natürlich sollen die Vorderseiten der Karten alle verschieden sein. Daher versuche ich beim Erstellen der SceneNodes jedem der 32 meshes eine andere Textur als Vorderseite zuzuweisen. Nur leider wird auch immer gleich die Rückseite mit geändert. Irgendetwas mache ich also falsch. Nur was...?
Hier mein Testcode:
Code:
#include <irrlicht.h>
using namespace irr;
using namespace core;
using namespace scene;
using namespace video;
int main(int argc, char** argv)
{
IrrlichtDevice *device =
createDevice(EDT_SOFTWARE, dimension2d<s32>(640, 480), 16,
false, false, false, 0);
IVideoDriver* driver = device->getVideoDriver();
ISceneManager* smgr = device->getSceneManager();
IMeshSceneNode* node = smgr->addMeshSceneNode(smgr->getMesh("Sets/ABC/card.3ds"));
if (node)
{
int i = node->getMaterialCount(); // zeigt i=2 an
node->setMaterialFlag(EMF_LIGHTING, false);
node->setScale(core::vector3df(10,10,10));
node->setPosition(vector3df(0,0,0));
node->setMaterialTexture( 0, driver->getTexture("Sets/ABC/3.jpg") ); //gibt allen Seiten die Textur 3.jpg
node->setMaterialTexture( 1, driver->getTexture("Sets/ABC/33.jpg") ); //keine Wirkung ?!?
}
smgr->addCameraSceneNode(0, vector3df(0,30,-40), vector3df(0,5,0));
while(device->run())
{
i+=0.1;
node->setRotation(vector3df(0,i,0));
driver->beginScene(true, true, SColor(0,200,200,200));
smgr->drawAll();
driver->endScene();
}
device->drop();
return 0;
}
Ohne SetMaterialTexture() werden Vorder- und Rückseite korrekt angezeigt. GetMaterialCount gibt mir 2 zurück und im Consolenfenster werden die 2 Texturen als "Loaded..." korrekt ausgewiesen. SetMaterialTexture(0, ...) gibt allen Seiten die Textur 3.jpg. SetMaterialTexture(1, ...) scheint keinerlei Wirkung zu haben.
Was mache ich falsch bitte? Bin für jeden kleinen Hinweis sehr dankbar...
Vielen Dank schonmal für Eure Mühen, Jane.