23 let a = this.x - that.x;
\r
24 let b = this.y - that.y;
\r
25 return Math.sqrt(a * a + b * b)
\r
30 geometry = new THREE.Geometry();
\r
34 static CreateBasic(width, height, numPointsWidth, numPointsHeight) {
\r
38 let stepWidth = width / (numPointsWidth - 1);
\r
39 let stepHeight = height / (numPointsHeight - 1);
\r
41 for (let y = 0; y < numPointsHeight; y++) {
\r
42 for (let x = 0; x < numPointsWidth; x++) {
\r
44 new THREE.Vector3(x * stepWidth, height - y * stepHeight, 0)
\r
49 function getVertexIndex(x, y) {
\r
50 return y * numPointsWidth + x;
\r
53 for (let y = 0; y < numPointsHeight - 1; y++) {
\r
54 for (let x = 0; x < numPointsWidth - 1; x++) {
\r
57 getVertexIndex(x, y),
\r
58 getVertexIndex(x, y + 1),
\r
59 getVertexIndex(x + 1, y),
\r
64 getVertexIndex(x + 1, y),
\r
65 getVertexIndex(x, y + 1),
\r
66 getVertexIndex(x + 1, y + 1),
\r
72 return this.CreateExplicit(vertices, faces);
\r
75 static CreateExplicit(vertices, faces) {
\r
76 let result = new Cloth();
\r
78 for (let i in vertices) {
\r
79 result.geometry.vertices.push(vertices[i]);
\r
81 for (let i in faces) {
\r
82 result.geometry.faces.push(faces[i]);
\r
85 result.geometry.computeBoundingSphere();
\r
91 let mousePos = new Point();
\r
93 const canvasSpace = 200;
\r
95 const scene = new THREE.Scene();
\r
96 const camera = new THREE.PerspectiveCamera(75, window.innerWidth / (window.innerHeight - canvasSpace), 0.1, 1000);
\r
98 const renderer = new THREE.WebGLRenderer();
\r
99 renderer.setSize(window.innerWidth, window.innerHeight - canvasSpace);
\r
100 document.getElementById("threejscontainer").appendChild(renderer.domElement);
\r
102 const directionalLight = new THREE.DirectionalLight(0xffffff, 1);
\r
103 scene.add(directionalLight);
\r
105 let cloth = Cloth.CreateBasic(10, 10, 4, 4);
\r
106 const material = new THREE.MeshBasicMaterial({ color: 0x00ff00 });
\r
107 const mesh = new THREE.Mesh(cloth.geometry, material);
\r
110 camera.position.y = 5;
\r
111 camera.position.z = 10;
\r
113 function animate(dt) {
\r
114 requestAnimationFrame(animate);
\r
115 renderer.render(scene, camera);
\r
118 let canvas = document.getElementsByTagName("canvas")[0];
\r
119 let resize = function () {
\r
120 w = window.innerWidth;
\r
121 h = window.innerHeight - 200;
\r
125 window.onresize = resize;
\r
127 if (canvas.getContext) {
\r
128 ctx = canvas.getContext('2d');
\r
129 animate(performance.now());
\r
131 canvas.onmousemove = (evt) => {
\r
132 mousePos.x = evt.clientX;
\r
133 mousePos.y = evt.clientY;
\r