Теперь я работаю над проектом, который применяет сглаживание шума на изображениях с помощью WebGL. Теперь я хотел адаптировать его к видео, используя видео как текстуру вместо старого образа. Примеры учебников, приведенные Firefox (https://developer.mozilla.org/en-US/docs/Web/WebGL/Animating_textures_in_WebGL), также напоминают очарование.WebGl - Видео Текстурирование остается в первом кадре
Но, что должно случиться, всегда бывает: когда вы пытаетесь, он никогда не работает - видео остается в первом кадре, а звук начинает нормально воспроизводиться. Я попытался исправить это, захватив еще какой-то код из WebGL Video Demo Firefox, а затем запустил веб-сайт, чтобы найти что-то похожее на мою проблему. Поэтому я думаю, что это не проблема с видео, но да, когда WebGL обрабатывает фреймы. И это кажется довольно структурным, потому что у меня нет ошибок, когда я запускаю его на консоли Firefox. Я также пробовал разные устройства (MacOSX, Ubuntu, Windows 8) с Firefox и Chrome.
var videoElement;
function load() {
clearInterval(timer);
var canvas = document.getElementById("canvas");
videoElement = document.getElementById("video");
... конец нагрузки() функции ...
drawScene();
initTexture();
updateTexture();
timer = setInterval(fr, 500);
time = new Date().getTime();
animation = "animate";
anim();
}
... объявляя текстурных переменные и функции ...
var my_texture;
function initTexture() {
my_texture = gl.createTexture();
gl.bindTexture(gl.TEXTURE_2D, my_texture);
gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, true);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
gl.bindTexture(gl.TEXTURE_2D, null);
}
function startVideo() {
videoElement.play();
intervalID = setInterval(drawScene, 15);
}
function videoDone() {
clearInterval(intervalID);
}
function updateTexture() {
gl.bindTexture(gl.TEXTURE_2D, my_texture);
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, videoElement);
}
Я чувствую, как advance()
и composite()
функции должны быть частью проблемы. Конечно, вы можете проверить весь проект в этом репозитории GitHub: https://github.com/crocuta/thequietworld/blob/master/videoshading-0-6.html
Есть ли кто-нибудь, кто знает, что не так? Видео является неотъемлемой частью моего проекта, и я как-то застревал в нем видео.