2013-04-23 8 views
8

Sto imparando a usare Irrlicht on Android. Il mese scorso ho lavorato sul driver basato su openGL es 1.0, che ha funzionato bene (io uso 1.0 perché quando ho provato a eseguire l'esempio basato sul driver es 2.0 il risultato si è rivelato molto strano). La mesh di caricamento va bene, ma ciò che mi confonde è che la texture non può essere mostrata correttamente. Render codice è il seguente:irrlicht android on opengl es 2.0 driver

smgr = device->getSceneManager(); 
guienv = device->getGUIEnvironment(); 

stringc myDir = gSdCardPath; 
myDir += "/Irrlicht"; 
device->getFileSystem()->changeWorkingDirectoryTo(myDir.c_str()); 

stringc sydneyFilename = "/Irrlicht/sydney.md2"; 
mesh=smgr->getMesh("/sdcard/Irrlicht/sydney.md2"); 
if (!mesh) { 
    device->drop(); 
    __android_log_print(ANDROID_LOG_INFO, "Irrlicht", "cannot getMesh"); 
    return; 
} 
nodeSydney = smgr->addAnimatedMeshSceneNode(mesh); 

if (nodeSydney) { 
    nodeSydney->setMaterialFlag(EMF_LIGHTING, false); 
    nodeSydney->setMD2Animation(scene::EMAT_STAND); 
    stringc sydneyTextureFilename = "/Irrlicht/sydney.bmp"; 
    texture=driver->getTexture("/sdcard/Irrlicht/sydney.bmp"); 
    if (!texture) 
     LOGI("sydney.bmp load failed"); 
    else{ 
     nodeSydney->setMaterialTexture(0,texture); 
     LOGI("sydney.bmp load successfully"); 
    } 
    nodeSydney->setPosition(core::vector3df(0.0f,0.0f,0.0f)); 
} 
smgr->addCameraSceneNode(0, vector3df(0, 10, -50), vector3df(0, 5, 0)); 

receiver = new AndroidEventReceiver(context); 
device->setEventReceiver(receiver); 

Tutto è lo stesso del codice originale, tranne i commenti rimossi e la posizione dei nodi e sono anche sicuro che i file necessari nel codice sono nella directory corretta.

Quindi, chiunque abbia esperienza con Irrlicht su Android, può aiutarmi?

+1

Bene, probabilmente sarebbe meglio descrivere cosa significa "non correttamente" nel proprio contesto. Non si mostrano affatto, sono capovolti, colori inquietanti? Un'immagine sarebbe probabilmente anche utile. –

risposta

1

Abbiamo affrontato lo stesso problema. La lunghezza dei nomi uniformi è l'unico problema. I nomi uniformi verranno memorizzati nell'array SBuiltinShaderUniformNames [] nelle classi COGLES2FixedpipelineShader, COGLES2NormalMapShader, ecc. Abbrevia i nomi uniformi con una lunghezza inferiore a 10 caratteri.

Modifica: la riduzione dei nomi uniformi risolverà questo problema.

+0

Grazie per la risposta. Rispondi alla tua risposta per consentire a più persone che affrontano lo stesso problema di sapere perché e come fare :) – EpisodeXI

+0

Se il problema è stato risolto accorciando i nomi uniformi, contrassegnalo come Risposta corretta per chiarire le persone. – VivekParamasivam

+0

Scusa ma non so se è giusto, ho abbandonato Irrlicht su Android e ho usato libgdx invece. Se qualcuno che usa il tuo metodo e lo trova funziona, lo contrassegnerò come risposta corretta. – EpisodeXI