gpt4 book ai didi

ios - OpenGL-ES:选择性混合

转载 作者:塔克拉玛干 更新时间:2023-11-02 10:21:09 25 4
gpt4 key购买 nike

我正在使用 GPUImage 的角点检测器从相机捕获的帧中提取角点。我想在角坐标处渲染 Spark 。当我得到角坐标后,我将它传递给我的 Spark 生成器(非常类似于 GPUImage 的十字准线生成器):

public func renderSparkles(_ positions:[Position]) {
imageFramebuffer.activateFramebufferForRendering()
imageFramebuffer.timingStyle = .stillImage

glEnable(GLenum(GL_POINT_SPRITE_OES))

sparklesShader.use()
uniformSettings.restoreShaderSettings(sparklesShader)

clearFramebufferWithColor(Color.transparent)

guard let positionAttribute = sparklesShader.attributeIndex("position") else {
fatalError("A position attribute was missing from the shader program during rendering.")
}

let convertedPositions = positions.flatMap{$0.toGLArray()}
glVertexAttribPointer(positionAttribute, 2, GLenum(GL_FLOAT), 0, 0, convertedPositions)
glDrawArrays(GLenum(GL_POINTS), 0, GLsizei(positions.count))

notifyTargets()
}

在生成器的片段着色器中,我在角坐标处绘制闪光:

uniform lowp vec3 crosshairColor; 
varying highp vec2 centerLocation;

void main()
{
lowp vec2 distanceFromCenter = abs(centerLocation - gl_PointCoord.xy);

lowp float r = length(distanceFromCenter)*0.042;
lowp float a = atan(distanceFromCenter.y,distanceFromCenter.x);
lowp float f = abs(cos(a*2.0))*0.100*-0.322/0.224;
lowp float b = abs(cos(a*2.0))*0.078*-0.882/17.088;
lowp float c = abs(cos(a*2.0))*0.030*-0.178*0.688;

lowp vec4 color = vec4(1.0-smoothstep(f,b+0.04,r)) + vec4(1.0-smoothstep(b,c+0.02,r/0.644)) + vec4(1.0-smoothstep(b,c+0.011,r/0.764));
gl_FragColor = color;
}

Here is an example of output I've got

我怎样才能混合 Spark ?

最佳答案

如果其他人会发现它有帮助,这里是基于 Rabbid76 建议的渲染 Spark 方法的代码:

public func renderSparkles(_ positions:[Position]) {
imageFramebuffer.activateFramebufferForRendering()
imageFramebuffer.timingStyle = .stillImage

glEnable(GLenum(GL_POINT_SPRITE_OES))

glEnable(GLenum(GL_BLEND))
glBlendFunc(GLenum(GL_SRC_ALPHA),GLenum(GL_ONE_MINUS_CONSTANT_ALPHA))

sparklesShader.use()
uniformSettings.restoreShaderSettings(sparklesShader)

clearFramebufferWithColor(Color.transparent)

guard let positionAttribute = sparklesShader.attributeIndex("position") else {
fatalError("A position attribute was missing from the shader program during rendering.")
}

let convertedPositions = positions.flatMap{$0.toGLArray()}
glVertexAttribPointer(positionAttribute, 2, GLenum(GL_FLOAT), 0, 0, convertedPositions)
glDrawArrays(GLenum(GL_POINTS), 0, GLsizei(positions.count))

notifyTargets()
}

关于ios - OpenGL-ES:选择性混合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50157974/

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