Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 改变alpha会改变颜色_Ios_Objective C_Opengl Es_Alphablending - Fatal编程技术网

Ios 改变alpha会改变颜色

Ios 改变alpha会改变颜色,ios,objective-c,opengl-es,alphablending,Ios,Objective C,Opengl Es,Alphablending,我在OpenGL ES中渲染元素,它们具有相同的颜色,但alpha不同。问题是,当alpha为.1时,颜色会发生变化,而不仅仅是不透明度。例如,当alpha组件的值设置为0.1时,颜色将从黑色变为紫色。当alpha值不是.1或其他第十个值时,它工作正常 我将在绘制之前设置此混合: glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA); 图纸: // if the element has any data, then draw it if(vertexBuffe

我在OpenGL ES中渲染元素,它们具有相同的颜色,但alpha不同。问题是,当alpha为.1时,颜色会发生变化,而不仅仅是不透明度。例如,当alpha组件的值设置为0.1时,颜色将从黑色变为紫色。当alpha值不是.1或其他第十个值时,它工作正常

我将在绘制之前设置此混合:

glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
图纸:

// if the element has any data, then draw it
if(vertexBuffer){
    glVertexPointer(2, GL_FLOAT, sizeof(struct Vertex), &vertexBuffer[0].Position[0]);
    glColorPointer(4, GL_FLOAT, sizeof(struct Vertex), &vertexBuffer[0].Color[0]);
    glTexCoordPointer(2, GL_FLOAT, sizeof(struct Vertex), &vertexBuffer[0].Texture[0]);
    glDrawArrays(GL_TRIANGLES, 0, [element numberOfSteps] * [element numberOfVerticesPerStep]);
}

这是预乘alpha的正常行为(混合函数暗示了这一点)。使用预乘alpha时,必须同时更改颜色和alpha

因此,每当更改
alpha
的值时,新颜色应等于
originalColor*alpha
。注意,您应该使用alpha的浮点标准化值(例如0.0-1.0),而不是定点值(例如0-255

考虑你选择的混合函数: DestinationRGB=(SourceRGB*1.0)+(DestinationRGB*(1.0-SourceA)); 传统的alpha混合是: DestinationRGB=(SourceRGB*SourceA)+(DestinationRGB*(1.0-SourceA));
注意,更传统的混合方程已经执行了SrcRGB*SrcA?只有当RGB分量与alpha分量相乘时,特定的混合方程才能正常工作。

这是预乘alpha的正常行为(混合函数暗示了这一点)。使用预乘alpha时,必须同时更改颜色和alpha

因此,每当更改
alpha
的值时,新颜色应等于
originalColor*alpha
。注意,您应该使用alpha的浮点标准化值(例如0.0-1.0),而不是定点值(例如0-255

考虑你选择的混合函数: DestinationRGB=(SourceRGB*1.0)+(DestinationRGB*(1.0-SourceA)); 传统的alpha混合是: DestinationRGB=(SourceRGB*SourceA)+(DestinationRGB*(1.0-SourceA));
注意,更传统的混合方程已经执行了SrcRGB*SrcA?只有当RGB成分与alpha成分相乘时,您的特定混合方程才能正常工作。

您能建议使用哪种替代方案来代替glBlendFunc(GL_ONE,GL_ONE减去_SRC_alpha);?我看到了一个类似的情况,当alpha降低时,红色变为橙粉色。你能建议用什么替代glBlendFunc(GL_ONE,GL_ONE减去SRC_alpha);?我看到了一个类似的现象,当阿尔法降低时,红色变成橙粉色。