OpenGL動(dòng)效濾鏡渣聚,其最主要的因素,是將時(shí)間因素傳遞進(jìn)去再做一系列的濾鏡變化處理钱烟。
首先我們來(lái)看時(shí)間因素怎么傳遞進(jìn)去,其代碼:
//使用program
? ? glUseProgram(self.program);
? ? //綁定buffer
? ? glBindBuffer(GL_ARRAY_BUFFER, self.vertexBuffer);
? ? // 傳入時(shí)間
? ? CGFloat currentTime = self.displayLink.timestamp - self.startTimeInterval;
? ? GLuint time = glGetUniformLocation(self.program, "Time");
? ? glUniform1f(time, currentTime);
這樣就可以將外部時(shí)間傳遞給片元著色器進(jìn)去計(jì)算處理朴沿,根據(jù)時(shí)間作出相應(yīng)的改變
其主要濾鏡表達(dá)有雌芽,縮放授艰,靈魂出竅,抖動(dòng)世落,閃白淮腾,毛刺,幻覺(jué)
靈魂出竅動(dòng)畫(huà)效果:
靈魂出竅代碼實(shí)現(xiàn):
? ? floatduration =0.7;
? ? floatmaxAlpha =0.4;
? ? floatmaxScale =1.8;
? ? floatprogress =mod(Time, duration) / duration;// 0~1
? ? floatalpha = maxAlpha * (1.0- progress);
? ? floatscale =1.0+ (maxScale -1.0) * progress;
? ? floatweakX =0.5+ (TextureCoordsVarying.x -0.5) / scale;
? ? floatweakY =0.5+ (TextureCoordsVarying.y -0.5) / scale;
? ? vec2weakTextureCoords =vec2(weakX, weakY);
? ? vec4weakMask =texture2D(Texture, weakTextureCoords);
? ? vec4mask =texture2D(Texture, TextureCoordsVarying);
? ? gl_FragColor= mask * (1.0- alpha) + weakMask * alpha;