Рисование полов с помощью Canvas HTML5

Я разрабатывал приложение для производителя Tiles и для этого использовал HTML5 Canvas. При выборе плитки Стена и пол должны быть отделаны выбранной плиткой. Для прямоугольника стены это было довольно прямо вперед, и мне это удалось, но при использовании того же самого для пола, это не выглядело как плитка для пола. Некоторая трансформация / поворот / Угол отсутствовала.

Я ищу в блогах, чтобы иметь некоторый угол в плитках на полу, но не смог найти правильного решения.

Ниже изображение, которое я получаю из своего кода, и ниже также пример кода.

введите описание изображения здесь

Код:-

<canvas id="canvas1"></canvas>

<script>
        var sources = {
                wallTile: './assets/tile_347.jpg',
                floorTile: './assets/tile_390.jpg',
            };

     function drawPattern(wallimg, floorimg, size, rectY) {
            var canvas = document.getElementById('canvas1');

            canvas.width = 1366;
            canvas.height = 800;

            var tempCanvas = document.createElement("canvas");
            var tCtx = tempCanvas.getContext("2d");

            tempCanvas.width = size;
            tempCanvas.height = size;
            tCtx.drawImage(wallimg, 0, 0, wallimg.width, wallimg.height, 0, 0, size, size);

            var tempFloorCanvas = document.createElement("canvas");
            var tFloorCtx = tempFloorCanvas.getContext("2d");
            tempFloorCanvas.width = size;
            tempFloorCanvas.height = size;
            tFloorCtx.drawImage(floorimg, 0, 0, floorimg.width, floorimg.height, 0, 0, size, size);
            tFloorCtx.fill();
            tFloorCtx.setTransform(1,1,-0.5,1,30,10);
            tFloorCtx.rotate(50);

            // use getContext to use the canvas for drawing
            var ctx = canvas.getContext('2d');
           //  ctx.clearRect(0, 0, canvas.width, canvas.height);
            ctx.fillStyle = ctx.createPattern(tempCanvas, 'repeat');
        //    ctx.rotate(0);
            ctx.beginPath();
            ctx.rect(0,rectY,canvas.width, 400);
            ctx.closePath();
            ctx.fill();

            var roomImg = new Image();
            roomImg.src = './assets/room11.png';
            roomImg.onload = function() {
                ctx.drawImage(roomImg, 0, 0, canvas.width, canvas.height);
                ctx.restore();
            }

            ctx.fillStyle = ctx.createPattern(tempFloorCanvas, 'repeat');
            ctx.beginPath();

            ctx.rect(0,400,canvas.width, 400);
            ctx.closePath();
            ctx.fill();

            ctx.restore();


        }

        var img = new Image();
        img.src = './assets/wallTile.jpg';
        img.onload = function(){
            var wallimg = this;
            var floorimg = new Image();
            floorimg.src = './assets/floorTile.jpg';
            floorimg.onload = function(){
                drawPattern(wallimg, this, 100, 0);
            }
        }


    </script>

Если есть другое решение для реализации этой функции или есть сторонние плагины, которые могут превратить мой холст в какой-то угол, чтобы он выглядел как пол комнаты, пожалуйста, дайте мне знать.

Я новичок в холсте и HTML5.

1 ответ

Что ж, как следует из названия, 2D-контекст предназначен для выполнения 2D-задач и не предлагает никаких трехмерных функций из коробки - аффинные преобразования не могут быть использованы для преобразования чего-либо в 3D-пространстве.

Хотя можно полностью реализовать 3D-функции вручную, вам, вероятно, лучше изучить WebGL, который предоставляет вам все 3D-функции, которые вам понадобятся в этом случае.

Если вы не знакомы с концепциями WebGL, вы можете заглянуть в three.js, который выполняет для вас все самые мелкие задачи (настройка шейдеров и т. Д.) И предоставляет простой в использовании API. Он также обеспечивает 2D-рендеринг на случай, если ваше приложение запущено в браузере / компьютере без поддержки WebGL/GPU. Тем не менее, вам необходимо ознакомиться с основными 3D-концепциями.

Если у вас нет содержимого в качестве объектов, вы можете комбинировать рендеринг пола как объекта (плоский прямоугольник, который вы можете создать внутри three.js) и вставить оставшуюся графику в виде спрайтов сверху (с очевидными ограничениями, в которых находится комната). фиксированный вид, то есть неспособность вращаться / перемещаться по комнате (выглядит странно).

Что касается 2D-контекста и 3D-перспективы: взгляните на один из моих старых ответов, а также этот. Просто отметьте, что эти примеры не предназначены для производственного использования.

Другие вопросы по тегам