diff --git a/tv-player/src/scene/screen-shaders.js b/tv-player/src/scene/screen-shaders.js new file mode 100644 index 0000000..8843957 --- /dev/null +++ b/tv-player/src/scene/screen-shaders.js @@ -0,0 +1,18 @@ +export const screenVertexShader = ` +varying vec2 vUv; + +void main() { + vUv = uv; + gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0); +} +`; + +export const screenFragmentShader = ` +varying vec2 vUv; +uniform sampler2D videoTexture; + +void main() { + // Sample the video texture + gl_FragColor = texture2D(videoTexture, vUv); +} +`; \ No newline at end of file diff --git a/tv-player/src/scene/tv-set.js b/tv-player/src/scene/tv-set.js index 6232c3a..4a6e531 100644 --- a/tv-player/src/scene/tv-set.js +++ b/tv-player/src/scene/tv-set.js @@ -1,6 +1,7 @@ import * as THREE from 'three'; import { state } from '../state.js'; import { createVcr } from './vcr.js'; +import { screenVertexShader, screenFragmentShader } from '../shaders/screen-shaders.js'; export function createTvSet(x, z, rotY) { // --- Materials (MeshPhongMaterial) --- @@ -177,12 +178,15 @@ export function turnTvScreenOn() { if (state.tvScreen.material) { state.tvScreen.material.dispose(); } - state.tvScreen.material = new THREE.MeshBasicMaterial({ - color: 0xffffff, - map: state.videoTexture, - fog: false, - lightMapIntensity: 0, - reflectivity: 0 + + state.tvScreen.material = new THREE.ShaderMaterial({ + uniforms: { + videoTexture: { value: state.videoTexture } + }, + vertexShader: screenVertexShader, + fragmentShader: screenFragmentShader, + transparent: true, }); + state.tvScreen.material.needsUpdate = true; } \ No newline at end of file diff --git a/tv-player/src/shaders/screen-shaders.js b/tv-player/src/shaders/screen-shaders.js new file mode 100644 index 0000000..70319f9 --- /dev/null +++ b/tv-player/src/shaders/screen-shaders.js @@ -0,0 +1,19 @@ +export const screenVertexShader = ` +varying vec2 vUv; + +void main() { + vUv = uv; + gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0); +} +`; + +export const screenFragmentShader = ` +varying vec2 vUv; +uniform sampler2D videoTexture; + +void main() { + // Sample the video texture + gl_FragColor = texture2D(videoTexture, vUv); +} +`; +