如何在Java Open GL中为对象添加纹理(特别是对于AndAR)...我的代码出了什么问题?我读了几个例子,但总是一样的,只有一个“黑色矩形”或纹理被绑定在背景上......我如何将它绑定到我的矩形?
这是我的代码:
int[] textureIDs = new int[1];
gl.glEnable(GL10.GL_TEXTURE_2D);
gl.glGenTextures(1, textureIDs, 0);
//load the textures into the graphics memory
Bitmap bm = BitmapFactory.decodeResource(CustomActivity.context.getResources(), R.drawable.icon);
gl.glBindTexture(GL10.GL_TEXTURE_2D, textureIDs[0]);
GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bm,0);
gl.glTexParameterx(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_LINEAR);
gl.glTexParameterx(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR);
GLUT.glutSolidBox(gl,200.0f,100.0f,10.0f);
答案 0 :(得分:1)
对于texturinh有一个有用的效果,你需要纹理坐标,告诉GL纹理的哪一部分要映射到基元的哪些部分。由于您使用的是固定功能管道,因此有两种选择:
GLUT对象永远不会提供任何纹理坐标。这意味着OpenGL将使用当前为每个顶点设置的纹理坐标。这将导致一次又一次地对单一特定纹理位置进行采样 - 它不必是黑色的,但是您的对象将被均匀着色。
你可能想要选择2,然后自动纹理坐标生成,它由`glTexGen()系列函数控制。但是,可用的纹理坐标生成模式都不适合纹理化多维数据集。
所以唯一真正的解决方案是手动指定立方体顶点,并指定有用的纹理坐标。您从未指定所需的映射。纹理是一个矩形图像,你可以将它映射到每个面,我们你可能希望将图像的不同子矩形映射到每一面 - 你必须告诉GL如何映射它,它不能猜测只是因为你绘制了6个面并启用了纹理。
或纹理绑定在背景上。
如果要绘制无纹理,则需要再次禁用纹理。