2
我想了解這個古老的代碼和對OpenGL的最新版本使用着色器翻譯它:變換代碼的OpenGL 2.1 OpenGL的3.2
if (channel == Alpha) {
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
} else {
// replicate color into alpha
if (GL_ARB_texture_env_dot3) {
switch (channel) {
case Red:
glColor3f(1.0, 0.5, 0.5);
break;
case Green:
glColor3f(0.5, 1.0, 0.5);
break;
case Blue:
glColor3f(0.5, 0.5, 1.0);
break;
default:
// should not happen!
assert(0);
}
} else {
// should not happen!
assert(0);
}
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB);
glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_DOT3_RGBA_ARB);
glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_TEXTURE);
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR);
glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_EXT, GL_PRIMARY_COLOR);
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB_EXT, GL_SRC_COLOR);
}
<draw models>
我的想法發生了什麼:
if channe = Alpha
just replace alpha
else
// no idea why used glColor3f
looks like it makes one of the colors 100% bright
and then in magical 6 glTexEnvi lines it transforms to alpha
對不起,我沒抄2個串,現在添加,它有原色 – SAKrisT
如果頻道==阿爾法發生了什麼? – SAKrisT
@SAKrisT:然後紋理的值被傳遞。由於它是一個alpha紋理,它很可能只是用於調整混合因子。在GLSL中,它將是'gl_FragColor = vec4(primary_color.rgb,texture(tex,tex_coord).a);'。 OpenGL固定功能流水線狀態機是一個令人費解的野獸。 – datenwolf