在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中引用向量的组件。 xyzw
(最常见的),rgba
(颜色更自然),stpq
(纹理坐标更自然)。
如果它被写为texture_coord = world_pos.sp
,那么texture_coord = world_pos.xz
线会更清晰。
一旦你意识到你通过忽略y分量来生成纹理坐标,很明显为什么垂直平面没有纹理化你想要的样子。
不幸的是,没有简单的一行修复。也许三平面纹理可能是适合您的解决方案 - this似乎是对该技术的一个很好的解释。