|
已知OpenGL之中,颜色纹理支持多重纹理,用glActiveTexture()函数进行纹理单元之间的切换。但是如果我需要同时进行颜色纹理与深度纹理之间的映射的话,那该怎么处理呢。
比如:我想绘制一个物体,并且在绘制时启动第一层的纹理自动生成,于是我可以写如下的代码:
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D,color_texture);
glEnable(GL_TEXTURE_2D);
glTexEnvi(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_MODULAT);
glEnable(GL_TEXTURE_GEN_S);
glTexGeni(GL_S,GL_TEXTURE_GEN_MODE,GL_OBJECT_LINEAR);
glTexGenfv(GL_S,GL_OBJECT_PLANE,plane_s);
glEnable(GL_TEXTURE_GEN_T);
glTexGeni(GL_T,GL_TEXTURE_GEN_MODE,GL_OBJECT_LINEAR);
glTexGenfv(GL_T,GL_OBJECT_PLANE,plane_t);
//下面我要设置深度纹理的纹理坐标自动生成
//下面的代码正确吗?
glBindTexture(GL_TEXTURE_2D,depth_texture);
glEnable(GL_TEXTURE_2D);
glTexEnvi(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_REPLACE);
glEnable(GL_TEXTURE_GEN_S);
glTexGeni(GL_S,GL_TEXTURE_GEN_MODE,GL_EYE_LINEAR);
glTexGenfv(GL_S,GL_EYE_PLANE,depth_plane_s);
glEnable(GL_TEXTURE_GEN_T);
glTexGeni(GL_T,GL_TEXTURE_GEN_MODE,GL_EYE_LINEAR);
glTexGenfv(GL_S,GL_EYE_PLANE,depth_plane_t);
glEnable(GL_TEXTURE_GEN_R);
glTexGeni(GL_R,GL_TEXTURE_GEN_MODE,GL_EYE_PLANE);
glTexGenfv(GL_R,GL_EYE_PLANE,depth_plane_r);
glEnable(GL_TEXTURE_GEN_Q);
glTexGeni(GL_Q,GL_TEXTURE_GEN_MODE,GL_EYE_PLANE);
glTexGenfv(GL_Q,GL_EYE_PLANE,depth_plane_q);
//进行场景的绘制
//下面是关闭的代码
glBindTexture(GL_TEXTURE_2D,depth_texture);
glDisable(GL_TEXTURE_GEN_Q);
glDisable(GL_TEXTURE_GEN_R);
glDisable(GL_TEXTURE_GEN_T);
glDisable(GL_TEXTURE_GEN_S);
glDisable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D,color_texture);
glDisable(GL_TEXTURE_GEN_T);
glDisable(GL_TEXTURE_GEN_S);
glDisable(GL_TEXTURE_2D);
上面的代码在同时生成第一个纹理单元的颜色纹理与深度纹理方面有错误吗? |
|