为什么我的纹理在使用sampler2D在表面上渲染后进行插值

时间:2016-08-17 16:44:38

标签: opengl glsl textures opentk

我在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中显示的纹理的图像: The 3 pixel texture

这是当前的结果 The result after rendering

我需要做什么才能在没有插值的情况下在立方体上渲染图像? 在OpenTK中是否可以设置任何标志或调用来阻止这种情况?

1 个答案:

答案 0 :(得分:4)

您需要对 放大 功能使用最近邻滤波。

这里有3x1纹理,需要放大才能在场景中拉伸。 OpenGL中的默认放大滤镜(GL_TEXTURE_MAG_FILTER)为GL_LINEAR,可插入四个最接近的纹素。

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