OpenGL 中垂直平面上的纹理显示不正确

Incorrect texture display on vertical plane in OpenGL

正在开发 AR 应用程序并尝试替换平面纹理。

我正在尝试在垂直和水平平面上渲染纹理。它在水平面上工作正常,但在垂直面上效果不佳。

我发现 texture_coord 计算有问题,但无法弄清楚(OpenGL 新手)。

这是我的顶点着色器

void main()
{
    vec4 local_pos = vec4(a_position, 1.0);
    vec4 world_pos = u_model * local_pos;

    texture_coord = world_pos.sp * u_scale;

    gl_Position = u_mvp * local_pos;
}

片段着色器

out vec4 outColor;

void main()
{
    vec4 control = texture(u_texture, diffuse_coord);

    float dotScale = 1.0;

    float lineFade = 0.5;

    vec3 newColor = (control.r * dotScale > u_gridControl.x) ? u_dotColor.rgb : control.g > u_gridControl.y ? u_lineColor.rgb * lineFade: u_lineColor.rgb * 0.25 * lineFade;

    outColor = vec4(newColor, 1.0);
}

重要的一点是顶点着色器中的 texture_coord = world_pos.sp

在 GLSL 中有 3 种方式来引用向量的组件。 xyzw(最常见),rgba(颜色更自然),stpq(纹理坐标更自然)。

texture_coord = world_pos.sp行如果写成texture_coord = world_pos.xz会更清楚。

一旦您意识到您正在通过忽略 y 分量来生成纹理坐标,那么很明显为什么垂直平面没有按照您想要的方式进行纹理化。

遗憾的是,没有简单的一行修复方法。也许三平面纹理可能是适合您的解决方案 - this 似乎是对该技术的一个很好的解释。