'M10,10h100v100'). Вы заметите, что в файле SVG нет команды «z», и это просто ломаная линия, идущая на 100 вправо, а затем на 100 вниз.
Когда я пытаюсь выдавить ее с помощью Three.js и TransformSVGPath()
, фигура закрывается, как если бы существовала команда «z», чтобы вернуться в исходное положение.
Как мне сделать так, чтобы это не выполнялось? это?
Я пытаюсь выдавить этот путь с помощью Three.js ([code]'M10,10h100v100'). Вы заметите, что в файле SVG нет команды «z», и это просто ломаная линия, идущая на 100 вправо, а затем на 100 вниз. Когда я пытаюсь выдавить ее с помощью Three.js и TransformSVGPath()[/code], фигура закрывается, как если бы существовала команда «z», чтобы вернуться в исходное положение. Как мне сделать так, чтобы это не выполнялось? это?
[code]body { overflow: hidden; margin: 0; }[/code] [code] import * as THREE from 'https://cdn.jsdelivr.net/npm/three@0.116.1/build/three.module.js';
import { OrbitControls } from 'https://cdn.jsdelivr.net/npm/three@0.116.1/examples/jsm/controls/OrbitControls.js'; import { GLTFLoader } from 'https://cdn.jsdelivr.net/npm/three@0.116.1/examples/jsm/loaders/GLTFLoader.js'; import { RGBELoader } from 'https://cdn.jsdelivr.net/npm/three@0.116.1/examples/jsm/loaders/RGBELoader.js'; import { RoughnessMipmapper } from 'https://cdn.jsdelivr.net/npm/three@0.116.1/examples/jsm/utils/RoughnessMipmapper.js';
var scene = new THREE.Scene(); var camera = new THREE.PerspectiveCamera(60, window.innerWidth / window.innerHeight, 1, 1000); camera.position.set(0, 0, 500); var renderer = new THREE.WebGLRenderer({ antialias: true }); var walls; renderer.setSize(window.innerWidth, window.innerHeight); document.body.appendChild(renderer.domElement);
function transformSVGPath(pathStr) {
const DEGS_TO_RADS = Math.PI / 180, UNIT_SIZE = 100; const DIGIT_0 = 48, DIGIT_9 = 57, COMMA = 44, SPACE = 32, PERIOD = 46, MINUS = 45;
var path = new THREE.ShapePath(); var idx = 1, len = pathStr.length, activeCmd, x = 0, y = 0, nx = 0, ny = 0, firstX = null, firstY = null, x1 = 0, x2 = 0, y1 = 0, y2 = 0, rx = 0, ry = 0, xar = 0, laf = 0, sf = 0, cx, cy;
function eatNum() { var sidx, c, isFloat = false, s; // Eat delimiters while (idx < len) { c = pathStr.charCodeAt(idx); if (c !== COMMA && c !== SPACE) break; idx++; } if (c === MINUS) sidx = idx++; else sidx = idx; // Eat number while (idx < len) { c = pathStr.charCodeAt(idx); if (DIGIT_0