关于透明MP4礼物的构思和实现

你的帖子已经被社区标记并被临时隐藏。

没有通过审核吗?一个大佬也没出来

我看你都求方案一两周了,足够你折腾shader把这个搞定了吧 :rofl:

实在不行啊

大佬,这个组件的代码从哪里活得呢

找到了https://github.com/cocos/cocomat我看看

我只知道怎么解码视频的每一帧渲染,不知道怎么把解码出的图片中的空白区域透明度设置为0

我觉得要用着色器吧,从纹理中采样颜色并与顶点颜色相乘
// 如果纹理坐标超过右侧,则丢弃该片段
// 默认输出颜色为白色
vec4 o = vec4(1.0, 1.0, 1.0, 1.0);

  // 从纹理中采样颜色并与顶点颜色相乘
  o *= texture2D(mainTexture, v_uv0);
  o *= v_color;

  float start = texSize.z / (texSize.z + texSize.w);
  float scale = texSize.w / texSize.z;
      if (v_uv0.x > start) {
          discard;
      } else {
          // 计算水平alpha值
          o.a = getHAlpha(v_uv0, scale, start);
      }

float getHAlpha(vec2 uv, float scale, float offset) {
vec2 auv = vec2(uv.x * scale + offset, uv.y * scale);
return texture2D(mainTexture, auv).r;
}

没搞懂哦,你不是会写shader么,看上面描述应该是两张图片融合吧。没明白你是求助还是分享解决方案 :rofl:

求助,我只是思想会了,但是写的不对

Cocos Creator | NewProject_9 看看我的行不,启动时要点下屏幕才能播放

1赞

解码视频的我不会,不过只是融合图片的话,那很简单。

[shader_2_4_12.zip|attachment]shader_2_4_12.zip (1.1 MB)

1赞

太好了谢谢大佬

可以可以 大佬这个是2.4x的版本吗?能不能给我个demo

你这公式不都写出来了:

gl_FragColor = vec4( texture2D(texture, vec2(vUv.x/2, vUv.y)).rgb, texture2D(texture, vec2(0.5 + vUv.x/2, vUv.y)).r );

才疏学浅,一知半解,总会卡东西,一直没有成功,救就胡乱的认为可能成功不了

大佬大佬就是这玩意

https://test-1252163606.cos.ap-chengdu.myqcloud.com/NewProject_9.zip

2赞

大佬给个demo,我把你的跟下面大佬的融合一下

太牛了。大佬就是这玩意,大赞