android 绑定纹理失败,Android OpenGL纹理未呈现

这是我的GL初始化代码:

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

这是我的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);

}

}

我得到的问题是,除了正确形状和位置的白色框外,什么都没画.

图像的大小为50×50,我认为这是由于2的功能所致,但是在模拟器上也会出现此问题.

另外,我的确在日志中得到一个错误,它说:“ GL Texture Load Error:无效值”,但是我不知道那是什么意思.

最后,我像这样绘制纹理:

gl.glClearColor(0.0f, 0.0f, 0.0f, 1.0f);

gl.glClear(GL10.GL_COLOR_BUFFER_BIT);

textures.get("ball").draw(gl, 10, 10);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值