Unity3D 导出apk,OpenGL es2手机不支持问题的解决

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity3D 导出apk,OpenGL es2手机不支持问题的解决相关的知识,希望对你有一定的参考价值。

参考技术A OpenGL es2手机不支持延迟渲染和HDR颜色

在building setting-Player setting 中
修改Graphics中的HDR和Rendering Path

如果导出的apk仍有所措,可能是Unity到处设置中限制了OpenGL最低版本为3.X,增加OpenGL 2.X即可

iPhone OpenGL ES 2.0 奇怪的图案在 COLLADA 文件中的球体上渲染纹理

【中文标题】iPhone OpenGL ES 2.0 奇怪的图案在 COLLADA 文件中的球体上渲染纹理【英文标题】:iPhone OpenGL ES 2.0 Strange Pattern Rendering Texture on Sphere from COLLADA File 【发布时间】:2012-12-18 10:54:01 【问题描述】:

我使用 Cheetah3D 导出​​ COLLADA 文件 (.dae),然后使用 Erik Buck 的 COLLADAViewer2 (https://github.com/erikbuck/COLLADAViewer2/tree/master/COLLADAViewer2) 程序导出他书中所述的 modelplist 格式。

我的 COLLADA 文件是一个简单的球体,我正在尝试在其上渲染地球纹理。

在 COLLADAViewer 程序中,我导出的 .dae 文件看起来不错,这是屏幕截图:

我用于在球体上渲染纹理的代码部分在这里:

// Setup texture
CGImageRef imageRef =
[[UIImage imageNamed:@"Earth.jpg"] CGImage];

GLKTextureInfo *textureInfoEarth = [GLKTextureLoader
                               textureWithCGImage:imageRef
                               options:[NSDictionary dictionaryWithObjectsAndKeys:
                                        [NSNumber numberWithBool:YES],
                                        GLKTextureLoaderOriginBottomLeft, nil]
                               error:NULL];

self.baseEffect.texture2d0.name = textureInfoEarth.name;
self.baseEffect.texture2d0.target = textureInfoEarth.target;

// Enable fragment blending with Frame Buffer contents
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

不幸的是,在 XCode 中,当我构建和运行我的球体时,在模拟器上看起来像这样:

我不知道如何解释球体上的奇怪图案,就像纹理在那里但被重复一样。谁能帮我解决这个问题?谢谢 -

我将我正在试验的 xcode 项目上传到 Github。它使用了 Buck 先生的 OpenGL 书中的大量示例代码。

这是链接: https://github.com/phishstang65/renderer

【问题讨论】:

能否贴出加载球体和渲染球体的代码? 您好 - 我没有发布大量代码,而是将相关项目上传到 Github,而是将链接放在我的帖子中。非常感谢您的帮助 - 谢谢! 【参考方案1】:

在我看来,模型中每个三角形的纹理坐标都是相同的。

查看您的代码,我认为您的顶点缓冲区的格式为每个顶点 40 个字节,每个值是两个字节的 GLFloat,3 表示位置,3 表示法线,2 表示纹理坐标,2 表示第二组纹理坐标。

我运行了应用程序,在它填充UtilityMesh 对象中的数据后设置了一个断点。在调试器中查看它的数据转储,有一个明确的模式,每 40 个字节重复一次。位置和法线的前 24 个字节按预期变化。最后八个字节总是0,我认为对应于未使用的第二组纹理坐标。问题是与主纹理坐标对应的八个字节循环通过三个值。

00000000 00000000 
0000003d 0000803d 
00000000 0000803d

所以我认为你的程序很好,只是得到了坏数据。检查您的转换过程。

【讨论】:

以上是关于Unity3D 导出apk,OpenGL es2手机不支持问题的解决的主要内容,如果未能解决你的问题,请参考以下文章

Unity3D-在Android平台快速验证功能的更新

Unity3D-在Android平台快速验证功能的更新

Unity3D-在Android平台快速验证功能的更新

用Ant给Unity3D导出Eclipse工程打包APK

哪个版本的 OpenGL 最接近 OpenGL ES2?

android openGL ES2 一切从绘制纹理開始