游戏开发论坛

 找回密码
 立即注册
搜索
查看: 4435|回复: 4

OPENGL ES1.1如何做多纹理混合?

[复制链接]

21

主题

112

帖子

112

积分

注册会员

Rank: 2

积分
112
发表于 2008-6-22 22:29:00 | 显示全部楼层 |阅读模式
ES1.1如何做多纹理混合?
按GL1.5似乎不适用ES1.1啊

试了下:
    glActiveTexture(GL_TEXTURE0);
    glEnable(GL_TEXTURE_2D);
    glBindTexture(GL_TEXTURE_2D, _infoTexture[0].ID);
    glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
   
    glActiveTexture(GL_TEXTURE1);
    glEnable(GL_TEXTURE_2D);
    glBindTexture(GL_TEXTURE_2D, _infoTexture[1].ID);
   
    glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_RGB);
    glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_INTERPOLATE);

试了下各种不同的混合方式, 都是只能显示出TEXTURE0, 混合后要么是变亮了要么就是变暗了. 就是没显示出TEXTRURE1,
GL_MAX_TEXTURE_UNITS是2.

18

主题

86

帖子

115

积分

注册会员

Rank: 2

积分
115
发表于 2009-4-12 18:54:00 | 显示全部楼层

Re:OPENGL ES1.1如何做多纹理混合?

好像纹理混合不支持,我是不用纹理画一遍,然后再在它的前面一点的位置再画一遍,画第二遍的时候开启混合,然后把用glColor4x(1,1,1,0.5F);设定alpha值。这样就模拟2个纹理混合了。

18

主题

86

帖子

115

积分

注册会员

Rank: 2

积分
115
发表于 2009-5-6 09:50:00 | 显示全部楼层

Re: OPENGL ES1.1如何做多纹理混合?

终于找到方法了适用于OpenGL ES 1.1
初始化:
        // Set vertex data
        glEnableClientState(GL_VERTEX_ARRAY);
        glVertexPointer(3, VERTTYPEENUM, sizeof(VERTTYPE) * 5, 0);

        // Set texture data

        //Set the texture data for the first texture.
        glClientActiveTexture(GL_TEXTURE0);
        glEnableClientState(GL_TEXTURE_COORD_ARRAY);
        glTexCoordPointer(2, VERTTYPEENUM, sizeof(VERTTYPE) * 5, (GLvoid*) (sizeof(VERTTYPE) * 3));

        /*
                Set the texture for the second texture. In this case we are just reusing the first
                set of texture coordinates.
        */
        glClientActiveTexture(GL_TEXTURE1);
        glEnableClientState(GL_TEXTURE_COORD_ARRAY);
        glTexCoordPointer(2, VERTTYPEENUM, sizeof(VERTTYPE) * 5, (GLvoid*) (sizeof(VERTTYPE) * 3));

        // Enable 2D texturing for the first texture.
        glActiveTexture(GL_TEXTURE0);
        glEnable(GL_TEXTURE_2D);

        // Enable 2D texturing for the second texture.
        glActiveTexture(GL_TEXTURE1);
        glEnable(GL_TEXTURE_2D);
渲染:
        // Set up the First Texture
        glActiveTexture(GL_TEXTURE0);
        glEnable(GL_TEXTURE_2D);
        glBindTexture(GL_TEXTURE_2D, m_ui32Stamp);

        // Set up the Second Texture
        glActiveTexture(GL_TEXTURE1);
        glEnable(GL_TEXTURE_2D);
        glBindTexture(GL_TEXTURE_2D, m_ui32Crate);

        GLfloat constColor[4] = { 0.0, 0.0, 0.0, 0.0 };
        constColor[3] = 0.5;

        glTexEnvfv(GL_TEXTURE_ENV, GL_TEXTURE_ENV_COLOR, constColor);

        glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE);
        glTexEnvf(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_INTERPOLATE);

        glTexEnvf(GL_TEXTURE_ENV, GL_SRC0_RGB, GL_TEXTURE);
        glTexEnvf(GL_TEXTURE_ENV, GL_OPERAND0_RGB, GL_SRC_COLOR);

        glTexEnvf(GL_TEXTURE_ENV, GL_SRC1_RGB, GL_PREVIOUS);
        glTexEnvf(GL_TEXTURE_ENV, GL_OPERAND1_RGB, GL_SRC_COLOR);

        glTexEnvf(GL_TEXTURE_ENV, GL_SRC2_RGB, GL_CONSTANT);
        glTexEnvf(GL_TEXTURE_ENV, GL_OPERAND2_RGB, GL_SRC_ALPHA);

6

主题

237

帖子

238

积分

中级会员

Rank: 3Rank: 3

积分
238
发表于 2009-5-8 11:37:00 | 显示全部楼层

Re:OPENGL ES1.1如何做多纹理混合?

ES1.1里没有multi-texture么?

18

主题

86

帖子

115

积分

注册会员

Rank: 2

积分
115
发表于 2009-5-13 15:11:00 | 显示全部楼层

Re:OPENGL ES1.1如何做多纹理混合?

修改了一下,这样就可以用GL_INTERPOLATE模式混合两个纹理了。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-12-20 09:33

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表