Voici mon GL Code init:Android OpenGL Texture non rendu
gl.glEnable(GL10.GL_TEXTURE_2D);
gl.glShadeModel(GL10.GL_SMOOTH);
gl.glEnable(GL10.GL_BLEND);
gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA);
gl.glDisable(GL10.GL_DEPTH_TEST);
gl.glMatrixMode(GL10.GL_PROJECTION);
gl.glLoadIdentity();
gl.glViewport(0, 0, width, height);
float left = 0;
float right = width;
float top = height;
float bottom = 0;
gl.glOrthof(left, right, top, bottom, -1, 1);
gl.glMatrixMode(GL10.GL_MODELVIEW);
gl.glLoadIdentity();
textures.put("ball", new Texture(gl, BitmapFactory.decodeResource(context.getResources(), R.drawable.ball)));
Et voici ma classe Texture
public class Texture
{
int[] texture = new int[1];
static int real_width = 0;
static int real_height = 0;
Texture(GL10 gl, Bitmap bmp)
{
real_width = bmp.getWidth();
real_height = bmp.getHeight();
gl.glGenTextures(1, texture, 0);
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_NEAREST);
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_NEAREST);
GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bmp, 0);
bmp.recycle();
int error = gl.glGetError();
if (error != GL10.GL_NO_ERROR)
{
Log.e("ROLL", "GL Texture Load Error: " + GLU.gluErrorString(error));
}
}
public void draw(GL10 gl, float x, float y)
{
draw(gl, x, y, real_width, real_height);
}
public void draw(GL10 gl, float x, float y, float w, float h)
{
gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
float[] vertices = { x + w, y + h, x, y + h, x, y, x + w, y };
float[] textureCoords = { 1, 1, 0, 1, 0, 0, 1, 0 };
ByteBuffer byteBuf = ByteBuffer.allocateDirect(vertices.length * 4);
byteBuf.order(ByteOrder.nativeOrder());
FloatBuffer vertexBuffer = byteBuf.asFloatBuffer();
vertexBuffer.put(vertices);
vertexBuffer.position(0);
byteBuf = ByteBuffer.allocateDirect(textureCoords.length * 4);
byteBuf.order(ByteOrder.nativeOrder());
FloatBuffer textureBuffer = byteBuf.asFloatBuffer();
textureBuffer.put(textureCoords);
textureBuffer.position(0);
gl.glBindTexture(GL10.GL_TEXTURE_2D, texture[0]);
gl.glVertexPointer(2, GL10.GL_FLOAT, 0, vertexBuffer);
gl.glTexCoordPointer(2, GL10.GL_FLOAT, 0, textureBuffer);
gl.glDrawArrays(GL10.GL_TRIANGLE_FAN, 0, 4);
gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
gl.glDisableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
}
}
Le problème que je reçois est où rien est tiré, mais une boîte blanche dans la la forme et la position correctes de l'endroit où la texture devrait être.
L'image est de taille 50x50 et je pensais que ce serait dû à la puissance de 2 chose, mais ce problème se produit également sur l'émulateur.
En outre, j'obtiens une erreur dans le journal et il dit: "GL Texture Load Error: valeur non valide", mais je ne sais pas ce que cela signifie.
Enfin, je dessine la texture de ce type:
gl.glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
textures.get("ball").draw(gl, 10, 10);
Où est le code que vous utilisez pour charger la texture? –