android - OpenGL ES 2.0/3.0 中带有位图的立方体贴图纹理
问题描述
当我用简单的颜色创建立方体贴图纹理时,效果很好:
@JvmStatic
fun createSimpleTextureCubemap() {
val textureId = IntArray(1)
val cubeFace0 = byteArrayOf(127, 127, 127)
val cubeFace1 = byteArrayOf(0, 127, 0)
... // create other cube faces with simple color
val cubeFaces = ByteBuffer.allocateDirect(3)
glGenTextures(1, textureId, 0)
glBindTexture(GL_TEXTURE_CUBE_MAP, textureId[0])
cubeFaces.put(cubeFace0).position(0)
glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, GL_RGB,
1, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, cubeFaces)
cubeFaces.put(cubeFace1).position(0)
glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, GL_RGB,
1, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, cubeFaces)
...
return textureId[0]
}
但是当我尝试使用位图创建立方体贴图纹理时:
@JvmStatic
fun createTextureCubemap(context: Context, rowID: Int) {
val input = context.resources.openRawResource(rowID)
val bitmap = BitmapFactory.decodeStream(input)
val textureId = IntArray(1)
glGenTextures(1, textureId, 0)
glBindTexture(GL_TEXTURE_CUBE_MAP, textureId[0])
GLUtils.texImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, bitmap, 0)
GLUtils.texImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, bitmap, 0)
GLUtils.texImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, bitmap, 0)
GLUtils.texImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, bitmap, 0)
GLUtils.texImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, bitmap, 0)
GLUtils.texImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, bitmap, 0)
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MIN_FILTER, GL_NEAREST)
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MAG_FILTER, GL_NEAREST)
return textureId[0]
}
然后物体变黑。有人可能会建议为什么带有位图的立方体贴图不起作用(黑色)?
感谢您的任何评论/回答。
解决方案
立方体贴图的纹理需要是方形的。正如评论中提到的,使用的位图不是方形的。
来自glTexImage2D 参考(GLUtils.texImage2D
是一个方便的包装器glTexImage2D
)
如果目标是六个立方体贴图 2D 图像目标之一并且宽度和高度参数不相等,则会生成 GL_INVALID_VALUE。
推荐阅读
- spring - java.lang.AbstractMethodError 与 Spring-data-elasticsearch
- c++ - 分隔字符行形成数据
- python - 如何在 Python 中从文件中加载变量
- php - 如何在 PHP 中比较来自不同 foreach 循环的两个值?
- android - 如何在 ARCore Android 中禁用表面检测
- rest - 将 Solr 与加密(标记化)索引值一起使用
- python - 如何使用python在下一行插入一个字符串以在文件中搜索模式?
- javascript - Javascript,停止 preventDefault() 以传递给子元素
- java - 如何在 JNI 中将 Java Long 对象传递给 C
- jhipster - Jhipster 注册表版本 4.0.0 中的请求无法继续错误