使用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);
}
答案 0 :(得分:1)
重要的一点是顶点着色器中的texture_coord = world_pos.sp
。
有3种方法可以引用GLSL中向量的组成部分。 xyzw
(最常见),rgba
(对于颜色更自然),stpq
(对于纹理坐标更自然)。
如果将texture_coord = world_pos.sp
行写为texture_coord = world_pos.xz
,则会更清楚。
一旦意识到通过忽略y分量生成纹理坐标,很明显为什么垂直面没有按照您的意愿进行纹理化。
不幸的是,没有简单的一行解决方案。也许三平面纹理化可能是适合您的解决方案-this似乎是对该技术的很好解释。