OpenGl 所有模型都具有相同的纹理 [英] OpenGl all models are with the same texture

查看:23
本文介绍了OpenGl 所有模型都具有相同的纹理的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I would like to know how to bind different textures to different models or how to improve my code.

我的代码:

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 是一个状态机,这意味着在每次绘制调用时都会使用当前状态.因此,如果您想使用不同的纹理进行两次绘制调用,那么您必须确保在每次绘制调用时都绑定了正确的纹理:

As already said in the comment, there is no concept like a model or a object. OpenGL is a state machine, which means that at every draw-call the current state is used. So if you want to have two draw-calls using different textures, then you have to make sure that at every draw-call the correct texture is bound:

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

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

这篇关于OpenGl 所有模型都具有相同的纹理的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆