mirror of
https://github.com/misskey-dev/misskey.git
synced 2026-05-24 19:44:05 +02:00
refactor
This commit is contained in:
@@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
import * as BABYLON from '@babylonjs/core';
|
import * as BABYLON from '@babylonjs/core';
|
||||||
import { defineObject } from '../engine.js';
|
import { defineObject } from '../engine.js';
|
||||||
import { getPlaneUvIndexes } from '../utility.js';
|
import { createPlaneUvMapper, getPlaneUvIndexes } from '../utility.js';
|
||||||
|
|
||||||
export const pictureFrame = defineObject({
|
export const pictureFrame = defineObject({
|
||||||
id: 'pictureFrame',
|
id: 'pictureFrame',
|
||||||
@@ -84,21 +84,10 @@ export const pictureFrame = defineObject({
|
|||||||
coverMesh.rotationQuaternion = null;
|
coverMesh.rotationQuaternion = null;
|
||||||
const pictureMesh = findMesh('__X_PICTURE__');
|
const pictureMesh = findMesh('__X_PICTURE__');
|
||||||
pictureMesh.rotationQuaternion = null;
|
pictureMesh.rotationQuaternion = null;
|
||||||
pictureMesh.markVerticesDataAsUpdatable(BABYLON.VertexBuffer.UVKind, true);
|
|
||||||
|
|
||||||
const pictureMaterial = findMaterial('__X_PICTURE__');
|
const pictureMaterial = findMaterial('__X_PICTURE__');
|
||||||
|
|
||||||
const uvs = pictureMesh.getVerticesData(BABYLON.VertexBuffer.UVKind)!;
|
const updateUv = createPlaneUvMapper(pictureMesh);
|
||||||
const uvIndexes = getPlaneUvIndexes(pictureMesh);
|
|
||||||
|
|
||||||
const ax = uvs[uvIndexes[0]];
|
|
||||||
const ay = uvs[uvIndexes[0] + 1];
|
|
||||||
const bx = uvs[uvIndexes[1]];
|
|
||||||
const by = uvs[uvIndexes[1] + 1];
|
|
||||||
const cx = uvs[uvIndexes[2]];
|
|
||||||
const cy = uvs[uvIndexes[2] + 1];
|
|
||||||
const dx = uvs[uvIndexes[3]];
|
|
||||||
const dy = uvs[uvIndexes[3] + 1];
|
|
||||||
|
|
||||||
const applyFit = () => {
|
const applyFit = () => {
|
||||||
const tex = pictureMaterial.albedoTexture;
|
const tex = pictureMaterial.albedoTexture;
|
||||||
@@ -111,83 +100,7 @@ export const pictureFrame = defineObject({
|
|||||||
const targetHeight = options.height * (1 - (options.matVThickness * MAT_THICKNESS_FACTOR));
|
const targetHeight = options.height * (1 - (options.matVThickness * MAT_THICKNESS_FACTOR));
|
||||||
const targetAspect = targetWidth / targetHeight;
|
const targetAspect = targetWidth / targetHeight;
|
||||||
|
|
||||||
let newAx = ax;
|
updateUv(srcAspect, targetAspect, options.fit);
|
||||||
let newAy = ay;
|
|
||||||
let newBx = bx;
|
|
||||||
let newBy = by;
|
|
||||||
let newCx = cx;
|
|
||||||
let newCy = cy;
|
|
||||||
let newDx = dx;
|
|
||||||
let newDy = dy;
|
|
||||||
|
|
||||||
if (options.fit === 'cover') {
|
|
||||||
const ratio = targetAspect / srcAspect;
|
|
||||||
|
|
||||||
let uRange: number;
|
|
||||||
let vRange: number;
|
|
||||||
|
|
||||||
if (ratio < 1) {
|
|
||||||
uRange = ratio; // < 1
|
|
||||||
vRange = 1;
|
|
||||||
} else {
|
|
||||||
uRange = 1;
|
|
||||||
vRange = 1 / ratio; // < 1
|
|
||||||
}
|
|
||||||
|
|
||||||
const uMin = (1 - uRange) / 2;
|
|
||||||
const uMax = uMin + uRange;
|
|
||||||
const vMin = (1 - vRange) / 2;
|
|
||||||
const vMax = vMin + vRange;
|
|
||||||
|
|
||||||
newAx = uMin;
|
|
||||||
newBx = uMax;
|
|
||||||
newCx = uMin;
|
|
||||||
newDx = uMax;
|
|
||||||
|
|
||||||
newAy = 1 - vMax;
|
|
||||||
newBy = 1 - vMax;
|
|
||||||
newCy = 1 - vMin;
|
|
||||||
newDy = 1 - vMin;
|
|
||||||
} else if (options.fit === 'contain') {
|
|
||||||
const ratio = targetAspect / srcAspect;
|
|
||||||
|
|
||||||
let uRange: number;
|
|
||||||
let vRange: number;
|
|
||||||
|
|
||||||
if (ratio > 1) {
|
|
||||||
uRange = ratio; // > 1
|
|
||||||
vRange = 1;
|
|
||||||
} else {
|
|
||||||
uRange = 1;
|
|
||||||
vRange = 1 / ratio; // > 1
|
|
||||||
}
|
|
||||||
|
|
||||||
const uMin = (1 - uRange) / 2;
|
|
||||||
const uMax = uMin + uRange;
|
|
||||||
const vMin = (1 - vRange) / 2;
|
|
||||||
const vMax = vMin + vRange;
|
|
||||||
|
|
||||||
newAx = uMin;
|
|
||||||
newBx = uMax;
|
|
||||||
newCx = uMin;
|
|
||||||
newDx = uMax;
|
|
||||||
|
|
||||||
newAy = 1 - vMax;
|
|
||||||
newBy = 1 - vMax;
|
|
||||||
newCy = 1 - vMin;
|
|
||||||
newDy = 1 - vMin;
|
|
||||||
}
|
|
||||||
|
|
||||||
uvs[uvIndexes[0]] = newAx;
|
|
||||||
uvs[uvIndexes[0] + 1] = newAy;
|
|
||||||
uvs[uvIndexes[1]] = newBx;
|
|
||||||
uvs[uvIndexes[1] + 1] = newBy;
|
|
||||||
uvs[uvIndexes[2]] = newCx;
|
|
||||||
uvs[uvIndexes[2] + 1] = newCy;
|
|
||||||
uvs[uvIndexes[3]] = newDx;
|
|
||||||
uvs[uvIndexes[3] + 1] = newDy;
|
|
||||||
|
|
||||||
pictureMesh.updateVerticesData(BABYLON.VertexBuffer.UVKind, uvs);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
applyFit();
|
applyFit();
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
import * as BABYLON from '@babylonjs/core';
|
import * as BABYLON from '@babylonjs/core';
|
||||||
import { defineObject } from '../engine.js';
|
import { defineObject } from '../engine.js';
|
||||||
import { getPlaneUvIndexes } from '../utility.js';
|
import { createPlaneUvMapper, getPlaneUvIndexes } from '../utility.js';
|
||||||
|
|
||||||
export const poster = defineObject({
|
export const poster = defineObject({
|
||||||
id: 'poster',
|
id: 'poster',
|
||||||
@@ -47,23 +47,12 @@ export const poster = defineObject({
|
|||||||
createInstance: ({ room, root, options, findMaterial, findMesh, findMeshes, meshUpdated }) => {
|
createInstance: ({ room, root, options, findMaterial, findMesh, findMeshes, meshUpdated }) => {
|
||||||
const pictureMesh = findMesh('__X_PICTURE__');
|
const pictureMesh = findMesh('__X_PICTURE__');
|
||||||
pictureMesh.rotationQuaternion = null;
|
pictureMesh.rotationQuaternion = null;
|
||||||
pictureMesh.markVerticesDataAsUpdatable(BABYLON.VertexBuffer.UVKind, true);
|
|
||||||
|
|
||||||
const pictureMaterial = findMaterial('__X_PICTURE__');
|
const pictureMaterial = findMaterial('__X_PICTURE__');
|
||||||
|
|
||||||
const pinMeshes = findMeshes('__X_PIN__');
|
const pinMeshes = findMeshes('__X_PIN__');
|
||||||
|
|
||||||
const uvs = pictureMesh.getVerticesData(BABYLON.VertexBuffer.UVKind)!;
|
const updateUv = createPlaneUvMapper(pictureMesh);
|
||||||
const uvIndexes = getPlaneUvIndexes(pictureMesh);
|
|
||||||
|
|
||||||
const ax = uvs[uvIndexes[0]];
|
|
||||||
const ay = uvs[uvIndexes[0] + 1];
|
|
||||||
const bx = uvs[uvIndexes[1]];
|
|
||||||
const by = uvs[uvIndexes[1] + 1];
|
|
||||||
const cx = uvs[uvIndexes[2]];
|
|
||||||
const cy = uvs[uvIndexes[2] + 1];
|
|
||||||
const dx = uvs[uvIndexes[3]];
|
|
||||||
const dy = uvs[uvIndexes[3] + 1];
|
|
||||||
|
|
||||||
const applyFit = () => {
|
const applyFit = () => {
|
||||||
const tex = pictureMaterial.albedoTexture;
|
const tex = pictureMaterial.albedoTexture;
|
||||||
@@ -76,83 +65,7 @@ export const poster = defineObject({
|
|||||||
const targetHeight = options.height;
|
const targetHeight = options.height;
|
||||||
const targetAspect = targetWidth / targetHeight;
|
const targetAspect = targetWidth / targetHeight;
|
||||||
|
|
||||||
let newAx = ax;
|
updateUv(srcAspect, targetAspect, options.fit);
|
||||||
let newAy = ay;
|
|
||||||
let newBx = bx;
|
|
||||||
let newBy = by;
|
|
||||||
let newCx = cx;
|
|
||||||
let newCy = cy;
|
|
||||||
let newDx = dx;
|
|
||||||
let newDy = dy;
|
|
||||||
|
|
||||||
if (options.fit === 'cover') {
|
|
||||||
const ratio = targetAspect / srcAspect;
|
|
||||||
|
|
||||||
let uRange: number;
|
|
||||||
let vRange: number;
|
|
||||||
|
|
||||||
if (ratio < 1) {
|
|
||||||
uRange = ratio; // < 1
|
|
||||||
vRange = 1;
|
|
||||||
} else {
|
|
||||||
uRange = 1;
|
|
||||||
vRange = 1 / ratio; // < 1
|
|
||||||
}
|
|
||||||
|
|
||||||
const uMin = (1 - uRange) / 2;
|
|
||||||
const uMax = uMin + uRange;
|
|
||||||
const vMin = (1 - vRange) / 2;
|
|
||||||
const vMax = vMin + vRange;
|
|
||||||
|
|
||||||
newAx = uMin;
|
|
||||||
newBx = uMax;
|
|
||||||
newCx = uMin;
|
|
||||||
newDx = uMax;
|
|
||||||
|
|
||||||
newAy = 1 - vMax;
|
|
||||||
newBy = 1 - vMax;
|
|
||||||
newCy = 1 - vMin;
|
|
||||||
newDy = 1 - vMin;
|
|
||||||
} else if (options.fit === 'contain') {
|
|
||||||
const ratio = targetAspect / srcAspect;
|
|
||||||
|
|
||||||
let uRange: number;
|
|
||||||
let vRange: number;
|
|
||||||
|
|
||||||
if (ratio > 1) {
|
|
||||||
uRange = ratio; // > 1
|
|
||||||
vRange = 1;
|
|
||||||
} else {
|
|
||||||
uRange = 1;
|
|
||||||
vRange = 1 / ratio; // > 1
|
|
||||||
}
|
|
||||||
|
|
||||||
const uMin = (1 - uRange) / 2;
|
|
||||||
const uMax = uMin + uRange;
|
|
||||||
const vMin = (1 - vRange) / 2;
|
|
||||||
const vMax = vMin + vRange;
|
|
||||||
|
|
||||||
newAx = uMin;
|
|
||||||
newBx = uMax;
|
|
||||||
newCx = uMin;
|
|
||||||
newDx = uMax;
|
|
||||||
|
|
||||||
newAy = 1 - vMax;
|
|
||||||
newBy = 1 - vMax;
|
|
||||||
newCy = 1 - vMin;
|
|
||||||
newDy = 1 - vMin;
|
|
||||||
}
|
|
||||||
|
|
||||||
uvs[uvIndexes[0]] = newAx;
|
|
||||||
uvs[uvIndexes[0] + 1] = newAy;
|
|
||||||
uvs[uvIndexes[1]] = newBx;
|
|
||||||
uvs[uvIndexes[1] + 1] = newBy;
|
|
||||||
uvs[uvIndexes[2]] = newCx;
|
|
||||||
uvs[uvIndexes[2] + 1] = newCy;
|
|
||||||
uvs[uvIndexes[3]] = newDx;
|
|
||||||
uvs[uvIndexes[3] + 1] = newDy;
|
|
||||||
|
|
||||||
pictureMesh.updateVerticesData(BABYLON.VertexBuffer.UVKind, uvs);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
applyFit();
|
applyFit();
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
import * as BABYLON from '@babylonjs/core';
|
import * as BABYLON from '@babylonjs/core';
|
||||||
import { defineObject } from '../engine.js';
|
import { defineObject } from '../engine.js';
|
||||||
import { getPlaneUvIndexes } from '../utility.js';
|
import { createPlaneUvMapper, getPlaneUvIndexes } from '../utility.js';
|
||||||
|
|
||||||
export const tapestry = defineObject({
|
export const tapestry = defineObject({
|
||||||
id: 'tapestry',
|
id: 'tapestry',
|
||||||
@@ -47,7 +47,6 @@ export const tapestry = defineObject({
|
|||||||
createInstance: ({ room, root, options, findMaterial, findMesh, findMeshes, meshUpdated }) => {
|
createInstance: ({ room, root, options, findMaterial, findMesh, findMeshes, meshUpdated }) => {
|
||||||
const pictureMesh = findMesh('__X_PICTURE__');
|
const pictureMesh = findMesh('__X_PICTURE__');
|
||||||
pictureMesh.rotationQuaternion = null;
|
pictureMesh.rotationQuaternion = null;
|
||||||
pictureMesh.markVerticesDataAsUpdatable(BABYLON.VertexBuffer.UVKind, true);
|
|
||||||
|
|
||||||
const pipeTopMesh = findMesh('__X_PIPE_TOP__');
|
const pipeTopMesh = findMesh('__X_PIPE_TOP__');
|
||||||
const pipeBottomMesh = findMesh('__X_PIPE_BOTTOM__');
|
const pipeBottomMesh = findMesh('__X_PIPE_BOTTOM__');
|
||||||
@@ -55,17 +54,7 @@ export const tapestry = defineObject({
|
|||||||
|
|
||||||
const pictureMaterial = findMaterial('__X_PICTURE__');
|
const pictureMaterial = findMaterial('__X_PICTURE__');
|
||||||
|
|
||||||
const uvs = pictureMesh.getVerticesData(BABYLON.VertexBuffer.UVKind)!;
|
const updateUv = createPlaneUvMapper(pictureMesh);
|
||||||
const uvIndexes = getPlaneUvIndexes(pictureMesh);
|
|
||||||
|
|
||||||
const ax = uvs[uvIndexes[0]];
|
|
||||||
const ay = uvs[uvIndexes[0] + 1];
|
|
||||||
const bx = uvs[uvIndexes[1]];
|
|
||||||
const by = uvs[uvIndexes[1] + 1];
|
|
||||||
const cx = uvs[uvIndexes[2]];
|
|
||||||
const cy = uvs[uvIndexes[2] + 1];
|
|
||||||
const dx = uvs[uvIndexes[3]];
|
|
||||||
const dy = uvs[uvIndexes[3] + 1];
|
|
||||||
|
|
||||||
const applyFit = () => {
|
const applyFit = () => {
|
||||||
const tex = pictureMaterial.albedoTexture;
|
const tex = pictureMaterial.albedoTexture;
|
||||||
@@ -78,83 +67,7 @@ export const tapestry = defineObject({
|
|||||||
const targetHeight = options.height;
|
const targetHeight = options.height;
|
||||||
const targetAspect = targetWidth / targetHeight;
|
const targetAspect = targetWidth / targetHeight;
|
||||||
|
|
||||||
let newAx = ax;
|
updateUv(srcAspect, targetAspect, options.fit);
|
||||||
let newAy = ay;
|
|
||||||
let newBx = bx;
|
|
||||||
let newBy = by;
|
|
||||||
let newCx = cx;
|
|
||||||
let newCy = cy;
|
|
||||||
let newDx = dx;
|
|
||||||
let newDy = dy;
|
|
||||||
|
|
||||||
if (options.fit === 'cover') {
|
|
||||||
const ratio = targetAspect / srcAspect;
|
|
||||||
|
|
||||||
let uRange: number;
|
|
||||||
let vRange: number;
|
|
||||||
|
|
||||||
if (ratio < 1) {
|
|
||||||
uRange = ratio; // < 1
|
|
||||||
vRange = 1;
|
|
||||||
} else {
|
|
||||||
uRange = 1;
|
|
||||||
vRange = 1 / ratio; // < 1
|
|
||||||
}
|
|
||||||
|
|
||||||
const uMin = (1 - uRange) / 2;
|
|
||||||
const uMax = uMin + uRange;
|
|
||||||
const vMin = (1 - vRange) / 2;
|
|
||||||
const vMax = vMin + vRange;
|
|
||||||
|
|
||||||
newAx = uMin;
|
|
||||||
newBx = uMax;
|
|
||||||
newCx = uMin;
|
|
||||||
newDx = uMax;
|
|
||||||
|
|
||||||
newAy = 1 - vMax;
|
|
||||||
newBy = 1 - vMax;
|
|
||||||
newCy = 1 - vMin;
|
|
||||||
newDy = 1 - vMin;
|
|
||||||
} else if (options.fit === 'contain') {
|
|
||||||
const ratio = targetAspect / srcAspect;
|
|
||||||
|
|
||||||
let uRange: number;
|
|
||||||
let vRange: number;
|
|
||||||
|
|
||||||
if (ratio > 1) {
|
|
||||||
uRange = ratio; // > 1
|
|
||||||
vRange = 1;
|
|
||||||
} else {
|
|
||||||
uRange = 1;
|
|
||||||
vRange = 1 / ratio; // > 1
|
|
||||||
}
|
|
||||||
|
|
||||||
const uMin = (1 - uRange) / 2;
|
|
||||||
const uMax = uMin + uRange;
|
|
||||||
const vMin = (1 - vRange) / 2;
|
|
||||||
const vMax = vMin + vRange;
|
|
||||||
|
|
||||||
newAx = uMin;
|
|
||||||
newBx = uMax;
|
|
||||||
newCx = uMin;
|
|
||||||
newDx = uMax;
|
|
||||||
|
|
||||||
newAy = 1 - vMax;
|
|
||||||
newBy = 1 - vMax;
|
|
||||||
newCy = 1 - vMin;
|
|
||||||
newDy = 1 - vMin;
|
|
||||||
}
|
|
||||||
|
|
||||||
uvs[uvIndexes[0]] = newAx;
|
|
||||||
uvs[uvIndexes[0] + 1] = newAy;
|
|
||||||
uvs[uvIndexes[1]] = newBx;
|
|
||||||
uvs[uvIndexes[1] + 1] = newBy;
|
|
||||||
uvs[uvIndexes[2]] = newCx;
|
|
||||||
uvs[uvIndexes[2] + 1] = newCy;
|
|
||||||
uvs[uvIndexes[3]] = newDx;
|
|
||||||
uvs[uvIndexes[3] + 1] = newDy;
|
|
||||||
|
|
||||||
pictureMesh.updateVerticesData(BABYLON.VertexBuffer.UVKind, uvs);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
applyFit();
|
applyFit();
|
||||||
|
|||||||
@@ -369,3 +369,101 @@ export function getPlaneUvIndexes(mesh: BABYLON.Mesh) {
|
|||||||
|
|
||||||
return [aIndex, bIndex, cIndex, dIndex];
|
return [aIndex, bIndex, cIndex, dIndex];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function createPlaneUvMapper(mesh: BABYLON.Mesh) {
|
||||||
|
mesh.markVerticesDataAsUpdatable(BABYLON.VertexBuffer.UVKind, true);
|
||||||
|
|
||||||
|
const uvs = mesh.getVerticesData(BABYLON.VertexBuffer.UVKind)!;
|
||||||
|
const uvIndexes = getPlaneUvIndexes(mesh);
|
||||||
|
|
||||||
|
const ax = uvs[uvIndexes[0]];
|
||||||
|
const ay = uvs[uvIndexes[0] + 1];
|
||||||
|
const bx = uvs[uvIndexes[1]];
|
||||||
|
const by = uvs[uvIndexes[1] + 1];
|
||||||
|
const cx = uvs[uvIndexes[2]];
|
||||||
|
const cy = uvs[uvIndexes[2] + 1];
|
||||||
|
const dx = uvs[uvIndexes[3]];
|
||||||
|
const dy = uvs[uvIndexes[3] + 1];
|
||||||
|
|
||||||
|
return (srcAspect: number, targetAspect: number, method: 'cover' | 'contain' | 'stretch') => {
|
||||||
|
let newAx = ax;
|
||||||
|
let newAy = ay;
|
||||||
|
let newBx = bx;
|
||||||
|
let newBy = by;
|
||||||
|
let newCx = cx;
|
||||||
|
let newCy = cy;
|
||||||
|
let newDx = dx;
|
||||||
|
let newDy = dy;
|
||||||
|
|
||||||
|
if (method === 'cover') {
|
||||||
|
const ratio = targetAspect / srcAspect;
|
||||||
|
|
||||||
|
let uRange: number;
|
||||||
|
let vRange: number;
|
||||||
|
|
||||||
|
if (ratio < 1) {
|
||||||
|
uRange = ratio; // < 1
|
||||||
|
vRange = 1;
|
||||||
|
} else {
|
||||||
|
uRange = 1;
|
||||||
|
vRange = 1 / ratio; // < 1
|
||||||
|
}
|
||||||
|
|
||||||
|
const uMin = (1 - uRange) / 2;
|
||||||
|
const uMax = uMin + uRange;
|
||||||
|
const vMin = (1 - vRange) / 2;
|
||||||
|
const vMax = vMin + vRange;
|
||||||
|
|
||||||
|
newAx = uMin;
|
||||||
|
newBx = uMax;
|
||||||
|
newCx = uMin;
|
||||||
|
newDx = uMax;
|
||||||
|
|
||||||
|
newAy = 1 - vMax;
|
||||||
|
newBy = 1 - vMax;
|
||||||
|
newCy = 1 - vMin;
|
||||||
|
newDy = 1 - vMin;
|
||||||
|
} else if (method === 'contain') {
|
||||||
|
const ratio = targetAspect / srcAspect;
|
||||||
|
|
||||||
|
let uRange: number;
|
||||||
|
let vRange: number;
|
||||||
|
|
||||||
|
if (ratio > 1) {
|
||||||
|
uRange = ratio; // > 1
|
||||||
|
vRange = 1;
|
||||||
|
} else {
|
||||||
|
uRange = 1;
|
||||||
|
vRange = 1 / ratio; // > 1
|
||||||
|
}
|
||||||
|
|
||||||
|
const uMin = (1 - uRange) / 2;
|
||||||
|
const uMax = uMin + uRange;
|
||||||
|
const vMin = (1 - vRange) / 2;
|
||||||
|
const vMax = vMin + vRange;
|
||||||
|
|
||||||
|
newAx = uMin;
|
||||||
|
newBx = uMax;
|
||||||
|
newCx = uMin;
|
||||||
|
newDx = uMax;
|
||||||
|
|
||||||
|
newAy = 1 - vMax;
|
||||||
|
newBy = 1 - vMax;
|
||||||
|
newCy = 1 - vMin;
|
||||||
|
newDy = 1 - vMin;
|
||||||
|
} else if (method === 'stretch') {
|
||||||
|
// nop
|
||||||
|
}
|
||||||
|
|
||||||
|
uvs[uvIndexes[0]] = newAx;
|
||||||
|
uvs[uvIndexes[0] + 1] = newAy;
|
||||||
|
uvs[uvIndexes[1]] = newBx;
|
||||||
|
uvs[uvIndexes[1] + 1] = newBy;
|
||||||
|
uvs[uvIndexes[2]] = newCx;
|
||||||
|
uvs[uvIndexes[2] + 1] = newCy;
|
||||||
|
uvs[uvIndexes[3]] = newDx;
|
||||||
|
uvs[uvIndexes[3] + 1] = newDy;
|
||||||
|
|
||||||
|
mesh.updateVerticesData(BABYLON.VertexBuffer.UVKind, uvs);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user