我在OpenGL中编写了一个应用程序(未修复的管道)。 我已经使用NDK将应用程序移植到Android,并且存在一些问题。一切都比较暗,有些物体不应该显示出来。
窗
Windows http://vvcap.net/db/WF0ilLDB2D3F72UlbPjA.png
的Android
NDK http://vvcap.net/db/KhD0q9XHJc_q5vFsda10.png
在移植到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
谢谢!
答案 0 :(得分:4)
在您的桌面代码路径中,您将BGR
格式传递给TexImage2D
,而在Android代码路径中,您选择RGB
。
GL无法知道Bits
包含哪些数据,只是从数据中构造RGBA
值(在A
的情况下用1.0代替RGB
组件或BGR
格式。)如果您不预处理数据以反映格式,那么如果您布置数据,GL将只为B
组件获取R
组件值对于RGB
纹理。
更正格式,你会没事的。