60 lines
2.6 KiB
JavaScript
60 lines
2.6 KiB
JavaScript
import * as THREE from 'three';
|
|
import { state } from '../state.js';
|
|
import floorTextureUrl from '/textures/stone_floor.png';
|
|
import sceneFeatureManager from './SceneFeatureManager.js';
|
|
// Scene Features registered here:
|
|
import { CameraManager } from './camera-manager.js';
|
|
import { RoomWalls } from './room-walls.js';
|
|
import { LightBall } from './light-ball.js';
|
|
import { Pews } from './pews.js';
|
|
import { Stage } from './stage.js';
|
|
import { MedievalMusicians } from './medieval-musicians.js';
|
|
import { PartyGuests } from './party-guests.js';
|
|
import { StageTorches } from './stage-torches.js';
|
|
import { Dancers } from './dancers.js';
|
|
import { MusicVisualizer } from './music-visualizer.js';
|
|
import { RoseWindowLight } from './rose-window-light.js';
|
|
import { RoseWindowLightshafts } from './rose-window-lightshafts.js';
|
|
import { StainedGlass } from './stained-glass-window.js';
|
|
import { MusicPlayer } from './music-player.js';
|
|
import { WallCurtain } from './wall-curtain.js';
|
|
// Scene Features ^^^
|
|
|
|
// --- Scene Modeling Function ---
|
|
export function createSceneObjects() {
|
|
sceneFeatureManager.init();
|
|
|
|
// --- Materials (MeshPhongMaterial) ---
|
|
|
|
// --- 1. Floor --- (Resized to match the new cathedral dimensions)
|
|
const floorWidth = 24;
|
|
const floorLength = 40;
|
|
const floorGeometry = new THREE.PlaneGeometry(floorWidth, floorLength);
|
|
const floorTexture = state.loader.load(floorTextureUrl);
|
|
floorTexture.wrapS = THREE.RepeatWrapping;
|
|
floorTexture.wrapT = THREE.RepeatWrapping;
|
|
floorTexture.repeat.set(floorWidth / 2, floorLength / 2); // Adjust texture repeat for new size
|
|
const floorMaterial = new THREE.MeshPhongMaterial({ map: floorTexture, color: 0xaaaaaa, shininess: 5 });
|
|
const floor = new THREE.Mesh(floorGeometry, floorMaterial);
|
|
floor.rotation.x = -Math.PI / 2;
|
|
floor.position.y = 0;
|
|
floor.receiveShadow = true;
|
|
state.scene.add(floor);
|
|
|
|
// 3. Lighting (Minimal and focused)
|
|
const ambientLight = new THREE.AmbientLight(0x606060, 0.2); // Increased ambient light for a larger space
|
|
state.scene.add(ambientLight);
|
|
|
|
// Add a HemisphereLight for more natural, general illumination in a large space.
|
|
const hemisphereLight = new THREE.HemisphereLight(0xffddcc, 0x444455, 0.5);
|
|
|
|
// Visual aids for the light source positions
|
|
if (state.debugLight && THREE.HemisphereLightHelper) {
|
|
// Lamp Helper will now work since lampLight is added to the scene
|
|
const hemisphereLightHelper = new THREE.HemisphereLightHelper(hemisphereLight, 0.1, 0x00ff00); // Green for lamp
|
|
state.scene.add(hemisphereLightHelper);
|
|
}
|
|
|
|
state.scene.add(hemisphereLight);
|
|
}
|