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

问题描述 投票:0回答:1

在AR应用程序上工作并尝试替换平面纹理。

我正在尝试在垂直和水平平面上渲染纹理。它适用于水平平面,但在垂直方向上效果不佳。

enter image description here

我发现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);
}
android opengl-es arcore
1个回答
1
投票

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

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

如果它被写为texture_coord = world_pos.sp,那么texture_coord = world_pos.xz线会更清晰。

一旦你意识到你通过忽略y分量来生成纹理坐标,很明显为什么垂直平面没有纹理化你想要的样子。

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

© www.soinside.com 2019 - 2024. All rights reserved.