diff --git a/packages/frontend/assets/room/objects/tv/tv.blend b/packages/frontend/assets/room/objects/tv/tv.blend index 1b5b3055e4..8615de0ce4 100644 Binary files a/packages/frontend/assets/room/objects/tv/tv.blend and b/packages/frontend/assets/room/objects/tv/tv.blend differ diff --git a/packages/frontend/assets/room/objects/tv/tv.glb b/packages/frontend/assets/room/objects/tv/tv.glb index 1cb4a0c3ad..af7d5718ce 100644 Binary files a/packages/frontend/assets/room/objects/tv/tv.glb and b/packages/frontend/assets/room/objects/tv/tv.glb differ diff --git a/packages/frontend/src/utility/room/objects/tv.ts b/packages/frontend/src/utility/room/objects/tv.ts index df57759867..7aaca4ee93 100644 --- a/packages/frontend/src/utility/room/objects/tv.ts +++ b/packages/frontend/src/utility/room/objects/tv.ts @@ -5,7 +5,7 @@ import * as BABYLON from '@babylonjs/core'; import { defineObject } from '../engine.js'; -import { initTv } from '../utility.js'; +import { createPlaneUvMapper, initTv } from '../utility.js'; export const tv = defineObject({ id: 'tv', @@ -46,7 +46,15 @@ export const tv = defineObject({ model.bakeExcludeMeshes = [screenMesh]; - const { material: screenMaterial } = initTv(room, screenMesh); + const screenMaterial = model.findMaterial('__X_SCREEN__'); + + const { dispose: disposeTv } = initTv(room, screenMesh); + + //const videoTexture = new BABYLON.VideoTexture('', 'http://syu-win.local:3000/files/97986924-b99e-4fe1-993d-9caf010cca59', room.scene, false, true); ; + //screenMaterial.emissiveTexture = videoTexture; + //videoTexture.video.muted = true; + //videoTexture.video.volume = 0; + //videoTexture.video.loop = true; const applyScreenBrightness = () => { const b = options.screenBrightness; @@ -56,6 +64,17 @@ export const tv = defineObject({ applyScreenBrightness(); + //const updateUv = createPlaneUvMapper(screenMesh); + //const applyFit = () => { + // const tex = screenMaterial.emissiveTexture; + // if (tex == null) return; + // const srcAspect = 16 / 9; + // const targetAspect = 16 / 9; + // updateUv(srcAspect, targetAspect, 'cover'); + // model.updated(); + //}; + //applyFit(); + const bodyMaterial = model.findMaterial('__X_BODY__'); const applyBodyColor = () => { diff --git a/packages/frontend/src/utility/room/utility.ts b/packages/frontend/src/utility/room/utility.ts index 3206b5b836..d4fd5b7cb8 100644 --- a/packages/frontend/src/utility/room/utility.ts +++ b/packages/frontend/src/utility/room/utility.ts @@ -285,14 +285,13 @@ const TV_PROGRAMS = { export function initTv(room: RoomEngine, screenMesh: BABYLON.Mesh) { const tvProgramId = 'shopping'; const tvProgram = TV_PROGRAMS[tvProgramId]; - const tvScreenMaterial = new BABYLON.PBRMaterial('tvScreenMaterial', room.scene); + const tvScreenMaterial = screenMesh.material as BABYLON.PBRMaterial; tvScreenMaterial.albedoColor = new BABYLON.Color3(0, 0, 0); tvScreenMaterial.ambientColor = new BABYLON.Color3(0, 0, 0); tvScreenMaterial.roughness = 1; tvScreenMaterial.emissiveTexture = new BABYLON.Texture(`/client-assets/room/tv/${tvProgramId}/${tvProgramId}.png`, room.scene, false, false); tvScreenMaterial.emissiveTexture.level = 1.0; tvScreenMaterial.emissiveColor = new BABYLON.Color3(0.5, 0.5, 0.5); - tvScreenMaterial.freeze(); const uvs = screenMesh.getVerticesData(BABYLON.VertexBuffer.UVKind)!; const uvIndexes = getPlaneUvIndexes(screenMesh); @@ -336,9 +335,7 @@ export function initTv(room: RoomEngine, screenMesh: BABYLON.Mesh) { applyTvTexture(0); return { - material: tvScreenMaterial, dispose() { - tvScreenMaterial.dispose(); }, }; }