基本OpenGL ES纹理问题/Android

基本OpenGL ES纹理问题/Android,android,opengl-es,textures,Android,Opengl Es,Textures,我很难在Droid(2.1-update1)上的OpenGL ES应用程序中使用基本纹理。我试图渲染一个简单的纹理四边形-四个顶点,两个面,带有法线和纹理坐标。渲染时,纹理混乱且充满静电,类似于电视噪音 这是一张显示原始纹理贴图图像的图片,然后是我的droid渲染的纹理四边形的屏幕盖: 基本颜色在那里,但显然纹理没有被正确读取或应用 我的纹理加载序列很简单: int[] textures = new int[1]; gl.glGenTextures(1, textures, 0); Bitmap

我很难在Droid(2.1-update1)上的OpenGL ES应用程序中使用基本纹理。我试图渲染一个简单的纹理四边形-四个顶点,两个面,带有法线和纹理坐标。渲染时,纹理混乱且充满静电,类似于电视噪音

这是一张显示原始纹理贴图图像的图片,然后是我的droid渲染的纹理四边形的屏幕盖:

基本颜色在那里,但显然纹理没有被正确读取或应用

我的纹理加载序列很简单:

int[] textures = new int[1];
gl.glGenTextures(1, textures, 0);
Bitmap bmp = BitmapFactory.decodeResource(cx.getResources(), R.drawable.img);
gl.glBindTexture(GL10.GL_TEXTURE_2D, textures[0]);
GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bmp, 0);
我尝试在纹理加载时为glTexParameterf设置各种参数,但没有效果:

gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_NEAREST);
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR);
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_S, GL10.GL_REPEAT);
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_T, GL10.GL_REPEAT);
gl.glTexEnvf(GL10.GL_TEXTURE_ENV, GL10.GL_TEXTURE_ENV_MODE, GL10.GL_REPLACE);
我的渲染序列也非常简单:

int[] textures = new int[1];
gl.glGenTextures(1, textures, 0);
Bitmap bmp = BitmapFactory.decodeResource(cx.getResources(), R.drawable.img);
gl.glBindTexture(GL10.GL_TEXTURE_2D, textures[0]);
GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bmp, 0);
(设置)

(渲染)

我尝试过各种纹理图像文件格式,大小都是^2,放在drawable Nodepi文件夹下。PNG、BMP、GIF、JPEG都给出了相同的结果。我还尝试了8位和16位颜色深度。我用默认的EGL配置在GLSURFACHEVIEW上运行这个

有人能解释一下为什么我的纹理是乱七八糟的吗

下面是我的索引/顶点/法线/texcoord数据。我已经试过十几次了,但也许我错过了什么

Adding vertex (vIndex 1) Vector3F(77.0492, 0.0, 0)
Adding vertex (vIndex 2) Vector3F(478.1715, 0.0, 0)
Adding vertex (vIndex 3) Vector3F(478.1715, 227.0969, 0)
Adding vertex (vIndex 4) Vector3F(77.0492, 227.0969, 0)
Adding normal Vector3F(0.0, 0.0, 1.0)
Adding normal Vector3F(0.0, 0.0, 1.0)
Adding normal Vector3F(0.0, 0.0, 1.0)
Adding normal Vector3F(0.0, 0.0, 1.0)
Adding textureCoords Vector3F(0.0, 0.0)
Adding textureCoords Vector3F(1.0, 0.0)
Adding textureCoords Vector3F(1.0, 1.0)
Adding textureCoords Vector3F(0.0, 1.0)
Adding face indexes 1,2,3
Adding face indexes 3,4,1

好吧,不管我的问题,我发现了问题


原来我的纹理坐标存储为32位无符号整数,我将GL_SHORT传递到glTexCoordPointer调用中(我需要使用GL_FIXED)。这解释了可以在渲染结果中看到的随机静态纹理贴图

好吧,不管我的问题是什么,我发现了问题所在


原来我的纹理坐标存储为32位无符号整数,我将GL_SHORT传递到glTexCoordPointer调用中(我需要使用GL_FIXED)。这解释了可以在渲染结果中看到的随机静态纹理贴图

它在模拟器中工作吗?它在模拟器中工作吗?
Adding vertex (vIndex 1) Vector3F(77.0492, 0.0, 0)
Adding vertex (vIndex 2) Vector3F(478.1715, 0.0, 0)
Adding vertex (vIndex 3) Vector3F(478.1715, 227.0969, 0)
Adding vertex (vIndex 4) Vector3F(77.0492, 227.0969, 0)
Adding normal Vector3F(0.0, 0.0, 1.0)
Adding normal Vector3F(0.0, 0.0, 1.0)
Adding normal Vector3F(0.0, 0.0, 1.0)
Adding normal Vector3F(0.0, 0.0, 1.0)
Adding textureCoords Vector3F(0.0, 0.0)
Adding textureCoords Vector3F(1.0, 0.0)
Adding textureCoords Vector3F(1.0, 1.0)
Adding textureCoords Vector3F(0.0, 1.0)
Adding face indexes 1,2,3
Adding face indexes 3,4,1