繁体   English   中英

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;
}

片段着色器

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

有3种方法可以引用GLSL中向量的组成部分。 xyzw (最常见), rgba (对于颜色更自然), stpq (对于纹理坐标更自然)。

该生产线texture_coord = world_pos.sp如果它被写成会更清晰texture_coord = world_pos.xz

一旦意识到通过忽略y分量生成纹理坐标,就很明显为什么不对垂直平面进行纹理化处理。

不幸的是,没有简单的一线解决方案。 也许三平面纹理化可能是您合适的解决方案- 似乎是对该技术的很好解释。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM