OpenGL - 纹理基本多维数据集

时间:2013-04-10 13:11:25

标签: c++ opengl

我试图仅使用一个纹理来纹理立方体,但只在每个面上渲染一部分。

这是我现在想要使用的纹理:

enter image description here

我的目标是通过着色器完成此操作,我对它们没有经验,但我正在努力学习..

这是我当前的片段着色器:

uniform sampler2D tex0;

void main()
{
    vec2 pos = vec2(gl_TexCoord[0] / 4.0);
    vec3 test = texture2D(tex0,pos).rgb;
    gl_FragColor.rgb = test;
}

显然它只是一个开始,并且所有方面都使用相同的纹理部分, 我只是新的着色器,我甚至不确定这是否真的可以这样做..

我只是不知道是否真的可以确定我当前在哪个面上这样,我想我可能能够将有关顶点的信息传递给片段着色器然后根据它进行操作?

P.S: 我首先考虑的是因为我想要一个功能,如果要调整立方体的大小,每边的纹理都会重复而不是拉伸

1 个答案:

答案 0 :(得分:0)

gl_TexCoord已弃用。您应该创建另一个通用顶点属性并在其中存储纹理坐标。

在片段着色器中应用纹理时,纹理坐标通常首先提供给顶点着色器,然后在所有生成的片段中线性插值:

#version 430
//...
layout(location = 1) in vec2 attr_texcoord;
out vec2 out_texcoord;

void main () {
    out_texcoord = attr_texcoord;
    //...
}

现在,您可以在片段着色器中使用out_texcoord