Android can';我不能让纹理工作

Android can';我不能让纹理工作,android,opengl-es,Android,Opengl Es,我得到了一个白色的方形框,而不是我在屏幕上看到的纹理。哦,我不认为这有什么关系,但以防万一,我先放一个线性布局视图,然后再放表面视图 这是我的代码: public class GameEngine { private float vertices[]; private float textureUV[]; private int[] textureId = new int[1]; private FloatBuffer vertextBuffer;

我得到了一个白色的方形框,而不是我在屏幕上看到的纹理。哦,我不认为这有什么关系,但以防万一,我先放一个线性布局视图,然后再放表面视图

这是我的代码:

public class GameEngine {

    private float vertices[];
    private float textureUV[];

    private int[] textureId = new int[1];

    private FloatBuffer vertextBuffer;
    private FloatBuffer textureBuffer;

    private short indices[] = {0,1,2,2,1,3};
    private ShortBuffer indexBuffer;

    private float x, y, z;
    private float rot, rotX, rotY, rotZ; 


    public GameEngine() {

    }

    public void setEngine(float x, float y, float vertices[]){
        this.x = x;
        this.y = y;
        this.vertices = vertices;

        ByteBuffer vbb = ByteBuffer.allocateDirect(this.vertices.length * 4);
        vbb.order(ByteOrder.nativeOrder());

        vertextBuffer = vbb.asFloatBuffer();
        vertextBuffer.put(this.vertices);
        vertextBuffer.position(0);
        vertextBuffer.clear();


        ByteBuffer ibb = ByteBuffer.allocateDirect(indices.length * 2);
        ibb.order(ByteOrder.nativeOrder());

        indexBuffer = ibb.asShortBuffer();
        indexBuffer.put(indices);
        indexBuffer.position(0);
        indexBuffer.clear();
    }



    public void draw(GL10 gl){
        gl.glLoadIdentity();
        gl.glTranslatef(x, y, z);
        gl.glRotatef(rot, rotX, rotY, rotZ);

        gl.glBindTexture(GL10.GL_TEXTURE_2D, textureId[0]);

        gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
        gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);


        gl.glVertexPointer(2, GL10.GL_FLOAT, 0, vertextBuffer);
        gl.glTexCoordPointer(2, GL10.GL_FLOAT, 0, textureBuffer);



        gl.glDrawElements(GL10.GL_TRIANGLES, indices.length, GL10.GL_UNSIGNED_SHORT, indexBuffer);


        gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
        gl.glDisableClientState(GL10.GL_TEXTURE_COORD_ARRAY);

    }

    public void LoadTexture(float textureUV[], GL10 gl, InputStream is) throws IOException{

        this.textureUV = textureUV;

        ByteBuffer tbb = ByteBuffer.allocateDirect(this.textureUV.length * 4);
        tbb.order(ByteOrder.nativeOrder());
        textureBuffer = tbb.asFloatBuffer();
        textureBuffer.put(this.textureUV);
        textureBuffer.position(0);
        textureBuffer.clear();

        Bitmap bitmap = null;

        try{
            bitmap = BitmapFactory.decodeStream(is);

        }finally{
            try{
                is.close();
                is = null;
                gl.glGenTextures(1, textureId,0);   
                gl.glBindTexture(GL10.GL_TEXTURE_2D, textureId[0]);


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

                //Different possible texture parameters, e.g. GL10.GL_CLAMP_TO_EDGE
                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);

                //Use the Android GLUtils to specify a two-dimensional texture image from our bitmap
                GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bitmap, 0);


                gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA);

                //Clean up
                gl.glBindTexture(GL10.GL_TEXTURE_2D, textureId[0]);

                bitmap.recycle();
            }catch(IOException e){

            }

        }

    }



    public void setVector(float x, float y, float z){
        this.x = x;
        this.y = y;
        this.z = z;
    }

    public void setRot(float rot, float x, float y, float z){
        this.rot = rot;
        this.rotX = x;
        this.rotY = y;
        this.rotZ = z;
    }

    public float getZ(){
        return z;
    }
}

确保你的纹理是两个大小的幂。不能将NPO2纹理与GL_REPEAT一起使用


此外,我在任何地方都看不到
glEnable(GL\u纹理\u 2D)

确保你的纹理是两个大小的幂。不能将NPO2纹理与GL_REPEAT一起使用

此外,我在任何地方都看不到
glEnable(GL\u纹理\u 2D)