2015-10-08 2 views
0

У меня есть холст с некоторыми изображениями, и я хотел бы загрузить его на текстуру, похожую на изображение с ImageUtils. Как вы знаете, у canvas нет «onfinished» обратного вызова рендеринга, поэтому я нахожусь во власти THREE здесь. Я столкнулся с this, но это, похоже, тесно связано с AJAX.У THREE есть утилита для загрузки холстов асинхронным способом?

+0

Не специалист в три, но, как ты рисуешь свои картины на первом полотне? Вы должны полагаться на загрузку каждого тега img, тогда все остальное можно сделать напрямую, синхронно. – Kaiido

+0

Я использую onload для назначения строки base64 img для свойства в модели. Затем я прочитал модель и передал строку base64 на каву. Мне нужно ТРИ, чтобы определить, когда изображение полностью загружено и соответствующим образом обновить мои текстуры. – coolfeature

+1

Я думаю, что фрагмент кода поможет нам вам помочь. – Kaiido

ответ

0

Вы можете прочитать изображение с холста в качестве 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); 
}); 
+0

Похоже на совершенно правильное предложение, но я получаю: Uncaught TypeError: Не могу прочитать свойство 'width' undefined – coolfeature

+0

Какой JS-файл? Это изнутри Three.js? Что генерирует dataURL? – ther

+0

CanvasRenderer.js: 841 Uncaught TypeError: Не удается прочитать свойство 'width' of undefined – coolfeature