2013-04-23 86 views
8

我正在學習使用Irrlicht on Android。上個月,我一直致力於基於openGL es 1.0的驅動程序,該驅動程序運行良好(我使用1.0,因爲當我試圖運行基於驅動程序es 2.0的示例時,結果非常奇怪)。加載網格是好的,但讓我困惑的是紋理無法正確顯示。 渲染代碼如下:關於opengl es 2.0驅動的irrlicht android

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

一切都是相同,只是去掉註釋原代碼和節點的位置,我也確信代碼所需的文件都在正確的目錄。

那麼,誰可以在Android上使用Irrlicht的經驗,請幫助我?

+1

那麼,最好在你的上下文中描述「不正確」的含義。它們根本不顯示,它們是顛倒的,令人毛骨悚然的顏色?一張照片可能也很方便。 – 2014-05-20 11:42:51

回答

1

我們面臨同樣的問題。統一名稱的長度是唯一的問題。統一名稱將存儲在COGLES2FixedpipelineShader,COGLES2NormalMapShader等類的SBuiltinShaderUniformNames []數組中。將統一名稱縮短爲10個字符以下的長度。

編輯:縮短統一名稱將解決此問題。

+0

謝謝你的回答。投票你的答案,讓更多的人面臨相同的問題知道爲什麼和如何做:) – EpisodeXI 2014-11-19 08:58:17

+0

如果您的問題已通過縮短統一名稱解決,請將此標記爲正確的答案,以使人們清楚。 – VivekParamasivam 2014-11-19 12:30:33

+0

對不起,但我不知道是否正確,我放棄了Android上的Irrlicht並改用libgdx。如果任何人使用您的方法並發現它的工作原理,我會將其標記爲正確答案。 – EpisodeXI 2014-11-20 12:36:32