Android OpenGL ES基本用法(15),shader缩放特效


目录


Android OpenGL ES基本用法(15),shader缩放特效_第1张图片

缩放特效,在之前的基础上,加上一个缩放特效

保存旋转后的矩阵的值

    public void setAngle(float angle, float x, float y, float z) {
     
        //根据手机的相机进行旋转矫正
        Matrix.rotateM(matrix, 0, angle, x, y, z);
        //将旋转后的矩阵保存下来
        for (int i = 0; i < 16; i++) {
     
            rotateMatrix[i] = matrix[i];
        }
    }

核心部分,根据当前的帧数动态设置matrix的值

    //这部分是用于缩放的变量
    private float progress;
    private int curFrame;
    private int maxFrame = 14;//一轮14帧
    private int midFrame = maxFrame / 2;//找到中间的那一帧,前面一半是方法,后面是缩小
    private float maxScale = 0.3f;//最大缩放的比例
    private float[] rotateMatrix = new float[16];//保存旋转后的矩阵

    //用于缩放的具体代码计算
    private void effectScale() {
     
        //frame为当前帧数映射到缩放帧数的区间内
        int frame = (curFrame++) % maxFrame;
        if (frame <= midFrame) {
     //逐渐放大
            progress = 1f * frame / midFrame;
        } else {
     
            progress = 2f - 1f * frame / midFrame;
        }
        float scale = 1f + maxScale * progress;
        //旋转后的矩阵赋值回来
        for (int i = 0; i < 16; i++) {
     
            matrix[i] = rotateMatrix[i];
        }
        //缩放
        Matrix.scaleM(matrix, 0, scale, scale, scale);
    }

在onDrawFrame中调用

  @Override
    public void onDrawFrame() {
     
        //更新画面纹理
        surfaceTexture.updateTexImage();

        //缩放特效
        effectScale();

		...
	}

你可能感兴趣的:(OpenGL,音视频)