gpt4 book ai didi

c++ - 将代码从 OpenGL 2.1 转换为 OpenGL 3.2

转载 作者:搜寻专家 更新时间:2023-10-31 01:46:56 28 4
gpt4 key购买 nike

我想理解这段旧代码并使用着色器将其转换为最新版本的 OpenGL:

        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

最佳答案

它设置了一个法线贴图纹理。 channel 开关定义“法线” vector 指向哪个轴并相应地设置颜色;今天你会为此穿上制服。

在纹理不仅仅由 alpha channel 组成的情况下,纹理环境的等式设置了一些东西,看起来像下面的片段着色器

uniform vec3 primary_direction; // instead of primary color
uniform sampler… tex;

in vec2 tex_coord;

void main()
{
gl_FragColor = vec4( dot(primary_direction, texture(tex, tex_coord)), 1);
}

关于c++ - 将代码从 OpenGL 2.1 转换为 OpenGL 3.2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20006705/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com