Android Squared Textures Opengl-es Android

时间:2011-10-18 20:38:53

标签: android opengl-es load textures

我目前只得到一个彩色方块,我的纹理应该在这里绘制。

我已确保使用2(128 x 128)

的幂来调整纹理大小

我已将纹理放置在drawable-nodpi文件夹中,如建议的那样,但仍然会得到白色(或其他颜色)方块。

这是我的方形对象代码:

public class MTestSquare {




private float vertices[] = {
        0.0f, 1.0f, 0.0f,
        0.0f, 0.0f, 0.0f,
        1.0f, 0.0f, 0.0f,
        1.0f, 1.0f, 0.0f
};

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

private float texture[] = {
        0.0f, 1.0f,
        1.0f, 1.0f,
        0.0f, 0.0f,
        1.0f, 0.0f
};
private FloatBuffer vertexBuffer;

private FloatBuffer textureBuffer;

private ShortBuffer indexBuffer;

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





public MTestSquare() {

    ByteBuffer vbb = ByteBuffer.allocateDirect(vertices.length*4);
       vbb.order(ByteOrder.nativeOrder());
       vertexBuffer = vbb.asFloatBuffer();
       vertexBuffer.put(vertices);
       vertexBuffer.position(0);

    ByteBuffer ibb = ByteBuffer.allocateDirect(indices.length*2);
       ibb.order(ByteOrder.nativeOrder());
       indexBuffer = ibb.asShortBuffer();
       indexBuffer.put(indices);
       indexBuffer.position(0);

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


}


public void loadGLTexture(GL10 gl, Context context) {

    Bitmap bitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.testtexture);
    gl.glGenTextures(1, textures, 0);
    gl.glBindTexture(GL10.GL_TEXTURE_2D, textures[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);
     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);
    GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bitmap, 0);
    bitmap.recycle();

}

public void draw(GL10 gl) {

    gl.glFrontFace(GL10.GL_CCW);
    gl.glEnable(GL10.GL_CULL_FACE);
    gl.glCullFace(GL10.GL_BACK);
    gl.glBindTexture(GL10.GL_TEXTURE_2D, textures[0]);

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

    gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertexBuffer);
    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);
    gl.glDisable(GL10.GL_CULL_FACE);
}

}

我用

画在广场上
square.draw(gl)

我将这行代码放在onSurfaceCreated

square.loadGLTexture(gl, this.context);

加载纹理

2 个答案:

答案 0 :(得分:1)

你真的启用了纹理吗?

gl.glEnable(GL10.GL_TEXTURE_2D);

答案 1 :(得分:0)

也许您可以查看此内容。 OpenGL Texture Tutorial

int InitGL(GLvoid)                              // All Setup For OpenGL Goes Here
{
    if (!LoadGLTextures())                          // Jump To Texture Loading Routine ( NEW )
    {
        return FALSE;                           // If Texture Didn't Load Return FALSE ( NEW )
    }

    glEnable(GL_TEXTURE_2D);                        // Enable Texture Mapping ( NEW )
    glShadeModel(GL_SMOOTH);                        // Enable Smooth Shading
    glClearColor(0.0f, 0.0f, 0.0f, 0.5f);                   // Black Background
    glClearDepth(1.0f);                         // Depth Buffer Setup
    glEnable(GL_DEPTH_TEST);                        // Enables Depth Testing
    glDepthFunc(GL_LEQUAL);                         // The Type Of Depth Testing To Do
    glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);          // Really Nice Perspective Calculations
    return TRUE;                                // Initialization Went OK
}