Умножение текстур в Android OpenGL ES 1.1 - PullRequest
0 голосов
/ 07 февраля 2012

Я пытаюсь изучать OpenGL на Android, и в рамках своего учебного проекта я хочу сделать часть текстуры прозрачной.Для этого у меня есть белая текстура с альфа-каналом, прозрачным там, где я хочу прозрачность.Мой план состоял в том, чтобы умножить это на текстуру, которую я хочу отобразить, но я немного ошеломлен сокращенными именами функций и целочисленными константами.

Есть ли какие-нибудь простые, но полные примеры с умножением текстуры?

1 Ответ

0 голосов
/ 07 февраля 2012

РЕДАКТИРОВАТЬ: мой плохой, я только что увидел, что вы ищете пример 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. Когда вы прочитаете код, вы увидите, что фактическое смешивание текстуры выполняется в фрагментах.

РЕДАКТИРОВАТЬ 2: Я не смог найти пример opengl-es 1.1, но у меня есть старый код opengl 2.0. Он написан на c / c ++, поэтому вам придется конвертировать его в java самостоятельно.

Я посмотрел спецификацию GLES 1.1, и кажется, что она поддерживает ключевые функции из моего кода: glActiveTexture, glMultiTexCoord и glTexEnvi, так что это может помочь вам начать ...

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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...