我正在將一些代碼從OpenGL ES 1.x移植到OpenGL ES 2.0,我正在努力獲得像以前一樣的透明度工作;我所有的三角形都呈現完全不透明狀態。如何在OpenGL ES 2.0中使用Alpha混合透明度?
我的OpenGL設置有這些行:
// Draw objects back to front
glDisable(GL_DEPTH_TEST);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glDepthMask(false);
我的着色器看起來像這樣:
attribute vec4 Position;
uniform highp mat4 mat;
attribute vec4 SourceColor;
varying vec4 DestinationColor;
void main(void) {
DestinationColor = SourceColor;
gl_Position = Position * mat;
}
這:
varying lowp vec4 DestinationColor;
void main(void) {
gl_FragColor = DestinationColor;
}
可能是什麼回事?
編輯:如果我在片段着色器手動在片段着色器(在頂點着色器或確實)設置alpha到0.5
由keaukraine below的建議,然後我得到透明的一切。 此外,如果我更改顏色值我傳遞給OpenGL浮動而不是無符號字節,然後代碼正常工作。
所以它看起來好像事情是錯被路過的色彩信息轉換成OpenGL代碼,而我仍想知道是什麼問題了。
我的頂點是這樣定義的(持平OpenGL ES的1.x的代碼):
typedef struct
{
GLfloat x, y, z, rhw;
GLubyte r, g, b, a;
} Vertex;
而且我用的是下面的代碼將它們傳遞到OpenGL的(類似的OpenGL ES 1.x的代碼):
glBindBuffer(GL_ARRAY_BUFFER, glTriangleVertexBuffer);
glBufferData(GL_ARRAY_BUFFER, sizeof(Vertex) * nTriangleVertices, triangleVertices, GL_STATIC_DRAW);
glUniformMatrix4fv(matLocation, 1, GL_FALSE, m);
glVertexAttribPointer(positionSlot, 4, GL_FLOAT, GL_FALSE, sizeof(Vertex), (void*)offsetof(Vertex, x));
glVertexAttribPointer(colorSlot, 4, GL_UNSIGNED_BYTE, GL_FALSE, sizeof(Vertex), (void*)offsetof(Vertex, r));
glDrawArrays(GL_TRIANGLES, 0, nTriangleVertices);
glBindBuffer(GL_ARRAY_BUFFER, 0);
以上是什麼問題?
現在我覺得很愚蠢。謝謝! – Rich
大概不會像我當我意識到我的代碼中的一個錯誤時那樣愚蠢,使得這個標記完全未定義! – GuyRT