为什么我的纹理在使用 sampler2D 渲染到表面后会被插值

Why is my texture interpolated after rendering it on a surface with sampler2D

我正在用 C# 中的 OpenTK 编写一个程序,目前我试图在一组立方体上获取纹理。

我的问题是,当我使用其中包含 3 个像素的给定纹理并将位图提供给我的着色器到 sampler2d 时,它会在渲染时插入纹理的颜色,而不是给我 3 行带有 3 种颜色的每个立方体的每一面。

为了将其添加到着色器中,我使用了与 this side.

中给出的代码类似的代码

这里是我的片段着色器中的确切代码:

#version 430 core

uniform sampler2D materialTexture;

in vec2 uvPos;

out vec4 color;

void main() 
{
    vec4 materialColor = texture2D(materialTexture, uvPos);
    color = materialColor;
}

这里是 gimp 中显示的用作纹理的图像:

这里是当前结果

我必须怎么做才能在不插值的情况下在立方体上渲染图像? 我可以在 OpenTK 中设置任何标志或调用来防止这种情况发生吗?

放大函数需要使用最近邻过滤

这里有一个 3x1 的纹理,需要将其放大以延伸到场景中。 OpenGL 中的默认放大过滤器 (GL_TEXTURE_MAG_FILTER) 是 GL_LINEAR,它对四个最接近的纹素进行插值。

GL_NEAREST 将产生您想要的行为。缩小(当你的纹理分辨率太高时)在这里不适用,但也默认为线性过滤。