2013-04-10 122 views
0

我想通过仅使用一个纹理来纹理立方体,但只渲染每个面上的一部分。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: 我去这个摆在首位,因为我希望有一个功能,其中如果多维数据集将被重新调整,在每边纹理是否会重演,而不是伸展

回答

0

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

同时将纹理片段着色器完成,纹理坐标通常提供给顶点着色器,然后再在其线性在所有生成的碎片插:

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

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

现在你可以在片段着色器使用out_texcoord

+0

感谢您的快速回答,您是否可以进一步解释我究竟如何知道我目前的面部表情?另外,我将如何能够抵消纹理来显示其他部分?因为目前我得到的立方体只显示纹理的“顶部”部分,无论我做什么,我都没有看到让它显示其他部分的好方法 – Radicate 2013-04-10 13:36:22

+0

您是否了解“创建另一个常规使用顶点属性并在其中存储纹理坐标。“? – 2013-04-10 13:38:07

+0

我想我没有?我错过了什么? ; x – Radicate 2013-04-10 13:45:56