Я пытаюсь нарисовать куклу, используя html, я уже установил разные части куклы в разных файлах изображений, и теперь я пытаюсь загрузить разные текстуры в каждую из этих частей, используя холст:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Canvas with textures</title>
<script language="javascript" type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
</head>
<script type="text/javascript">
$(document).ready(function(){
var c = document.getElementById("previewCanvas");
var ctx = c.getContext("2d");
var hair = new Image();
hair.src = "images/hair_1.png";
//ctx.drawImage(hair, 0, 0, 300, 300);
var head = new Image();
head.src = "images/head_base.png";
hair.onload = function () {
};
var textureSkin = new Image();
textureSkin.src = "img/textures/texture_skin.png";
var textureImg = new Image();
textureImg.src = "img/textures/texture_black.png";
textureImg.onload = function ()
{
var ptrn = ctx.createPattern(textureSkin, 'repeat');
ctx.drawImage(head, 0, 0, 300, 300);
ctx.globalCompositeOperation = 'source-atop';
ctx.fillStyle = ptrn;
ctx.fillRect(0, 0, 300, 300);
ctx.drawImage(hair, 0, 0, 300, 300);
}
});
</script>
<body>
<canvas id= "previewCanvas" height="600" width="400"/>
</body>
</html>
Предыдущий код выводит мне это комбинированное изображение:
Если я попытаюсь загрузить новую текстуру после рисования волос (как Я хочу, чтобы у волос тоже была собственная текстура), сделав что-то вроде этого:
textureSkin.onload = function ()
{
var ptrn = ctx.createPattern(textureSkin, 'repeat');
ctx.drawImage(head, 0, 0, 300, 300);
ctx.globalCompositeOperation = 'source-atop';
ctx.fillStyle = ptrn;
ctx.fillRect(0, 0, 300, 300);
}
var textureImg = new Image();
textureImg.src = "img/textures/texture_black.png";
textureImg.onload = function ()
{
var ptrn = ctx.createPattern(textureImg, 'repeat');
ctx.drawImage(hair, 0, 0, 300, 300);
ctx.globalCompositeOperation = 'source-atop';
ctx.fillStyle = ptrn;
ctx.fillRect(0, 0, 300, 300);
}
});
оба изображения объединяются и применяется последняя текстура (textureImg):
Как правильно загружать разные текстуры для разных изображений на одном холсте?
Ура