我在GLSL紋理地獄:我在片段着色器中加載統一sampler2D變量中相同大小的4種不同紋理,並嘗試使用不同的紋理座標訪問它們:GLSL使用不同texCoord(iPad)的多紋理查找
uniform sampler2D image0, image1, image2, image3;
varying highp vec2 texCoord;
void main()
{
highp vec2 tc = vec2(texCoord.x, mod(1.0-texCoord.y, 0.2) + 0.2);
lowp vec4 color0 = texture2D(image0, tc);
lowp vec4 color1 = texture2D(image1, tc);
lowp vec4 color2 = texture2D(image2, tc);
lowp vec4 color3 = texture2D(image3, tc);
if (texCoord.y < 0.2) { gl_FragColor = color0; }
else if (texCoord.y < 0.4) { gl_FragColor = color1; }
else if (texCoord.y < 0.6) { gl_FragColor = color2; }
else if (texCoord.y < 0.8) { gl_FragColor = color3; }
else { gl_FragColor = vec4(0.0); }
}
的texCoord來自課程的頂點着色器:
uniform lowp float ratio;
attribute highp vec4 vertex;
varying highp vec2 texCoord;
void main()
{
gl_Position = vertex;
texCoord.x = ((vertex.x * 0.5) + 0.5) * ratio;
texCoord.y = (vertex.y * 0.5) + 0.5;
}
我得到5個獨立片,從image0,圖像2(!!不是圖像1),圖像3,圖像3(又來了!),和黑色(這將保持各種紋理的融合,在這種情況下不重要,我的概率lem首先獲得正確的紋理)。我的圖像加載代碼多次檢查,我做負載4種不同的圖片:
- (void)linkTexture:(GLenum)tex image:(Image *)image varName:(const char *)varName
{
GLint texLocation;
texLocation = glGetUniformLocation(program, varName);
glUniform1i(texLocation, tex-GL_TEXTURE0);
glActiveTexture(tex);
glBindTexture(GL_TEXTURE_2D, image->texID);
}
進一步回落:
loadTexture("new_york_0.jpg", &image0, &renderer);
[self linkTexture:GL_TEXTURE0 image:&image0 varName:"image0"];
loadTexture("new_york_1.jpg", &image1, &renderer);
[self linkTexture:GL_TEXTURE1 image:&image1 varName:"image1"];
loadTexture("new_york_2.jpg", &image2, &renderer);
[self linkTexture:GL_TEXTURE2 image:&image2 varName:"image2"];
loadTexture("new_york_3.jpg", &image3, &renderer);
[self linkTexture:GL_TEXTURE3 image:&image3 varName:"image3"];
一定有什麼東西在我期待的GPU來查找紋理的方式非常錯誤的但我不知道它是什麼。
有人能發光嗎?
+1,雖然我認爲image1沒有顯示是採樣器設置代碼中的一個簡單錯誤(因此爲什麼我們在未註釋的代碼中看到image2) – Bahbar 2010-10-12 14:28:33
噢,我的噢,我的,你當然是對的,那是爲什麼我每次都看到圖片1,這對我來說很愚蠢。我已經修復了這部分,並且在每個切片中看到不同的圖像,但不是正確的,我將編輯該問題以詳細說明如何加載圖像。 – 2010-10-12 15:16:45
一個想法,爲什麼我沒有看到正確的紋理?任何人?我已經看過這段代碼很久了,我可能會錯過另一個明顯的錯誤,但我看不到它。 – 2010-10-13 06:29:58