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位置?