feat: enhance Chùa Thái Lạc tour with audio narration and scene updates

- Added audio narration support for various scenes, linking audio files to specific scene groups.
- Updated scene titles and descriptions for better clarity and accuracy.
- Introduced new scenes and info markers, enhancing the visitor experience with detailed information.
- Adjusted scene navigation and default views to reflect the new structure and content.
This commit is contained in:
tuyenio
2026-06-25 13:31:17 +07:00
parent be682ac95f
commit 8ad9c7113b
+367 -138
View File
@@ -11,6 +11,10 @@ const base = "/images/chua-thai-lac";
// đánh số lại — nhờ vậy có thể bỏ cảnh giữa chừng mà không phải đổi tên ảnh.
const imageForFile = (fileNumber: number) => `${base}/${String(fileNumber).padStart(2, "0")}.webp`;
// Âm thanh thuyết minh (lồng tiếng) đặt tại public/media/chua-thai-lac/*.mp3 (tên ASCII).
const audioBase = "/media/chua-thai-lac";
const audioForName = (name: string) => `${audioBase}/${name}.mp3`;
type SceneSeed = {
title: string;
location: string;
@@ -19,92 +23,277 @@ type SceneSeed = {
infoMarkers?: InfoMarker[];
};
// Eyebrow dùng chung cho mọi popup thuyết minh.
const EYEBROW = "Chùa Thái Lạc · Pháp Vân tự";
// ─────────────────────────────────────────────────────────────────────────────
// Danh sách cảnh sau khi XOÁ 5 cảnh (ảnh 04/13/20/21/22 không dùng) và ĐÁNH SỐ LẠI liền mạch 1..21.
// Mỗi cảnh giữ nguyên ảnh gốc qua `imageFile`; số cảnh hiển thị = vị trí trong mảng.
// Tên cảnh & nhóm khu vực được đặt lại theo đúng nội dung từng ảnh panorama:
// Tên điểm tham quan đặt theo yêu cầu (Tam quan, cổng Thanh Long/Bạch Hổ, Sân Tịnh An, …);
// các cảnh có nội dung thuyết minh được gắn icon "info" (giới thiệu) hiển thị popup.
// 1-3 Khu cổng · 4-6 Cảnh quan vườn · 7-10 Sân chùa & Tam quan ·
// 11-15 Khu nhà Tổ & nhà khách · 16-21 Điện thờ & hành lang tượng.
// ─────────────────────────────────────────────────────────────────────────────
const seeds: SceneSeed[] = [
// 1 — ảnh 01: cổng chùa, cây cổ thụ và ghế đá trong sân
{
title: "Cổng chùa Thái Lạc",
title: "Tam quan",
location: "Khu cổng",
imageFile: 1,
infoMarkers: [
{
id: "gioi-thieu",
title: "Giới thiệu",
eyebrow: "Chùa Thái Lạc · Pháp Vân tự",
id: "tam-quan",
title: "Tam quan",
eyebrow: EYEBROW,
yaw: 145,
pitch: 5,
iconType: "info",
content: [
"Chùa Thái Lạc, tên chữ là Pháp Vân tự, là ngôi chùa cổ thờ Pháp Vân, vị thần Mây trong tín ngưỡng Tứ Pháp của cư dân nông nghiệp đồng bằng Bắc Bộ.",
"Di tích được xếp hạng cấp quốc gia, nổi tiếng với hệ thống ván chạm khắc gỗ thời Trần (thế kỷ 14) thuộc hàng quý hiếm bậc nhất Việt Nam.",
"Tam quan được xây kiểu chồng diêm hai tầng tám mái, cổng chính giữa được làm vượt hẳn lên so với hai cổng phụ. Trung tâm đường bờ nóc cổng cái trang trí hình tháp chín tầng.",
"Phần mái với các đầu đao tạo tác kiểu hồi long vân cuốn, mái không rộng nhưng đều được đắp ngói ống, đường bờ nóc hình cong mui thuyền. Các cột trụ xây vuông, đắp gờ, kẻ nổi để thể hiện đôi câu đối chữ Hán miêu tả cảnh đẹp và ca ngợi uy linh của Tứ Pháp.",
],
},
],
},
// 2 — ảnh 02: cổng chùa nhìn từ phía đường nhựa
{ title: "Cổng chùa bên đường", location: "Khu cổng", imageFile: 2 },
{ title: "Cổng Thanh Long (bên trái)", location: "Khu cổng", imageFile: 2 },
// 3 — ảnh 03: đường trước cổng, cột cờ
{ title: "Đường vào cổng chùa", location: "Khu cổng", imageFile: 3 },
{ title: "Cổng Bạch Hổ (bên phải)", location: "Khu cổng", imageFile: 3 },
// 4 — ảnh 05: sân vườn, ghế đá, bảng nội quy
{ title: "Vườn chùa", location: "Cảnh quan vườn chùa", imageFile: 5 },
{
title: "Sân Tịnh An",
location: "Cảnh quan vườn chùa",
imageFile: 5,
infoMarkers: [
{
id: "san-tinh-an",
title: "Sân Tịnh An",
eyebrow: EYEBROW,
yaw: 120,
pitch: 0,
iconType: "info",
content: [
"Sân Tịnh An là không gian thanh tịnh trong khuôn viên chùa, được xây dựng nhằm tạo nơi nghỉ chân, chiêm bái và thư giãn cho tăng ni, phật tử và du khách. Với cảnh quan hài hòa giữa cây xanh, hoa cảnh và các công trình tâm linh, sân mang đến cảm giác yên bình, tách biệt khỏi sự ồn ào của cuộc sống thường nhật.",
"Không gian Sân Tịnh An được thiết kế thoáng đãng, sạch đẹp, là nơi diễn ra các hoạt động sinh hoạt Phật giáo, thiền định và giao lưu văn hóa tâm linh.",
],
},
],
},
// 5 — ảnh 06: lối đi rợp bóng hàng cây, tường vàng
{ title: "Lối vào rợp bóng cây", location: "Cảnh quan vườn chùa", imageFile: 6 },
{ title: "Hữu đạo", location: "Cảnh quan vườn chùa", imageFile: 6 },
// 6 — ảnh 07: hồ nước cảnh quan, lan can đá, gò non bộ
{ title: "Hồ nước cảnh quan", location: "Cảnh quan vườn chùa", imageFile: 7 },
{
title: "Hồ Di Lặc",
location: "Cảnh quan vườn chùa",
imageFile: 7,
infoMarkers: [
{
id: "ho-di-lac",
title: "Hồ Di Lặc",
eyebrow: EYEBROW,
yaw: 110,
pitch: 0,
iconType: "info",
content: [
"Hồ có tượng Phật Di Lặc bằng đá được chế tác kiên cố và trang nghiêm. Tượng thể hiện hình ảnh Phật Di Lặc với nụ cười hiền hòa, gương mặt phúc hậu và dáng vẻ an nhiên, tượng trưng cho niềm vui, hạnh phúc, sự sung túc và may mắn. Tượng được đặt ở vị trí cao, hướng nhìn bao quát toàn bộ hồ cá, tạo điểm nhấn hài hòa giữa kiến trúc tâm linh và cảnh quan thiên nhiên.",
"Sự kết hợp giữa tượng Phật Di Lặc, mặt nước trong xanh và những đàn cá Koi bơi lội không chỉ mang lại vẻ đẹp thanh tịnh mà còn thể hiện mong ước về cuộc sống an lạc, thịnh vượng và viên mãn.",
],
},
],
},
// 7 — ảnh 08: sân lớn lát đá trước gác chuông tam quan đồ sộ
{ title: "Gác chuông Tam quan", location: "Sân chùa & Tam quan", imageFile: 8 },
{ title: "Tiền sảnh", location: "Sân chùa & Tam quan", imageFile: 8 },
// 8 — ảnh 09: sân gạch, tam quan bên trái, đài Quan Âm bên phải
{ title: "Sân chùa và đài Quan Âm", location: "Sân chùa & Tam quan", imageFile: 9 },
{ title: "Sân chùa", location: "Sân chùa & Tam quan", imageFile: 9 },
// 9 — ảnh 10: đài Quan Âm lộ thiên, sân lát gạch đỏ
{ title: "Đài Quan Âm lộ thiên", location: "Sân chùa & Tam quan", imageFile: 10 },
{
title: "Tôn đài Đức Phật Thích Ca",
location: "Sân chùa & Tam quan",
imageFile: 10,
infoMarkers: [
{
id: "ton-dai-duc-phat",
title: "Tôn đài Đức Phật Thích Ca",
eyebrow: EYEBROW,
yaw: 110,
pitch: 0,
iconType: "info",
content: [
"Hình tượng Đức Phật được đặt tại vị trí trung tâm cùng các yếu tố trang trí mang đậm bản sắc Phật giáo, công trình góp phần tạo nên không khí trang nghiêm, thanh tịnh và thiêng liêng.",
"Đây không chỉ là nơi để Phật tử và du khách chiêm bái, dâng hương, mà còn là điểm phục vụ các hoạt động văn hóa, lễ hội và sự kiện Phật giáo, góp phần lan tỏa các giá trị nhân văn, từ bi và hướng thiện trong đời sống cộng đồng.",
],
},
],
},
// 10 — ảnh 11: vườn tháp, tháp mộ gạch cổ
{ title: "Vườn tháp cổ", location: "Sân chùa & Tam quan", imageFile: 11 },
// 11 — ảnh 12: lối đi hẹp giữa các dãy nhà, chậu cảnh
{ title: "Lối vào khu nhà Tổ", location: "Khu nhà Tổ & nhà khách", imageFile: 12 },
// 12 — ảnh 14: hiên nhà có hàng cột, giàn cây xanh che mát
{ title: "Hiên nhà dưới giàn cây", location: "Khu nhà Tổ & nhà khách", imageFile: 14 },
// 13 — ảnh 15: sân sau, hiên gạch đỏ của dãy nhà
{ title: "Sân sau nhà khách", location: "Khu nhà Tổ & nhà khách", imageFile: 15 },
// 14 — ảnh 16: sân trong giếng trời, cây cổ thụ tỏa bóng, bàn ghế đá
{ title: "Sân trong giếng trời", location: "Khu nhà Tổ & nhà khách", imageFile: 16 },
// 15 — ảnh 17: nhà khách, hàng ghế gỗ dài, tường treo ảnh
{ title: "Nhà khách", location: "Khu nhà Tổ & nhà khách", imageFile: 17 },
// 16 — ảnh 18: hành lang gỗ cổ với hàng tượng, cột & vì kèo cổ (chạm khắc thời Trần)
{ title: "Tả đạo", location: "Khu nhà Tổ & nhà khách", imageFile: 12 },
// 12 — ảnh 14: hiên nhà có hàng cột, giàn cây xanh che mát (Khách xá)
{ title: "Khách xá", location: "Khu nhà Tổ & nhà khách", imageFile: 14 },
// 13 — ảnh 15: sân sau, hiên gạch đỏ của dãy nhà (Khách xá)
{
title: "Hành lang tượng cổ",
title: "Khách xá",
location: "Khu nhà Tổ & nhà khách",
imageFile: 15,
infoMarkers: [
{
id: "khach-xa",
title: "Khách xá",
eyebrow: EYEBROW,
yaw: 130,
pitch: 0,
iconType: "info",
content: [
"Khách xá dùng để nghỉ ngơi và lưu trú cho chư Tăng, Phật tử, khách thập phương và các em tham gia khóa tu mùa hè. Không gian khách xá thường đơn giản, yên tĩnh, phù hợp với đời sống thanh tịnh nơi cửa Phật, đồng thời phục vụ các hoạt động sinh hoạt và tu học tập thể trong chùa.",
],
},
],
},
// 14 — ảnh 16: sân trong giếng trời, cây cổ thụ tỏa bóng, bàn ghế đá (Khách xá)
{ title: "Khách xá", location: "Khu nhà Tổ & nhà khách", imageFile: 16 },
// 15 — ảnh 17: nhà khách, hàng ghế gỗ dài, tường treo ảnh (Khách Đường)
{
title: "Khách Đường",
location: "Khu nhà Tổ & nhà khách",
imageFile: 17,
infoMarkers: [
{
id: "khach-duong",
title: "Khách Đường",
eyebrow: EYEBROW,
yaw: -60,
pitch: 0,
iconType: "info",
content: [
"Nơi đây là không gian dừng chân, nghỉ ngơi và thưởng trà dành cho Chư Tôn Đức, Tăng Ni, Phật tử cùng du khách thập phương sau hành trình chiêm bái. Nơi đây cũng lưu giữ những bức ảnh kỷ niệm ghi dấu lịch sử phát triển của bản tự qua các thời kỳ.",
],
},
],
},
// 16 — ảnh 18: hành lang gỗ cổ với hàng tượng La Hán (Hữu Vu La Hán)
{
title: "Hữu Vu La Hán",
location: "Điện thờ & hành lang tượng",
imageFile: 18,
infoMarkers: [
{
id: "cham-khac-go",
title: "Chạm khắc gỗ thời Trần",
eyebrow: "Giá trị di sản",
yaw: 0,
pitch: -4,
iconType: "landmark",
id: "huu-vu-la-han",
title: "Hữu Vu La Hán",
eyebrow: EYEBROW,
yaw: -80,
pitch: 0,
iconType: "info",
content: [
"Hệ thống ván chạm khắc gỗ có niên đại thời Trần (thế kỷ 14) khắc họa các nhạc công, vũ nữ và hình tượng Phật giáo với kỹ thuật điêu luyện.",
"Đây là nguồn tư liệu quý cho nghiên cứu mỹ thuật cổ Việt Nam, làm nên giá trị đặc biệt của Chùa Thái Lạc.",
"Hành lang này là không gian kết nối các khu vực trong chùa, tạo nên trục di chuyển trang nghiêm và tĩnh lặng.",
"Hai bên hành lang đặt các tượng Phật La Hán, tượng trưng cho những bậc tu hành đã đạt giác ngộ. Mỗi pho tượng mang một thần thái riêng, thể hiện sự đa dạng trong hành trình tu tập và chứng ngộ.",
"Không gian nơi đây giúp người tham quan lắng lại, cảm nhận sự an yên và hướng về những giá trị thiện lành.",
],
},
],
},
// 17 — ảnh 19: sân thiên tỉnh, hòm công đức, hòn non bộ (Nhà Tổ)
{
title: "Nhà Tổ",
location: "Điện thờ & hành lang tượng",
imageFile: 19,
infoMarkers: [
{
id: "nha-to",
title: "Nhà Tổ",
eyebrow: EYEBROW,
yaw: 110,
pitch: 0,
iconType: "info",
content: [
"Nơi đây là không gian thờ các vị sư tổ, tăng nhân và những người có công gìn giữ, trùng tu ngôi chùa qua nhiều thế hệ. Khác với sự uy nghi và nhiều lớp biểu tượng của Thượng điện, Nhà Tổ mang cảm giác trầm lắng, gần gũi và mang tính tưởng niệm nhiều hơn.",
"Không gian thường được tổ chức theo trục thờ chính với tượng hoặc bài vị các vị Tổ đặt trang trọng ở trung tâm, hai bên là đồ thờ truyền thống và các hiện vật ghi dấu lịch sử chùa.",
"Kiến trúc nhà giữ phong cách mộc mạc với hệ khung gỗ, mái ngói cổ và ánh sáng dịu, tạo cảm giác tĩnh tại để người hành hương dừng lại tưởng nhớ công đức của những thế hệ đã truyền giữ Phật pháp và bảo tồn di sản của chùa Thái Lạc qua nhiều thế kỷ.",
],
},
],
},
// 18 — ảnh 23: hàng tượng La Hán bên hành lang, sân vườn cây lựu (Tả Vu La Hán)
{
title: "Tả Vu La Hán",
location: "Điện thờ & hành lang tượng",
imageFile: 23,
infoMarkers: [
{
id: "ta-vu-la-han",
title: "Tả Vu La Hán",
eyebrow: EYEBROW,
yaw: 140,
pitch: 0,
iconType: "info",
content: [
"Hành lang này là không gian kết nối các khu vực trong chùa, tạo nên trục di chuyển trang nghiêm và tĩnh lặng.",
"Hai bên hành lang đặt các tượng Phật La Hán, tượng trưng cho những bậc tu hành đã đạt giác ngộ. Mỗi pho tượng mang một thần thái riêng, thể hiện sự đa dạng trong hành trình tu tập và chứng ngộ.",
"Không gian nơi đây giúp người tham quan lắng lại, cảm nhận sự an yên và hướng về những giá trị thiện lành.",
],
},
],
},
// 19 — ảnh 24: gian thờ bên trong, vách gỗ bức bàn, ban thờ hai bên (Tiền đường)
{
title: "Tiền đường",
location: "Điện thờ & hành lang tượng",
imageFile: 24,
infoMarkers: [
{
id: "tien-duong",
title: "Tiền đường",
eyebrow: EYEBROW,
yaw: 130,
pitch: 0,
iconType: "info",
content: [
"Tiền đường là công trình kiến trúc có quy mô lớn nhất. Bốn phía xung quanh nền tiền đường đều được bó vỉa bằng gạch chỉ, phía ngoài phủ vữa áo. Bờ nóc gắn hoa chanh, chính giữa đắp hình chữ nhật, đề ba chữ Hán “Pháp Vân tự”.",
"Tiền đường gồm 09 gian, kiểu tường hồi bít đốc, lợp ngói Di truyền thống. Bộ khung kết cấu kiểu bốn hàng chân cột. Hệ thống các bộ vì nóc đều được tạo tác theo kiểu “chồng rường giá chiêng”.",
],
},
],
},
// 20 — ảnh 25: thượng điện, khám thờ gỗ, cột cổ, ban thờ hai bên (Tiền đường)
{
title: "Tiền đường",
location: "Điện thờ & hành lang tượng",
imageFile: 25,
infoMarkers: [
{
id: "tien-duong",
title: "Tiền đường",
eyebrow: EYEBROW,
yaw: 110,
pitch: 0,
iconType: "info",
content: [
"Tiền đường là công trình kiến trúc có quy mô lớn nhất. Bốn phía xung quanh nền tiền đường đều được bó vỉa bằng gạch chỉ, phía ngoài phủ vữa áo. Bờ nóc gắn hoa chanh, chính giữa đắp hình chữ nhật, đề ba chữ Hán “Pháp Vân tự”.",
"Tiền đường gồm 09 gian, kiểu tường hồi bít đốc, lợp ngói Di truyền thống. Bộ khung kết cấu kiểu bốn hàng chân cột. Hệ thống các bộ vì nóc đều được tạo tác theo kiểu “chồng rường giá chiêng”.",
],
},
],
},
// 21 — ảnh 26: hậu đường, hàng cột, ban thờ tượng dọc tường (Tiền đường)
{
title: "Tiền đường",
location: "Điện thờ & hành lang tượng",
imageFile: 26,
infoMarkers: [
{
id: "tien-duong",
title: "Tiền đường",
eyebrow: EYEBROW,
yaw: 150,
pitch: 0,
iconType: "info",
content: [
"Tiền đường là công trình kiến trúc có quy mô lớn nhất. Bốn phía xung quanh nền tiền đường đều được bó vỉa bằng gạch chỉ, phía ngoài phủ vữa áo. Bờ nóc gắn hoa chanh, chính giữa đắp hình chữ nhật, đề ba chữ Hán “Pháp Vân tự”.",
"Tiền đường gồm 09 gian, kiểu tường hồi bít đốc, lợp ngói Di truyền thống. Bộ khung kết cấu kiểu bốn hàng chân cột. Hệ thống các bộ vì nóc đều được tạo tác theo kiểu “chồng rường giá chiêng”.",
],
},
],
},
// 17 — ảnh 19: sân thiên tỉnh, hòm công đức, hòn non bộ
{ title: "Sân thiên tỉnh", location: "Điện thờ & hành lang tượng", imageFile: 19 },
// 18 — ảnh 23: hàng tượng thờ bên hành lang, sân vườn cây lựu
{ title: "Hành lang tượng và sân vườn", location: "Điện thờ & hành lang tượng", imageFile: 23 },
// 19 — ảnh 24: gian thờ bên trong, vách gỗ bức bàn, ban thờ hai bên
{ title: "Gian thờ bên trong", location: "Điện thờ & hành lang tượng", imageFile: 24 },
// 20 — ảnh 25: thượng điện, khám thờ gỗ, cột cổ, ban thờ hai bên
{ title: "Thượng điện", location: "Điện thờ & hành lang tượng", imageFile: 25 },
// 21 — ảnh 26: hậu đường, hàng cột, ban thờ tượng dọc tường
{ title: "Hậu đường", location: "Điện thờ & hành lang tượng", imageFile: 26 },
];
// ─────────────────────────────────────────────────────────────────────────────
@@ -117,7 +306,7 @@ const adjacency: Record<number, number[]> = {
1: [2, 3, 7],
2: [1, 8],
3: [1, 4],
4: [5, 6, 7],
4: [3, 5, 6, 7],
5: [4, 15],
6: [4],
7: [1, 4, 8, 20],
@@ -224,102 +413,103 @@ type ArrowAdjust = {
// │ Kết hợp nhiều thứ cùng lúc: { yaw: 90, pitch: -15, scale: 1.2, nextYaw: 0 } │
// └─────────────────────────────────────────────────────────────────────────────┘
const arrowConfig: Record<string, ArrowAdjust> = {
// Cảnh 1 — Cổng chùa Thái Lạc
"1->2": { yaw: 88, pitch: -2, rotation: 20 }, // → 2. Cổng chùa bên đường
"1->3": { yaw: -170, pitch: -5, rotation: -10 }, // → 3. Đường vào cổng chùa
"1->7": { yaw: 140, pitch: -6, rotation: 0 }, // → 7. Gác chuông Tam quan
// Cảnh 2 — Cổng chùa bên đường
"2->1": { yaw: -90, pitch: -18, rotation: 0 }, // → 1. Cổng chùa Thái Lạc
"2->8": { yaw: 140, pitch: -20, rotation: 0 }, // → 8. Sân chùa và đài Quan Âm
// Cảnh 3 — Đường vào cổng chùa
"3->1": { yaw: 10, pitch: -18, rotation: 0 }, // → 1. Cổng chùa Thái Lạc
"3->4": {}, // → 4. Vườn chùa (chỉnh lại nếu lệch)
// Cảnh 4 — Vườn chùa
"4->5": { yaw: 100, pitch: -18, rotation: 0 }, // → 5. Lối vào rợp bóng cây
"4->6": { yaw: -120, pitch: -22, rotation: -20 }, // → 6. Hồ nước cảnh quan
"4->7": { yaw: -60, pitch: -20, rotation: 30 }, // → 7. Gác chuông Tam quan
// Cảnh 5 — Lối vào rợp bóng cây
"5->4": { yaw: 290, pitch: -26, rotation: -30 }, // → 4. Vườn chùa
"5->15": { yaw: 32, pitch: -8, rotation: 0 }, // → 15. Nhà khách
// Cảnh 6 — Hồ nước cảnh quan
"6->4": { yaw: 39, pitch: -18, rotation: 30 }, // → 4. Vườn chùa
// Cảnh 7 — Gác chuông Tam quan
"7->1": { yaw: 313, pitch: -8, rotation: 0 }, // → 1. Cổng chùa Thái Lạc
"7->4": { yaw: 210, pitch: -8, rotation: 0 }, // → 4. Vườn chùa
"7->8": { yaw: 30, pitch: -8, rotation: 0 }, // → 8. Sân chùa và đài Quan Âm
"7->20": { yaw: 115, pitch: -15, rotation: 0 }, // → 20. Thượng điện
// Cảnh 8 — Sân chùa và đài Quan Âm
"8->2": { yaw: 300, pitch: -8, rotation: 0 }, // → 2. Cổng chùa bên đường
"8->7": { yaw: 200, pitch: -13, rotation: 0 }, // → 7. Gác chuông Tam quan
"8->9": { yaw: 23, pitch: -8, rotation: 0 }, // → 9. Đài Quan Âm lộ thiên
"8->11": { yaw: 117, pitch: -8, rotation: 0 }, // → 11. Lối vào khu nhà Tổ
// Cảnh 9 — Đài Quan Âm lộ thiên
"9->8": { yaw: 290, pitch: -18, rotation: 0 }, // → 8. Sân chùa và đài Quan Âm
// Cảnh 1 — Tam quan
"1->2": { yaw: 88, pitch: -2, rotation: 20 }, // → 2. Cổng Thanh Long (bên trái)
"1->3": { yaw: -170, pitch: -5, rotation: -10 }, // → 3. Cổng Bạch Hổ (bên phải)
"1->7": { yaw: 140, pitch: -6, rotation: 0 }, // → 7. Tiền sảnh
// Cảnh 2 — Cổng Thanh Long (bên trái)
"2->1": { yaw: -90, pitch: -18, rotation: 0 }, // → 1. Tam quan
"2->8": { yaw: 140, pitch: -20, rotation: 0 }, // → 8. Sân chùa
// Cảnh 3 — Cổng Bạch Hổ (bên phải)
"3->1": { yaw: 10, pitch: -18, rotation: 0 }, // → 1. Tam quan
"3->4": { yaw: 121, pitch: -18, rotation: 0 }, // → 4. Sân Tịnh An (chỉnh lại nếu lệch)
// Cảnh 4 — Sân Tịnh An
"4->3": { yaw: 273, pitch: -18, rotation: 0 }, // → 3. Cổng Bạch Hổ (bên phải)
"4->5": { yaw: 100, pitch: -18, rotation: 0 }, // → 5. Hữu đạo
"4->6": { yaw: -120, pitch: -22, rotation: -20 }, // → 6. Hồ Di Lặc
"4->7": { yaw: -60, pitch: -20, rotation: 30 }, // → 7. Tiền sảnh
// Cảnh 5 — Hữu đạo
"5->4": { yaw: 290, pitch: -26, rotation: -30 }, // → 4. Sân Tịnh An
"5->15": { yaw: 32, pitch: -8, rotation: 0 }, // → 15. Khách Đường
// Cảnh 6 — Hồ Di Lặc
"6->4": { yaw: 39, pitch: -18, rotation: 30 }, // → 4. Sân Tịnh An
// Cảnh 7 — Tiền sảnh
"7->1": { yaw: 313, pitch: -8, rotation: 0 }, // → 1. Tam quan
"7->4": { yaw: 210, pitch: -8, rotation: 0 }, // → 4. Sân Tịnh An
"7->8": { yaw: 30, pitch: -8, rotation: 0 }, // → 8. Sân chùa
"7->20": { yaw: 115, pitch: -15, rotation: 0 }, // → 20. Tiền đường
// Cảnh 8 — Sân chùa
"8->2": { yaw: 300, pitch: -8, rotation: 0 }, // → 2. Cổng Thanh Long (bên trái)
"8->7": { yaw: 200, pitch: -13, rotation: 0 }, // → 7. Tiền sảnh
"8->9": { yaw: 23, pitch: -8, rotation: 0 }, // → 9. Tôn đài Đức Phật Thích Ca
"8->11": { yaw: 117, pitch: -8, rotation: 0 }, // → 11. Tả đạo
// Cảnh 9 — Tôn đài Đức Phật Thích Ca
"9->8": { yaw: 290, pitch: -18, rotation: 0 }, // → 8. Sân chùa
"9->10": { yaw: 210, pitch: -22, rotation: 0 }, // → 10. Vườn tháp cổ
// Cảnh 10 — Vườn tháp cổ
"10->8": { yaw: 231, pitch: -28, rotation: 0 }, // → 8. Sân chùa và đài Quan Âm
"10->9": { yaw: 350, pitch: -11, rotation: -20 }, // → 9. Đài Quan Âm lộ thiên
// Cảnh 11 — Lối vào khu nhà Tổ
"11->8": { yaw: 292, pitch: -8, rotation: 0 }, // → 8. Sân chùa và đài Quan Âm
"11->12": {}, // → 12. Hiên nhà dưới giàn cây (chỉnh lại nếu lệch)
// Cảnh 12 — Hiên nhà dưới giàn cây
"12->11": {}, // → 11. Lối vào khu nhà Tổ (chỉnh lại nếu lệch)
"12->13": { yaw: 115, pitch: -12, rotation: 0 }, // → 13. Sân sau nhà khách
// Cảnh 13 — Sân sau nhà khách
"13->12": { yaw: -70, pitch: -8, rotation: 0 }, // → 12. Hiên nhà dưới giàn cây
"13->14": { yaw: 115, pitch: -8, rotation: 0 }, // → 14. Sân trong giếng trời
// Cảnh 14 — Sân trong giếng trời
"14->13": { yaw: -22, pitch: -18, rotation: 0 }, // → 13. Sân sau nhà khách
"14->15": { yaw: 230, pitch: -8, rotation: 0 }, // → 15. Nhà khách
// Cảnh 15 — Nhà khách
"15->14": { yaw: -28, pitch: -18, rotation: 30 }, // → 14. Sân trong giếng trời
"15->17": { yaw: -90, pitch: -18, rotation: 0 }, // → 17. Sân thiên tỉnh
"15->5": { yaw: -97, pitch: -18, rotation: -40 }, // → 5. Lối vào rợp bóng cây
// Cảnh 16 — Hành lang tượng cổ
"16->15": { yaw: -62, pitch: -8, rotation: 20 }, // → 15. Nhà khách
"16->17": { yaw: -80, pitch: -8, rotation: -20 }, // → 17. Sân thiên tỉnh
// Cảnh 17 — Sân thiên tỉnh
"17->15": { yaw: 205, pitch: -12, rotation: 0 }, // → 15. Nhà khách
"17->16": { yaw: 220, pitch: -12, rotation: 10 }, // → 16. Hành lang tượng cổ
"17->18": { yaw: 10, pitch: -12, rotation: -10 }, // → 18. Hành lang tượng và sân vườn
// Cảnh 18 — Hành lang tượng và sân vườn
"18->17": { yaw: -110, pitch: -18, rotation: 0 }, // → 17. Sân thiên tỉnh
"18->19": { yaw: 78, pitch: -18, rotation: 0 }, // → 19. Gian thờ bên trong
// Cảnh 19 — Gian thờ bên trong
"19->18": { yaw: 50, pitch: -22, rotation: 10 }, // → 18. Hành lang tượng và sân vườn
"19->20": { yaw: 190, pitch: -18, rotation: 0 }, // → 20. Thượng điện
// Cảnh 20 — Thượng điện
"20->19": { yaw: 40, pitch: -18, rotation: 0 }, // → 19. Gian thờ bên trong
"20->21": { yaw: 200, pitch: -18, rotation: 0 }, // → 21. Hậu đường
"20->7": { yaw: 295, pitch: -18, rotation: 0 }, // → 7. Gác chuông Tam quan
// Cảnh 21 — Hậu đường
"21->20": { yaw: 30, pitch: -18, rotation: 0 }, // → 20. Thượng điện
"10->8": { yaw: 231, pitch: -28, rotation: 0 }, // → 8. Sân chùa
"10->9": { yaw: 350, pitch: -11, rotation: -20 }, // → 9. Tôn đài Đức Phật Thích Ca
// Cảnh 11 — Tả đạo
"11->8": { yaw: 292, pitch: -8, rotation: 0 }, // → 8. Sân chùa
"11->12": {yaw: 122, pitch: -8, rotation: 0}, // → 12. Khách xá (chỉnh lại nếu lệch)
// Cảnh 12 — Khách xá
"12->11": {yaw: 222, pitch: -18, rotation: 0}, // → 11. Tả đạo (chỉnh lại nếu lệch)
"12->13": { yaw: 115, pitch: -12, rotation: 0 }, // → 13. Khách
// Cảnh 13 — Khách
"13->12": { yaw: -70, pitch: -8, rotation: 0 }, // → 12. Khách xá
"13->14": { yaw: 115, pitch: -8, rotation: 0 }, // → 14. Khách xá
// Cảnh 14 — Khách xá
"14->13": { yaw: -22, pitch: -18, rotation: 0 }, // → 13. Khách
"14->15": { yaw: 230, pitch: -8, rotation: 0 }, // → 15. Khách Đường
// Cảnh 15 — Khách Đường
"15->14": { yaw: -28, pitch: -18, rotation: 30 }, // → 14. Khách xá
"15->17": { yaw: -90, pitch: -18, rotation: 0 }, // → 17. Nhà Tổ
"15->5": { yaw: -97, pitch: -18, rotation: -40 }, // → 5. Hữu đạo
// Cảnh 16 — Hữu Vu La Hán
"16->15": { yaw: -62, pitch: -8, rotation: 20 }, // → 15. Khách Đường
"16->17": { yaw: -80, pitch: -8, rotation: -20 }, // → 17. Nhà Tổ
// Cảnh 17 — Nhà Tổ
"17->15": { yaw: 205, pitch: -12, rotation: 0 }, // → 15. Khách Đường
"17->16": { yaw: 220, pitch: -12, rotation: 10 }, // → 16. Hữu Vu La Hán
"17->18": { yaw: 10, pitch: -12, rotation: -10 }, // → 18. Tả Vu La Hán
// Cảnh 18 — Tả Vu La Hán
"18->17": { yaw: -110, pitch: -18, rotation: 0 }, // → 17. Nhà Tổ
"18->19": { yaw: 78, pitch: -18, rotation: 0 }, // → 19. Tiền đường
// Cảnh 19 — Tiền đường
"19->18": { yaw: 50, pitch: -22, rotation: 10 }, // → 18. Tả Vu La Hán
"19->20": { yaw: 190, pitch: -18, rotation: 0 }, // → 20. Tiền đường
// Cảnh 20 — Tiền đường
"20->19": { yaw: 40, pitch: -18, rotation: 0 }, // → 19. Tiền đường
"20->21": { yaw: 200, pitch: -18, rotation: 0 }, // → 21. Tiền đường
"20->7": { yaw: 295, pitch: -18, rotation: 0 }, // → 7. Tiền sảnh
// Cảnh 21 — Tiền đường
"21->20": { yaw: 30, pitch: -18, rotation: 0 }, // → 20. Tiền đường
};
// ③ Góc nhìn MẶC ĐỊNH của mỗi cảnh — camera tự quay về hướng này khi vừa vào cảnh.
// yaw = quay ngang (0 = hướng gốc của ảnh), pitch = ngẩng/cúi (0 = ngang tầm mắt).
const sceneDefaultView: Record<number, { yaw: number; pitch: number }> = {
1: { yaw: 140, pitch: 18 }, // Cổng chùa Thái Lạc
2: { yaw: 140, pitch: 10 }, // Cổng chùa bên đường
3: { yaw: 120, pitch: 0 }, // Đường vào cổng chùa
4: { yaw: 120, pitch: 0 }, // Vườn chùa
5: { yaw: -80, pitch: -3 }, // Lối vào rợp bóng cây
6: { yaw: 110, pitch: 0 }, // Hồ nước cảnh quan
7: { yaw: 90, pitch: 0 }, // Gác chuông Tam quan
8: { yaw: 20, pitch: 8 }, // Sân chùa và đài Quan Âm
9: { yaw: 110, pitch: 0 }, // Đài Quan Âm lộ thiên
1: { yaw: 140, pitch: 18 }, // Tam quan
2: { yaw: 140, pitch: 10 }, // Cổng Thanh Long (bên trái)
3: { yaw: 120, pitch: 0 }, // Cổng Bạch Hổ (bên phải)
4: { yaw: 120, pitch: 0 }, // Sân Tịnh An
5: { yaw: -80, pitch: -3 }, // Hữu đạo
6: { yaw: 110, pitch: 0 }, // Hồ Di Lặc
7: { yaw: 90, pitch: 0 }, // Tiền sảnh
8: { yaw: 20, pitch: 8 }, // Sân chùa
9: { yaw: 110, pitch: 0 }, // Tôn đài Đức Phật Thích Ca
10: { yaw: 115, pitch: 0 }, // Vườn tháp cổ
11: { yaw: 120, pitch: 0 }, // Lối vào khu nhà Tổ
12: { yaw: -150, pitch: 0 }, // Hiên nhà dưới giàn cây
13: { yaw: 130, pitch: 0 }, // Sân sau nhà khách
14: { yaw: 230, pitch: 0 }, // Sân trong giếng trời
15: { yaw: -60, pitch: 0 }, // Nhà khách
16: { yaw: -80, pitch: 0 }, // Hành lang tượng cổ
17: { yaw: 110, pitch: 0 }, // Sân thiên tỉnh
18: { yaw: 140, pitch: 0 }, // Hành lang tượng và sân vườn
19: { yaw: 130, pitch: 0 }, // Gian thờ bên trong
20: { yaw: 110, pitch: 0 }, // Thượng điện
21: { yaw: 150, pitch: 0 }, // Hậu đường
11: { yaw: 120, pitch: 0 }, // Tả đạo
12: { yaw: -150, pitch: 0 }, // Khách xá
13: { yaw: 130, pitch: 0 }, // Khách
14: { yaw: 230, pitch: 0 }, // Khách xá
15: { yaw: -60, pitch: 0 }, // Khách Đường
16: { yaw: -80, pitch: 0 }, // Hữu Vu La Hán
17: { yaw: 110, pitch: 0 }, // Nhà Tổ
18: { yaw: 140, pitch: 0 }, // Tả Vu La Hán
19: { yaw: 130, pitch: 0 }, // Tiền đường
20: { yaw: 110, pitch: 0 }, // Tiền đường
21: { yaw: 150, pitch: 0 }, // Tiền đường
};
const scenes: TourScene[] = seeds.map((seed, index) => {
@@ -378,6 +568,40 @@ const mapRoutes = (() => {
return routes;
})();
// ─────────────────────────────────────────────────────────────────────────────
// LỒNG TIẾNG (thuyết minh) — gán file âm thanh cho từng nhóm cảnh.
// Mỗi nhóm dùng CHUNG một file; khi khách đi giữa các cảnh trong cùng nhóm thì
// audio phát LIỀN MẠCH (không tua lại) nhờ `continuousNarrationGroups` bên dưới.
// Cảnh không có trong bảng (7, 8, 9, 10, 11) sẽ không phát thuyết minh.
// ─────────────────────────────────────────────────────────────────────────────
const narrationGroups: { audio: string; scenes: number[] }[] = [
{ audio: "tam-quan", scenes: [1, 2, 3] },
{ audio: "san-tinh-an", scenes: [4, 5] },
{ audio: "ho-di-lac", scenes: [6] },
{ audio: "khach-xa", scenes: [12, 13, 14] },
{ audio: "khach-duong", scenes: [15] },
{ audio: "huu-vu-ta-vu-la-han", scenes: [16, 18] },
{ audio: "nha-to", scenes: [17] },
{ audio: "tien-duong", scenes: [19, 20, 21] },
];
const sceneNarration = new Map<string, string[]>();
for (const group of narrationGroups) {
const src = audioForName(group.audio);
for (const scene of group.scenes) {
sceneNarration.set(sceneId(scene), [src]);
}
}
// Nhóm cảnh phát liền mạch: chỉ những cảnh dùng chung file VÀ kề nhau trên lối đi
// (16 & 18 dùng chung file nhưng cách nhau bởi cảnh 17 nên không gom — tự phát lại).
const continuousNarrationGroups: string[][] = [
["scene-1", "scene-2", "scene-3"],
["scene-4", "scene-5"],
["scene-12", "scene-13", "scene-14"],
["scene-19", "scene-20", "scene-21"],
];
export const chuaThaiLacTour: Omit<TourConfig, "sceneById" | "locationGroups"> = {
id: "chua-thai-lac",
title: "Chùa Thái Lạc (Pháp Vân tự)",
@@ -386,10 +610,15 @@ export const chuaThaiLacTour: Omit<TourConfig, "sceneById" | "locationGroups"> =
welcomeAccent: "Pháp Vân tự",
welcomeSubtitle:
"Tham quan 360° ngôi chùa cổ thờ Pháp Vân, nổi tiếng với mảng chạm khắc gỗ thời Trần.",
welcomeBackgroundImage: imageForFile(8), // 08.webp — Gác chuông Tam quan
welcomeBackgroundImage: imageForFile(8), // 08.webp — Tiền sảnh
welcomeCards: [
{ image: imageForFile(1), label: "Cổng chùa", rotate: "-rotate-6", sceneId: "scene-1" },
{ image: imageForFile(10), label: "Đài Quan Âm", rotate: "rotate-5", sceneId: "scene-9" },
{ image: imageForFile(1), label: "Tam quan", rotate: "-rotate-6", sceneId: "scene-1" },
{
image: imageForFile(10),
label: "Tôn đài Đức Phật",
rotate: "rotate-5",
sceneId: "scene-9",
},
],
backgroundAudio: "", // chưa có nhạc nền; engine bỏ qua chuỗi rỗng (không render thẻ audio)
practicalInfo: {
@@ -409,7 +638,7 @@ export const chuaThaiLacTour: Omit<TourConfig, "sceneById" | "locationGroups"> =
],
},
scenes,
sceneNarration: new Map<string, string[]>(),
continuousNarrationGroups: [],
sceneNarration,
continuousNarrationGroups,
mapRoutes,
};