У меня есть холст с некоторыми изображениями, и я хотел бы загрузить его на текстуру, похожую на изображение с ImageUtils. Как вы знаете, у canvas нет «onfinished» обратного вызова рендеринга, поэтому я нахожусь во власти THREE здесь. Я столкнулся с this, но это, похоже, тесно связано с AJAX.У THREE есть утилита для загрузки холстов асинхронным способом?
ответ
Вы можете прочитать изображение с холста в качестве URL данных:
var canvas = document.getElementById("canvas");
var dataURL = canvas.toDataURL();
После выполнения DrawImage на холсте, данные изображения уже будет там внутри.
Эти URL-адреса данных затем могут использоваться как текстуры в Three.js.
var texture = THREE.ImageUtils.loadTexture(dataURL);
Update
Вы также можете попробовать это для отладки:
var texture = THREE.ImageUtils.loadTexture(dataURL, undefined, function(texture){
// Handler for onLoad, this returns the img
console.log(texture);
},
function(event){
// Handler for onError, it returns the error event
console.log(event);
});
Похоже на совершенно правильное предложение, но я получаю: Uncaught TypeError: Не могу прочитать свойство 'width' undefined – coolfeature
Какой JS-файл? Это изнутри Three.js? Что генерирует dataURL? – ther
CanvasRenderer.js: 841 Uncaught TypeError: Не удается прочитать свойство 'width' of undefined – coolfeature
Не специалист в три, но, как ты рисуешь свои картины на первом полотне? Вы должны полагаться на загрузку каждого тега img, тогда все остальное можно сделать напрямую, синхронно. – Kaiido
Я использую onload для назначения строки base64 img для свойства в модели. Затем я прочитал модель и передал строку base64 на каву. Мне нужно ТРИ, чтобы определить, когда изображение полностью загружено и соответствующим образом обновить мои текстуры. – coolfeature
Я думаю, что фрагмент кода поможет нам вам помочь. – Kaiido