gpt4 book ai didi

opengl-es - 如何在 OpenGL ES 2.0 中获得 Alpha 混合透明度?

转载 作者:行者123 更新时间:2023-12-04 17:36:34 24 4
gpt4 key购买 nike

我正在将一些代码从 OpenGL ES 1.x 移植到 OpenGL ES 2.0,并且我正在努力使透明度像以前一样工作;我所有的三角形都变得完全不透明。

我的 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);

以上有什么问题?

最佳答案

您的颜色顶点属性值未标准化。这意味着顶点着色器会看到该属性在 0-255 范围内的值。

更改 glVertexAttribPointer 的第四个参数至 GL_TRUE并且这些值将按照您最初的预期进行归一化(缩放到 0.0-1.0 的范围内)。

http://www.khronos.org/opengles/sdk/docs/man/xhtml/glVertexAttribPointer.xml

关于opengl-es - 如何在 OpenGL ES 2.0 中获得 Alpha 混合透明度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17071509/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com