Ave
I have a problem with the effect of DOT 3 The model is the MD2 format. The problem is that the effect can only be seen as the model is illuminated from the front. Just like in the screenshot. The code itself is simple but not working properly. And I do not know where the error is.
Code:
glActiveTextureARB (GL_TEXTURE0);
glBindTexture (GL_TEXTURE_CUBE_MAP,NORMALIZATION_CUBE_MAP);
glEnable (GL_TEXTURE_CUBE_MAP);
glTexEnvi (GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_COMBINE);
glTexEnvi (GL_TEXTURE_ENV,GL_COMBINE_RGB,GL_REPLACE);
glTexEnvi (GL_TEXTURE_ENV,GL_SOURCE0_RGB,GL_TEXTURE);
glActiveTextureARB (GL_TEXTURE1);
glBindTexture (GL_TEXTURE_2D, modelTexB->texID);
glEnable(GL_TEXTURE_2D);
glTexEnvi (GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_COMBINE);
glTexEnvi (GL_TEXTURE_ENV,GL_COMBINE_RGB,GL_DOT3_RGB);
glTexEnvi (GL_TEXTURE_ENV,GL_SOURCE0_RGB,GL_PREVIOUS);
glTexEnvi (GL_TEXTURE_ENV,GL_SOURCE1_RGB,GL_TEXTURE);
glActiveTextureARB (GL_TEXTURE2);
glBindTexture (GL_TEXTURE_2D, modelTex->texID);
glEnable (GL_TEXTURE_2D);
glTexEnvi (GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_MODULATE);
glBegin(GL_TRIANGLES);
for(i = 0; i < numTriangles; i++) {
for (GLint u = 0; u < 3; u++) {
GLfloat Light_vector[3];
Light_vector[0] = light_pos[0] - vList[triIndex[i].meshIndex[u]].point[0];
Light_vector[1] = light_pos[1] - vList[triIndex[i].meshIndex[u]].point[1];
Light_vector[2] = light_pos[2] - vList[triIndex[i].meshIndex[u]].point[2];
glMultiTexCoord3fv (GL_TEXTURE0, Light_vector);
glMultiTexCoord2fARB (GL_TEXTURE1, bst[triIndex[i].stIndex[u]].s, bst[triIndex[i].stIndex[u]].t);
glMultiTexCoord2fARB (GL_TEXTURE2, st[triIndex[i].stIndex[u]].s, st[triIndex[i].stIndex[u]].t);
glNormal3f (0.0f, 0.0f ,1.0f); //?
glVertex3fv (vList[triIndex[i].meshIndex[u]].point);
}
}
front: http://img708.imageshack.us/img708/9136/99808516.png
back: http://img401.imageshack.us/img401/1632/63897143.th.png