将代码从 OpenGL 2.1 转换为 OpenGL 3.2
transform code from OpenGL 2.1 to OpenGL 3.2
我想理解这个旧代码,并使用着色器将其翻译为最新版本的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
它设置了一个正常的映射纹理。通道开关定义"正常"矢量指向的轴并相应地设置颜色;今天你会为此使用制服。
纹理环境方程的纹理环境,因为纹理不仅仅由 alpha 通道组成,设置了一些东西,看起来像下面的片段着色器
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);
}
相关文章:
- 了解 GLM- openGL 中的相机转换
- 将QOpenGLWidget子类转换为使用Metal而不是OpenGL的子类是否可行?
- OpenGL 转换无法使用 GLM 矩阵
- 将旧管道转换为现代 openGL 时出现问题
- 在 OpenGL 中将笛卡尔世界坐标转换为球面局部坐标
- 在 OpenGL 中转换应用顺序让我感到困惑
- 如何在OpenGL中使用关键事件来转换对象
- 如何正确地使用opengl转换的矩阵进行数学运算
- 使用SFML,现代OpenGL转换从2D点到3D
- 当我添加OpenGL转换时,我的图像不断消失
- 为 OpenGL 转换 .obj 每人脸变量
- 将代码从 OpenGL 2.1 转换为 OpenGL 3.2
- OpenGL 转换无法按预期在 z 轴上工作
- OpenGL转换不会生效
- c++ /OpenGL转换世界坐标到屏幕(2D)坐标
- 使用键盘输入的OpenGL转换不工作
- OpenGL转换在NDC坐标而不是屏幕坐标(2D)
- 将c++ OpenGl转换为Java(LWJGL), glBufferData();
- OpenGL转换RGBA字节像素到图像整数数组
- OpenGL/ c++ -转换和VBOs / Shader不让我转换