2013-04-23 12 views
8

Uczę się używać Irrlicht on Android. W zeszłym miesiącu pracowałem nad sterownikiem opartym na OpenGL es 1.0, który działał dobrze (korzystam z wersji 1.0, ponieważ kiedy próbowałem uruchomić przykład na podstawie sterownika es 2.0, wynik okazał się bardzo dziwny). Ładowanie siatki jest w porządku, ale to, co wprawia mnie w zakłopotanie, to fakt, że tekstury nie można pokazać poprawnie. Render kodu jest jak poniżej:irrlicht android na opengl es 2.0 sterownik

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); 

Wszystko jest takie same jak w oryginalnym kodzie wyjątkiem usuniętych komentarzy i położenie węzłów i jestem również pewien, że pliki potrzebne w kodzie są na odpowiednim katalogu.

Czy ktoś, kto może korzystać z aplikacji Irrlicht na Androida, może mi pomóc?

+1

Cóż, lepiej byłoby opisać, co "nieprawidłowo" oznacza w twoim kontekście. Nie wyświetlają się wcale, są odwrócone, dziwne kolory? Prawdopodobnie przydałoby się również zdjęcie. –

Odpowiedz

1

Mieliśmy do czynienia z tym samym problemem. Długość jednolitych nazw jest jedynym problemem. Jednolite nazwy będą przechowywane w tablicy SBuiltinShaderUniformNames [] w klasach COGLES2FixedpipelineShader, COGLES2NormalMapShader itd. Skróć nazwy jednolite do długości poniżej 10 znaków.

Edytuj: Skrócenie nazwy jednolitej rozwiąże ten problem.

+0

Dziękuję za odpowiedź. Aż głosuj swoją odpowiedzią, aby więcej osób, które borykają się z tym samym problemem, wiedzą, dlaczego i jak to zrobić :) – EpisodeXI

+0

Jeśli Twój problem został rozwiązany poprzez skrócenie nazwy jednolite, zaznacz to jako poprawna odpowiedź, aby oczyścić ludzi. – VivekParamasivam

+0

Przepraszam, ale nie wiem, czy to prawda, porzuciłem Irrlicht na Androida i zamiast tego użyłem libgdx. Jeśli ktokolwiek, kto użyje twojej metody i znajdzie ją działa, zaznaczę to jako poprawną odpowiedź. – EpisodeXI