Irrlicht在OpenGL ES 2.0驱动上的Android实现

8

我正在学习如何在Android上使用Irrlicht。上个月,我致力于基于openGL es 1.0的驱动器开发,效果很好(我使用1.0是因为当我尝试运行基于驱动es 2.0的示例时,结果非常奇怪)。加载网格没问题,但让我困惑的是纹理无法正确显示。

渲染代码如下:

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

除了删除注释和节点位置之外,一切与原始代码相同,我也确信代码所需的文件位于正确的目录中。

因此,有使用Irrlicht在Android上的经验的人可以帮助我吗?


1
好的,也许更好的方式是描述在你的上下文中“不正确”意味着什么。它们根本没有显示出来,它们是倒置的,颜色怪异?一张图片可能也会很方便。 - the swine
1个回答

1
我们遇到了同样的问题。统一名称的长度是唯一的问题。统一名称将存储在COGLES2FixedpipelineShader、COGLES2NormalMapShader等类的SBuiltinShaderUniformNames[]数组中。将统一名称缩短至10个字符以下即可解决此问题。
编辑:缩短统一名称将解决此问题。

谢谢你的回答。我投了个赞,让更多遇到同样问题的人知道原因和解决方法 :) - EpisodeXI
如果您的问题已通过缩短统一名称得到解决,请将其标记为正确答案,以使其他人清楚。 - VivekParamasivam
抱歉,我不知道那是否正确,我放弃了在Android上使用Irrlicht,改用了libgdx。如果有人使用您的方法并发现它有效,我会将其标记为正确答案。 - EpisodeXI

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接