本文翻译自:http://forum.osgearth.org/osgEarth-Android-Unable-to-render-on-non-Nvidia-GPU-td7580356.html
一楼
我已经做过很多次实验视图在安卓上运行osgEarth。到目前为止,我已经可以通过安卓专题中的代码把这个应用程序构建起来,并运行示例程序于Nexus 7以及其模拟器上。也可以显示由kml文件定义的模型(目前也只是标准的osg模型,带纹理的模型还在尝试中)。效果如下图:
![NDK构建osgEarth到Android上——成功案例_第1张图片](http://img.e-com-net.com/image/info5/648a32757c104121a0131c8bd1ffaaf8.jpg)
我也看到了一些这个帖子里推荐的相关解决办法,但是在这个情况下是不可能实现的,因为手机设备并不支持纹理数组。我猜想问题来源于缺少足够的纹理坐标集分配给产生的gl_MultiTexCoord。
![NDK构建osgEarth到Android上——成功案例_第2张图片](http://img.e-com-net.com/image/info5/2ecc0b9fcf9b4f97b1d9880976293369.jpg)
因此,我的问题是:
1)有谁可以把在Nexus(GPU是英伟达Tegra 3)或非NvidiaGPU的设备上显示纹理?
2)是不是多纹理技术在三星盖世SIII(GPU是Mali-400 MP)中会需要更多的TexturCoordSets?
二楼
老大,你真猛。
试试禁用灯光,看白球问题是不是会消失。再试试2个及2个以上影像图层的earth文件。我可以在盖3上运行,所有它应该不是一个硬件问题。你提到一些GLSL编译错误和你的解决办法。你可以分享一下那些信息吗?
三楼
首先感谢你这么快回复我,对于我的拖延表示抱歉。
至于GLSL的编译错误是因为上面的问题导致而且是偶尔出现的,但我认为是硬编码的能力(_maxGPUTextureCoordSets等)因素导致的,所有编译器在我用比其所能获取的值更大的数值去编译就产生异常了。当我用一个较小的值去尝试的时候这个问题就解决了。此后,我意识到Capabilities文件用glGetIntergerv访问设备的能力,但是那一部分的代码没有执行。问题是有效的图形上下文返回true,所以我就忽视了这个测试结果。今天我从代码库中回复Capabilities文件来获取错误截屏,但问题无法被重复了,所有我也就不知道它第一次出现什么时候了。
至于”白地球“的问题我试过你的建议。我从场景中删掉了osg::Light并添加下面这一句:
root->getOrCreateStateSet()->setMode(GL_LIGHTING, osg::StateAttribute::OFF | osg::StateAttribute::OVERRIDE);
跟第一个图片显示的效果就一致了。我也试过了很多.earth文件(readymap.earth、readymap-osm.earth、mapquest_osm.earth),但是结果还是一样的。
如果把SkyNode也删掉,在盖3显示的就只有背景色了。
四楼
嘿,Dias
我对osgEarth编译到安卓上也很关注,我也试过用topic-android在cmake中配置,但是失败了。如果你能写个教程那整个社区都会感激你的。
五楼
我关注这个有好长一段时间了 ....
译者注
这个主题的东西我还没有走通,现在就先发出来供有兴趣的人参考一下,如果有走通请回复一个呗,在此先表示感谢了。
转载请注明来源 http://blog.csdn.net/giantchen547792075