【发布时间】:2021-01-17 16:37:30
【问题描述】:
我已经尝试移植这个https://codepen.io/jhnsnc/pen/qPZvvM 到 pixi 但没有成功。
到目前为止我尝试过的如下
let video = document.createElement("video");
video.src = videoUrl;
video.loop = true;
video.muted = true;
var videoTexture = PIXI.Texture.fromVideo(video);
let uniforms = {
time: { type: "f", value: 1.0 },
texture: { type: "sampler2D", value: videoTexture }
};
this.videoSprite = new PIXI.Sprite(videoTexture);
this.videoSprite.filters = [new PIXI.Filter(document.getElementById( 'vertexShader' ).textContent,document.getElementById( 'fragmentShader' ).textContent,uniforms)]
<script id="vertexShader" type="x-shader/x-vertex">
// varying vec2 vUv;
void main()
{
// vUv = uv;
gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
}
</script>
<script id="fragmentShader" type="x-shader/x-fragment">
#ifdef GL_ES
precision highp float;
#endif
uniform float time;
uniform sampler2D texture;
// varying vec2 vUv;
void main( void ) {
gl_FragColor = vec4(
texture2D(textureA, vec2(512.0, 0.5 + 256.0/2.)).rgb,
texture2D(textureA, vec2(512.0, 256.0/2.)).r
);
}
</script>
我收到错误“castToBaseTexture 不是函数”
这是 4 年前在 pixi 中的做法,但在 pixi 4 和 5 中不再适用。 https://github.com/ENAML/pixi-alpha-video
【问题讨论】:
-
挖掘你链接的源代码,the vertex shader 看起来你必须声明
attribute vec2 aTextureCoord;而不是仅仅假设uv已经存在。 Three.js 使用ShaderMaterial自动为您执行此操作,但这并不意味着 Pixi.js 必须遵循相同的约定。我建议您尽可能关注the way they do it。
标签: three.js shader webgl pixi.js