因此,即使使用2個不同的着色器呈現問題。我目前正在渲染代表骰子的形狀,我想要的是,如果用戶選擇了骰子,則通過將骰子完全繪製爲紅色並略微放大來繪製輪廓,然後將適當的骰子放在它上面。目前,由於某種原因,某些骰子爲輪廓提供了錯誤的骰子,但是爲正確的前景骰子提供了正確的骰子。2使用相同頂點數據的着色器
林想知道他們是否沒有得到他們的頂點數據以某種方式混淆。林不知道,如果做這樣的事情,即使是允許在OpenGL:
glGenBuffers(1, &_vertexBuffer);
glBindBuffer(GL_ARRAY_BUFFER, _vertexBuffer);
glBufferData(GL_ARRAY_BUFFER, numVertices*sizeof(GLfloat), vertices, GL_STATIC_DRAW);
glEnableVertexAttribArray(effect->vertCoord);
glVertexAttribPointer(effect->vertCoord, 3, GL_FLOAT, GL_FALSE, 0, 0);
glEnableVertexAttribArray(effect->toon_vertCoord);
glVertexAttribPointer(effect->toon_vertCoord, 3, GL_FLOAT, GL_FALSE, 0, 0);
我嘗試綁定的頂點數據在這裏2個不同的着色器 當我加載我的第一個着色器,我有:
vertCoord = glGetAttribLocation(TexAndLighting, "position");
和其他着色器:
toon_vertCoord = glGetAttribLocation(Toon, "position");
如果我單獨使用每個他們的工作很好,但其他的陰影時,我嘗試呈現兩個一個在另一個他們GE的頂部這個模型混合了一些時間。這裏是我的繪製函數的樣子:
- (void) draw {
[EAGLContext setCurrentContext:context];
glBindVertexArrayOES(_vertexArray);
effect->modelViewMatrix = mvm;
effect->numberColour = GLKVector4Make(numbers[colorSelected].r, numbers[colorSelected].g, numbers[colorSelected].b, 1);
effect->faceColour = GLKVector4Make(faceColors[colorSelected].r, faceColors[colorSelected].g, faceColors[colorSelected].b, 1);
if(selected){
[effect drawOutline]; //this function prepares the shader
glDrawElements(GL_TRIANGLES, numIndices, GL_UNSIGNED_SHORT, 0);
}
[effect prepareToDraw]; //same with this one
glDrawElements(GL_TRIANGLES, numIndices, GL_UNSIGNED_SHORT, 0);
}
這是什麼樣子,你可以看到大部分的輪廓都使用了錯誤的骰子,或者根本就沒有:
鏈接到全代碼:
http://pastebin.com/yDKb3wrD Dice.mm //渲染的東西
http://pastebin.com/eBK0pzrK Effects.mm //着色器的東西
http://pastebin.com/5LtDAk8J //我的着色器,不應該是任何與他們雖然
TL; DR:嘗試使用2個不同的着色器,它們使用相同的頂點數據,但在同時使用兩個渲染時混合起來,這就是我認爲出錯的地方,實際上很難過。
不要忘記,您可以在鏈接之前使用'glBindAttribLocation'來爲着色器上的特定頂點屬性指定屬性索引。 –
啊,謝謝你們(再次,因爲你們兩個回答我的最後一個問題),我儘快嘗試一下。正如你可以看到即時通訊仍在學習OpenGL:P – Fonix
這是你想到你的答案? http://pastebin.com/KbjYym6q 它似乎工作的大部分,除了我得到一個奇怪的問題,其中像第一個着色器(香椿/輪廓着色器)不使用其着色器,並且只有片段着色器,原因它獲得的顏色是正確的,只是沒有按照它的意圖擴展模型(可以在我的問題的鏈接中查看我的着色器)。我必須禁止繪製一種能夠看到另一種的方式,他們不會在同一時間工作,這很奇怪。 – Fonix