OpenGl所有型号都具有相同的纹理

时间:2015-11-05 16:09:51

标签: java opengl model 3d textures

我想知道如何将不同的纹理绑定到不同的模型或如何改进我的代码。

我的代码:

public void onSurfaceCreated(GL10 gl, EGLConfig config) {
        gl.glLoadIdentity();
        GLU.gluPerspective(gl, 25.0f, (view.getWidth() * 1f) / view.getHeight(), 1, 100);
        GLU.gluLookAt(gl, 0f, 8f, 12f, 0.0f, 0.0f, 0.0f, 0.0f, 25.0f, 0.0f);
    gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
    gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
    gl.glEnable(GL10.GL_DEPTH_TEST);
    gl.glEnable(GL10.GL_TEXTURE_2D);
    loadTexture(gl, context, R.drawable.grndf);
    loadTexture(gl, context, R.drawable.skintrip);
    gl.glTexParameterx(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_LINEAR);
    gl.glTexParameterx(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR);
    gl.glTexEnvx(GL10.GL_TEXTURE_ENV, GL10.GL_TEXTURE_ENV_MODE, GL10.GL_MODULATE);
    }



private int[] mTexture = new int[2];

private void loadTexture(GL10 gl, Context mContext, int mTex) {
        gl.glGenTextures(1, mTexture, 0);
        gl.glBindTexture(GL10.GL_TEXTURE_2D, mTexture[0]);

        Bitmap bitmap;
        bitmap = BitmapFactory.decodeResource(mContext.getResources(), mTex);
        GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bitmap, 0);
        bitmap.recycle();}

1 个答案:

答案 0 :(得分:1)

正如评论中所说,没有像模型或对象这样的概念。 OpenGL是一个状态机,这意味着在每次绘制调用时都会使用当前状态。因此,如果你想使用不同的纹理进行两次绘制调用,那么你必须确保在每次绘制调用时绑定正确的纹理:

glBindTexture(GL_TEXTURE_2D, texture1);
glDraw*... //First draw call using texture1

glBindTexture(GL_TEXTURE_2D, texture2);
glDraw*... //Second draw call using texture2