0

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

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

在此处输入图像描述

我的目标是通过着色器完成这项工作,我还没有使用它们的经验,但我正在努力学习..

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

uniform sampler2D tex0;

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

显然这只是开始,所有的边都使用纹理的相同部分,我只是着色器的新手,我什至不确定这是否真的可以这样做..

我只是不知道是否真的有可能确定我当前在哪张脸上等等,我想我可能能够将有关顶点的信息传递给片段着色器然后根据它采取行动?

PS:我首先这样做是因为我想要一个功能,如果立方体将被调整大小,每一面的纹理都会重复而不是拉伸

4

1 回答 1

0

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

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

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

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

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

于 2013-04-10T13:25:56.700 回答