Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/161.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ OpenGL-对基本立方体进行纹理处理_C++_Opengl - Fatal编程技术网

C++ OpenGL-对基本立方体进行纹理处理

C++ OpenGL-对基本立方体进行纹理处理,c++,opengl,C++,Opengl,我试图通过只使用一个纹理对立方体进行纹理处理,但在每个面上只渲染立方体的一部分 这是我现在想要使用的纹理: 我的目标是通过着色器实现这一点,我还没有使用它们的经验,但我正在尽最大努力学习 以下是我当前的片段着色器: uniform sampler2D tex0; void main() { vec2 pos = vec2(gl_TexCoord[0] / 4.0); vec3 test = texture2D(tex0,pos).rgb; gl_FragColor.r

我试图通过只使用一个纹理对立方体进行纹理处理,但在每个面上只渲染立方体的一部分

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

我的目标是通过着色器实现这一点,我还没有使用它们的经验,但我正在尽最大努力学习

以下是我当前的片段着色器:

uniform sampler2D tex0;

void main()
{
    vec2 pos = vec2(gl_TexCoord[0] / 4.0);
    vec3 test = texture2D(tex0,pos).rgb;
    gl_FragColor.rgb = test;
}
显然,这只是开始,所有侧面都使用相同的纹理部分, 我刚刚接触着色器,我甚至不确定是否真的可以这样做。

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

附言:
我之所以这么做,首先是因为我想要一个功能,如果立方体将被调整大小,则每一侧的纹理都将重复自身,而不是拉伸,不推荐使用gl_TexCoord。您应该创建另一个通用顶点属性并在其中存储纹理坐标

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

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

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

现在,您可以在片段着色器中使用
out\u texcoord

感谢您的快速回答,您是否可以进一步解释一下我是如何知道自己当前在哪张脸上的?另外,如何偏移纹理以显示纹理的其他部分?因为目前我得到的立方体只显示纹理的“顶部”部分,无论我做什么,我都看不到让它显示其他部分的好方法。你能理解“创建另一个通用顶点属性并在其中存储纹理坐标”这句话吗?我想我没有?我错过了什么;我怎么知道你到底不明白什么?我建议先读(前几章)。好吧,不过我想我现在明白你的意思了。如果我错了,请更正,但在创建网格时为每个顶点添加属性?该属性将保存xyz位置?