【问题标题】:OpenGl all models are with the same textureOpenGL所有模型都具有相同的纹理
【发布时间】:2015-11-05 16:09:51
【问题描述】:

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

我的代码:

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

【问题讨论】:

  • OpenGL 没有模型的概念。您只需要在绘制调用之前绑定正确的纹理
  • @BDL 但我如何将它们绑定到一个对象?我的所有对象都具有相同的纹理

标签: java opengl model 3d textures


【解决方案1】:

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

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

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

【讨论】:

  • 非常感谢您的解释!
猜你喜欢
  • 1970-01-01
  • 2013-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-19
  • 1970-01-01
相关资源
最近更新 更多