android - 将 OpenGL 应用程序移植到 NDK。着色器效果看起来不同

标签 android opengl opengl-es android-ndk

<分区>

我用 OpenGL(非固定管道)编写了一个应用程序。 我已经使用 NDK 将应用程序移植到 Android,但存在一些问题。一切都变暗了,有些对象没有按应有的方式显示。

window

Windows

安卓

NDK
(来源:vvcap.net)

  1. 右边的茶壶是黑色的,反光有些奇怪。
  2. 飞球的下半部分是黑色的
  3. 一切都是黑暗的
  4. 水看起来一点都不对劲。
  5. 环保茶壶呈粉红色。

有人在移植到 OpenGL Es 2.0 时遇到过类似的问题吗? 除了纹理加载格式外,我没有更改着色器或代码中的任何内容:

#ifdef _NDK
    if (IsAlpha)
        glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, Width, Height, 0, GL_RGBA, GL_UNSIGNED_BYTE, Bits);
    else
        glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, Width, Height, 0, GL_RGB, GL_UNSIGNED_BYTE, Bits);
#else
    if (IsAlpha)
        glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, Width, Height, 0, GL_BGRA, GL_UNSIGNED_BYTE, Bits);
     else
        glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, Width, Height, 0, GL_BGR, GL_UNSIGNED_BYTE, Bits);
#endif

谢谢!

最佳答案

在您的桌面代码路径中,您传递 BGR作为 TexImage2D 的格式,而在您的 Android 代码路径中,您选择 RGB .

GL无法知道哪些数据Bits持有并简单地构造RGBA来自数据的值(在 ARGB 格式的情况下用 1.0 代替 BGR 组件。)如果您不预处理数据以反射(reflect)格式,GL 将简单地采用 B R 的组件值组件,如果您为 RGB 布置数据纹理。

改正格式就可以了。

关于android - 将 OpenGL 应用程序移植到 NDK。着色器效果看起来不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25116094/

相关文章:

android - 更新同一订阅中的 flatMap 并发限制

android - 在布局中添加 GLSurfaceView

opengl-es - OpenGL中的插值是什么?

android - 返回上一个 Activity 而不删除当前状态 - Android

android - Android 中父子view 可以同时获取motion 事件吗?

android - 如何在 Android 2.0+ 锁屏上使用滑动标签小部件?

c++ - glPushMatrix() 和 glPopMatrix() 如何保持场景不变?

c++ - 为什么我的三角形是白色的?

opengl - 绑定(bind)2个纹理,只看到1个

javascript - WebGL。它是在 GPU 中创建缓冲区吗?