首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android OpenGL ES 1.1中的Multiply textures

Android OpenGL ES 1.1中的Multiply textures
EN

Stack Overflow用户
提问于 2012-02-07 16:00:13
回答 1查看 765关注 0票数 0

我正在尝试在安卓系统上学习OpenGL,作为我学习项目的一部分,我想让纹理的一部分变得透明。为了实现这一点,我得到了一个全白的纹理,在我想要透明的地方,alpha通道设置为透明。我的计划是将它与我想要显示的纹理相乘,但我对缩写的函数名和整数常量感到有点困惑。

有没有简单但完整的纹理乘法示例?

EN

回答 1

Stack Overflow用户

发布于 2012-02-07 18:19:41

编辑:我的错,我刚看到你在找一个gl 1.0的例子

看起来您正在寻找一个多纹理示例:http://code.google.com/p/opengles-book-samples/source/browse/trunk/Android/Ch10_MultiTexture/src/com/openglesbook/multitexture/MultiTextureRenderer.java?r=45

这是一个opengl es 2.0示例。当你阅读代码时,你会发现纹理的实际混合是在fragmentshader中完成的。

编辑2:我找不到opengl-es 1.1示例,但我有一些旧的opengl 2.0代码。它是用c/c++编写的,所以你必须自己把它转换成java。

我查阅了GLES 1.1规范,发现它似乎支持我的代码中的关键函数: glActiveTexture、glMultiTexCoord和glTexEnvi,所以这可能会帮助你入门……

代码语言:javascript
复制
glActiveTextureARB( GL_TEXTURE0_ARB );
glBindTexture( GL_TEXTURE_2D, KdMapIndex );
glTexEnvi( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);

glActiveTextureARB( GL_TEXTURE1_ARB );
glBindTexture(GL_TEXTURE_2D, KaMapIndex);
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_ADD);

glBegin(GL_TRIANGLES);
for (face = faces.begin(); face != faces.end(); face++)
{
    CVector3f normal;
    CVector2f texture0, texture1, texture2;
    CVector3f vertex0, vertex1, vertex2;

    normal.x = data.normals[face->nIndex[0]-1].x;
    normal.y = data.normals[face->nIndex[1]-1].y;
    normal.z = data.normals[face->nIndex[2]-1].z;
    normal.normalize();

    texture0 = data.texcoords[face->tIndex[0]-1];
    texture1 = data.texcoords[face->tIndex[1]-1];
    texture2 = data.texcoords[face->tIndex[2]-1];

    vertex0 = data.vertices[face->vIndex[0]-1];
    vertex1 = data.vertices[face->vIndex[1]-1];
    vertex2 = data.vertices[face->vIndex[2]-1];

    glNormal3f(normal.x, normal.y, normal.z);       // Face normal

    glMultiTexCoord2fARB( GL_TEXTURE0_ARB, texture0.x, texture0.y ); // texcoord 0
    glMultiTexCoord2fARB( GL_TEXTURE1_ARB, texture0.x, texture0.y );        
    glVertex3f(vertex0.x, vertex0.y, vertex0.z);    // vertex 0

    glMultiTexCoord2fARB( GL_TEXTURE0_ARB, texture1.x, texture1.y ); // texcoord 1
    glMultiTexCoord2fARB( GL_TEXTURE1_ARB, texture1.x, texture1.y );    
    glVertex3f(vertex1.x, vertex1.y, vertex1.z);    // vertex 1

    glMultiTexCoord2fARB( GL_TEXTURE0_ARB, texture2.x, texture2.y ); // texcoord 2
    glMultiTexCoord2fARB( GL_TEXTURE1_ARB, texture2.x, texture2.y );    
    glVertex3f(vertex2.x, vertex2.y, vertex2.z);    // vertex 2
}
glEnd();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9172771

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档