gpt4 book ai didi

android - 基本的OpenGL ES纹理问题/Android

转载 作者:行者123 更新时间:2023-11-30 04:51:33 25 4
gpt4 key购买 nike

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

这是一张显示原始纹理贴图图像的图片,然后是我的渲染纹理四边形机器人的屏幕截图:http://img686.imageshack.us/img686/6342/texturedquad.png

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

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

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);

我的渲染顺序也很简单:

(设置)

gl.glEnable(GL10.GL_DEPTH_TEST);
gl.glDepthFunc(GL10.GL_LEQUAL);
gl.glDisable(GL10.GL_DITHER);
gl.glDisable(GL10.GL_FOG);
gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_FASTEST);
gl.glDisable(GL10.GL_COLOR_MATERIAL);
gl.glShadeModel(GL10.GL_SMOOTH);

(渲染)

gl.glEnable(GL10.GL_TEXTURE_2D);
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
gl.glVertexPointer(3, GL10.GL_FIXED, 0, vertices);
gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
gl.glTexCoordPointer(2, GL10.GL_SHORT, 0, textureCoords);
gl.glBindTexture(GL10.GL_TEXTURE_2D, textureName);
gl.glDrawElements(GL10.GL_TRIANGLES, numIndices, GL10.GL_UNSIGNED_SHORT, indices);

...

我试过各种纹理图像文件格式,所有大小都是 ^2,放在 drawable-nodpi 文件夹下。 PNG、BMP、GIF、JPEG 都给我相同的结果。我也尝试过 8 位和 16 位颜色深度。我使用默认的 EGL 配置在 GLSurfaceView 之上运行它。

谁能解释一下为什么我的纹理会出现乱码?

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

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)。这解释了您可以在渲染结果中看到的随机静态纹理映射。

关于android - 基本的OpenGL ES纹理问题/Android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3143440/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com