使用着色器我正在尝试为平面着色,以便复制纹理上的像素。纹理为 32x32 像素,平面在空间坐标中的大小也是 32x32。
有谁知道我将如何检查纹理上的第一个像素,然后用它为平面上的第一个正方形 (1x1) 着色?
生成的纹理示例:(第一个像素故意为红色)
此代码使用坐标为 (0,0) 的 vec2 无法按我的预期工作。我假设 (0,0) 处的颜色是红色,但不是,它是绿色:
vec4 color = texture2D(texture, vec2(0, 0));
我想我缺少一些东西,或者不了解 texture2D,因为 (0,0) 似乎也不是结束像素。
如果有人可以帮助我,将不胜感激。谢谢。
编辑:
感谢您的评论和回答!使用此代码,它现在可以工作:
// Flip the texture vertically
vec3 verpos2 = verpos.xyz * vec3(1.0, 1.0, -1.0);
// Calculate the pixel coordinates the fragment belongs to
float pixX = floor(verpos2.x - floor(verpos2.x / 32.0) * 32.0);
float pixZ = floor(verpos2.z - floor(verpos2.z / 32.0) * 32.0);
float texX = (pixX + 0.5) / 32.0;
float texZ = (pixZ + 0.5) / 32.0;
gl_FragColor = texture2D(texture, vec2(texX, texZ));
也就是说,我遇到了每个“块”边缘的锯齿线问题。在我看来,我的数学已经关闭,并且对边应该是什么颜色感到困惑,因为我只使用顶点颜色时没有这个问题。任何人都可以看到我哪里出错或如何做得更好?
再次感谢!