OpenGL 反转镜面光贴图:实现反射光与非反射光切换
在 OpenGL 中,可以使用 glTexEnvi 函数来控制纹理的环境参数。其中,GL_TEXTURE_ENV_MODE 参数可以设置纹理的混合模式。
要实现反转镜面光贴图,需要将 GL_TEXTURE_ENV_MODE 设置为 GL_COMBINE,并使用 GL_ONE_MINUS_SRC_COLOR 和 GL_SRC_COLOR 作为混合参数。这将反转纹理的颜色值,使原来不反射光的贴图变成反射光的贴图。
具体实现代码如下:
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE);
glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_SUBTRACT);
glTexEnvi(GL_TEXTURE_ENV, GL_SRC0_RGB, GL_TEXTURE);
glTexEnvi(GL_TEXTURE_ENV, GL_SRC1_RGB, GL_PRIMARY_COLOR);
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB, GL_SRC_COLOR);
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB, GL_ONE_MINUS_SRC_COLOR);
要将原来反射光的贴图变成不反射光的贴图,则需要将 GL_TEXTURE_ENV_MODE 设置为 GL_REPLACE,将混合参数设置为 GL_TEXTURE 和 GL_CONSTANT_COLOR。这将使用固定的颜色值替代原来的纹理颜色,使其不反射光。
具体实现代码如下:
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
glTexEnvfv(GL_TEXTURE_ENV, GL_TEXTURE_ENV_COLOR, [0.0, 0.0, 0.0, 0.0]);
glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_MODULATE);
glTexEnvi(GL_TEXTURE_ENV, GL_SRC0_RGB, GL_TEXTURE);
glTexEnvi(GL_TEXTURE_ENV, GL_SRC1_RGB, GL_CONSTANT_COLOR);
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB, GL_SRC_COLOR);
通过以上方法,可以轻松地在 OpenGL 中反转镜面光贴图,实现反射光与非反射光之间的切换。
原文地址: https://www.cveoy.top/t/topic/lyV0 著作权归作者所有。请勿转载和采集!