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
+377 -148
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. // đá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`; 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 = { type SceneSeed = {
title: string; title: string;
location: string; location: string;
@@ -19,92 +23,277 @@ type SceneSeed = {
infoMarkers?: InfoMarker[]; 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. // 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. // 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 · // 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. // 11-15 Khu nhà Tổ & nhà khách · 16-21 Điện thờ & hành lang tượng.
// ───────────────────────────────────────────────────────────────────────────── // ─────────────────────────────────────────────────────────────────────────────
const seeds: SceneSeed[] = [ const seeds: SceneSeed[] = [
// 1 — ảnh 01: cổng chùa, cây cổ thụ và ghế đá trong sân // 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", location: "Khu cổng",
imageFile: 1, imageFile: 1,
infoMarkers: [ infoMarkers: [
{ {
id: "gioi-thieu", id: "tam-quan",
title: "Giới thiệu", title: "Tam quan",
eyebrow: "Chùa Thái Lạc · Pháp Vân tự", eyebrow: EYEBROW,
yaw: 145, yaw: 145,
pitch: 5, pitch: 5,
iconType: "info", iconType: "info",
content: [ 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ộ.", "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.",
"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.", "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 // 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ờ // 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 // 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 },
// 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 },
// 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 },
// 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 },
// 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 },
// 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 },
// 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: "Hành lang tượng cổ", title: "Sân Tịnh An",
location: "Điện thờ & hành lang tượng", location: "Cảnh quan vườn chùa",
imageFile: 18, imageFile: 5,
infoMarkers: [ infoMarkers: [
{ {
id: "cham-khac-go", id: "san-tinh-an",
title: "Chạm khắc gỗ thời Trần", title: "Sân Tịnh An",
eyebrow: "Giá trị di sản", eyebrow: EYEBROW,
yaw: 0, yaw: 120,
pitch: -4, pitch: 0,
iconType: "landmark", iconType: "info",
content: [ 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.", "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.",
"Đâ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.", "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: "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ồ 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: "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", 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: "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: "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: "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: "huu-vu-la-han",
title: "Hữu Vu La Hán",
eyebrow: EYEBROW,
yaw: -80,
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.",
],
},
],
},
// 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], 1: [2, 3, 7],
2: [1, 8], 2: [1, 8],
3: [1, 4], 3: [1, 4],
4: [5, 6, 7], 4: [3, 5, 6, 7],
5: [4, 15], 5: [4, 15],
6: [4], 6: [4],
7: [1, 4, 8, 20], 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 } │ // │ 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> = { const arrowConfig: Record<string, ArrowAdjust> = {
// Cảnh 1 — Cổng chùa Thái Lạc // Cảnh 1 — Tam quan
"1->2": { yaw: 88, pitch: -2, rotation: 20 }, // → 2. Cổng chùa bên đường "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. Đường vào cổng chùa "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. Gác chuông Tam quan "1->7": { yaw: 140, pitch: -6, rotation: 0 }, // → 7. Tiền sảnh
// Cảnh 2 — Cổng chùa bên đường // Cảnh 2 — Cổng Thanh Long (bên trái)
"2->1": { yaw: -90, pitch: -18, rotation: 0 }, // → 1. Cổng chùa Thái Lạc "2->1": { yaw: -90, pitch: -18, rotation: 0 }, // → 1. Tam quan
"2->8": { yaw: 140, pitch: -20, rotation: 0 }, // → 8. Sân chùa và đài Quan Âm "2->8": { yaw: 140, pitch: -20, rotation: 0 }, // → 8. Sân chùa
// Cảnh 3 — Đường vào cổng chùa // Cảnh 3 — Cổng Bạch Hổ (bên phải)
"3->1": { yaw: 10, pitch: -18, rotation: 0 }, // → 1. Cổng chùa Thái Lạc "3->1": { yaw: 10, pitch: -18, rotation: 0 }, // → 1. Tam quan
"3->4": {}, // → 4. Vườn chùa (chỉnh lại nếu lệch) "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 — Vườn chùa // Cảnh 4 — Sân Tịnh An
"4->5": { yaw: 100, pitch: -18, rotation: 0 }, // → 5. Lối vào rợp bóng cây "4->3": { yaw: 273, pitch: -18, rotation: 0 }, // → 3. Cổng Bạch Hổ (bên phải)
"4->6": { yaw: -120, pitch: -22, rotation: -20 }, // → 6. Hồ nước cảnh quan "4->5": { yaw: 100, pitch: -18, rotation: 0 }, // → 5. Hữu đạo
"4->7": { yaw: -60, pitch: -20, rotation: 30 }, // → 7. Gác chuông Tam quan "4->6": { yaw: -120, pitch: -22, rotation: -20 }, // → 6. Hồ Di Lặc
// Cảnh 5 — Lối vào rợp bóng cây "4->7": { yaw: -60, pitch: -20, rotation: 30 }, // → 7. Tiền sảnh
"5->4": { yaw: 290, pitch: -26, rotation: -30 }, // → 4. Vườn chùa // Cảnh 5 — Hữu đạo
"5->15": { yaw: 32, pitch: -8, rotation: 0 }, // → 15. Nhà khách "5->4": { yaw: 290, pitch: -26, rotation: -30 }, // → 4. Sân Tịnh An
// Cảnh 6 — Hồ nước cảnh quan "5->15": { yaw: 32, pitch: -8, rotation: 0 }, // → 15. Khách Đường
"6->4": { yaw: 39, pitch: -18, rotation: 30 }, // → 4. Vườn chùa // Cảnh 6 — Hồ Di Lặc
// Cảnh 7 — Gác chuông Tam quan "6->4": { yaw: 39, pitch: -18, rotation: 30 }, // → 4. Sân Tịnh An
"7->1": { yaw: 313, pitch: -8, rotation: 0 }, // → 1. Cổng chùa Thái Lạc // Cảnh 7 — Tiền sảnh
"7->4": { yaw: 210, pitch: -8, rotation: 0 }, // → 4. Vườn chùa "7->1": { yaw: 313, pitch: -8, rotation: 0 }, // → 1. Tam quan
"7->8": { yaw: 30, pitch: -8, rotation: 0 }, // → 8. Sân chùa và đài Quan Âm "7->4": { yaw: 210, pitch: -8, rotation: 0 }, // → 4. Sân Tịnh An
"7->20": { yaw: 115, pitch: -15, rotation: 0 }, // → 20. Thượng điện "7->8": { yaw: 30, pitch: -8, rotation: 0 }, // → 8. Sân chùa
// Cảnh 8 — Sân chùa và đài Quan Âm "7->20": { yaw: 115, pitch: -15, rotation: 0 }, // → 20. Tiền đường
"8->2": { yaw: 300, pitch: -8, rotation: 0 }, // → 2. Cổng chùa bên đường // Cảnh 8 — Sân chùa
"8->7": { yaw: 200, pitch: -13, rotation: 0 }, // → 7. Gác chuông Tam quan "8->2": { yaw: 300, pitch: -8, rotation: 0 }, // → 2. Cổng Thanh Long (bên trái)
"8->9": { yaw: 23, pitch: -8, rotation: 0 }, // → 9. Đài Quan Âm lộ thiên "8->7": { yaw: 200, pitch: -13, rotation: 0 }, // → 7. Tiền sảnh
"8->11": { yaw: 117, pitch: -8, rotation: 0 }, // → 11. Lối vào khu nhà Tổ "8->9": { yaw: 23, pitch: -8, rotation: 0 }, // → 9. Tôn đài Đức Phật Thích Ca
// Cảnh 9 — Đài Quan Âm lộ thiên "8->11": { yaw: 117, pitch: -8, rotation: 0 }, // → 11. Tả đạo
"9->8": { yaw: 290, pitch: -18, rotation: 0 }, // → 8. Sân chùa và đài Quan Âm // 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ổ "9->10": { yaw: 210, pitch: -22, rotation: 0 }, // → 10. Vườn tháp cổ
// Cảnh 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->8": { yaw: 231, pitch: -28, rotation: 0 }, // → 8. Sân chùa
"10->9": { yaw: 350, pitch: -11, rotation: -20 }, // → 9. Đài Quan Âm lộ thiên "10->9": { yaw: 350, pitch: -11, rotation: -20 }, // → 9. Tôn đài Đức Phật Thích Ca
// Cảnh 11 — Lối vào khu nhà Tổ // Cảnh 11 — Tả đạo
"11->8": { yaw: 292, pitch: -8, rotation: 0 }, // → 8. Sân chùa và đài Quan Âm "11->8": { yaw: 292, pitch: -8, rotation: 0 }, // → 8. Sân chùa
"11->12": {}, // → 12. Hiên nhà dưới giàn cây (chỉnh lại nếu lệch) "11->12": {yaw: 122, pitch: -8, rotation: 0}, // → 12. Khách xá (chỉnh lại nếu lệch)
// Cảnh 12 — Hiên nhà dưới giàn cây // Cảnh 12 — Khách xá
"12->11": {}, // → 11. Lối vào khu nhà Tổ (chỉnh lại nếu lệch) "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. Sân sau nhà khách "12->13": { yaw: 115, pitch: -12, rotation: 0 }, // → 13. Khách
// Cảnh 13 — Sân sau nhà khách // Cảnh 13 — Khách
"13->12": { yaw: -70, pitch: -8, rotation: 0 }, // → 12. Hiên nhà dưới giàn cây "13->12": { yaw: -70, pitch: -8, rotation: 0 }, // → 12. Khách xá
"13->14": { yaw: 115, pitch: -8, rotation: 0 }, // → 14. Sân trong giếng trời "13->14": { yaw: 115, pitch: -8, rotation: 0 }, // → 14. Khách xá
// Cảnh 14 — Sân trong giếng trời // Cảnh 14 — Khách xá
"14->13": { yaw: -22, pitch: -18, rotation: 0 }, // → 13. Sân sau nhà khách "14->13": { yaw: -22, pitch: -18, rotation: 0 }, // → 13. Khách
"14->15": { yaw: 230, pitch: -8, rotation: 0 }, // → 15. Nhà khách "14->15": { yaw: 230, pitch: -8, rotation: 0 }, // → 15. Khách Đường
// Cảnh 15 — Nhà khách // Cảnh 15 — Khách Đường
"15->14": { yaw: -28, pitch: -18, rotation: 30 }, // → 14. Sân trong giếng trời "15->14": { yaw: -28, pitch: -18, rotation: 30 }, // → 14. Khách xá
"15->17": { yaw: -90, pitch: -18, rotation: 0 }, // → 17. Sân thiên tỉnh "15->17": { yaw: -90, pitch: -18, rotation: 0 }, // → 17. Nhà Tổ
"15->5": { yaw: -97, pitch: -18, rotation: -40 }, // → 5. Lối vào rợp bóng cây "15->5": { yaw: -97, pitch: -18, rotation: -40 }, // → 5. Hữu đạo
// Cảnh 16 — Hành lang tượng cổ // Cảnh 16 — Hữu Vu La Hán
"16->15": { yaw: -62, pitch: -8, rotation: 20 }, // → 15. Nhà khách "16->15": { yaw: -62, pitch: -8, rotation: 20 }, // → 15. Khách Đường
"16->17": { yaw: -80, pitch: -8, rotation: -20 }, // → 17. Sân thiên tỉnh "16->17": { yaw: -80, pitch: -8, rotation: -20 }, // → 17. Nhà Tổ
// Cảnh 17 — Sân thiên tỉnh // Cảnh 17 — Nhà Tổ
"17->15": { yaw: 205, pitch: -12, rotation: 0 }, // → 15. Nhà khách "17->15": { yaw: 205, pitch: -12, rotation: 0 }, // → 15. Khách Đường
"17->16": { yaw: 220, pitch: -12, rotation: 10 }, // → 16. Hành lang tượng cổ "17->16": { yaw: 220, pitch: -12, rotation: 10 }, // → 16. Hữu Vu La Hán
"17->18": { yaw: 10, pitch: -12, rotation: -10 }, // → 18. Hành lang tượng và sân vườn "17->18": { yaw: 10, pitch: -12, rotation: -10 }, // → 18. Tả Vu La Hán
// Cảnh 18 — Hành lang tượng và sân vườn // Cảnh 18 — Tả Vu La Hán
"18->17": { yaw: -110, pitch: -18, rotation: 0 }, // → 17. Sân thiên tỉnh "18->17": { yaw: -110, pitch: -18, rotation: 0 }, // → 17. Nhà Tổ
"18->19": { yaw: 78, pitch: -18, rotation: 0 }, // → 19. Gian thờ bên trong "18->19": { yaw: 78, pitch: -18, rotation: 0 }, // → 19. Tiền đường
// Cảnh 19 — Gian thờ bên trong // Cảnh 19 — Tiền đường
"19->18": { yaw: 50, pitch: -22, rotation: 10 }, // → 18. Hành lang tượng và sân vườn "19->18": { yaw: 50, pitch: -22, rotation: 10 }, // → 18. Tả Vu La Hán
"19->20": { yaw: 190, pitch: -18, rotation: 0 }, // → 20. Thượng điện "19->20": { yaw: 190, pitch: -18, rotation: 0 }, // → 20. Tiền đường
// Cảnh 20 — Thượng điện // Cảnh 20 — Tiền đường
"20->19": { yaw: 40, pitch: -18, rotation: 0 }, // → 19. Gian thờ bên trong "20->19": { yaw: 40, pitch: -18, rotation: 0 }, // → 19. Tiền đường
"20->21": { yaw: 200, pitch: -18, rotation: 0 }, // → 21. Hậu đường "20->21": { yaw: 200, pitch: -18, rotation: 0 }, // → 21. Tiền đường
"20->7": { yaw: 295, pitch: -18, rotation: 0 }, // → 7. Gác chuông Tam quan "20->7": { yaw: 295, pitch: -18, rotation: 0 }, // → 7. Tiền sảnh
// Cảnh 21 — Hậu đường // Cảnh 21 — Tiền đường
"21->20": { yaw: 30, pitch: -18, rotation: 0 }, // → 20. Thượng điện "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. // ③ 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). // 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 }> = { const sceneDefaultView: Record<number, { yaw: number; pitch: number }> = {
1: { yaw: 140, pitch: 18 }, // Cổng chùa Thái Lạc 1: { yaw: 140, pitch: 18 }, // Tam quan
2: { yaw: 140, pitch: 10 }, // Cổng chùa bên đường 2: { yaw: 140, pitch: 10 }, // Cổng Thanh Long (bên trái)
3: { yaw: 120, pitch: 0 }, // Đường vào cổng chùa 3: { yaw: 120, pitch: 0 }, // Cổng Bạch Hổ (bên phải)
4: { yaw: 120, pitch: 0 }, // Vườn chùa 4: { yaw: 120, pitch: 0 }, // Sân Tịnh An
5: { yaw: -80, pitch: -3 }, // Lối vào rợp bóng cây 5: { yaw: -80, pitch: -3 }, // Hữu đạo
6: { yaw: 110, pitch: 0 }, // Hồ nước cảnh quan 6: { yaw: 110, pitch: 0 }, // Hồ Di Lặc
7: { yaw: 90, pitch: 0 }, // Gác chuông Tam quan 7: { yaw: 90, pitch: 0 }, // Tiền sảnh
8: { yaw: 20, pitch: 8 }, // Sân chùa và đài Quan Âm 8: { yaw: 20, pitch: 8 }, // Sân chùa
9: { yaw: 110, pitch: 0 }, // Đài Quan Âm lộ thiên 9: { yaw: 110, pitch: 0 }, // Tôn đài Đức Phật Thích Ca
10: { yaw: 115, pitch: 0 }, // Vườn tháp cổ 10: { yaw: 115, pitch: 0 }, // Vườn tháp cổ
11: { yaw: 120, pitch: 0 }, // Lối vào khu nhà Tổ 11: { yaw: 120, pitch: 0 }, // Tả đạo
12: { yaw: -150, pitch: 0 }, // Hiên nhà dưới giàn cây 12: { yaw: -150, pitch: 0 }, // Khách xá
13: { yaw: 130, pitch: 0 }, // Sân sau nhà khách 13: { yaw: 130, pitch: 0 }, // Khách
14: { yaw: 230, pitch: 0 }, // Sân trong giếng trời 14: { yaw: 230, pitch: 0 }, // Khách xá
15: { yaw: -60, pitch: 0 }, // Nhà khách 15: { yaw: -60, pitch: 0 }, // Khách Đường
16: { yaw: -80, pitch: 0 }, // Hành lang tượng cổ 16: { yaw: -80, pitch: 0 }, // Hữu Vu La Hán
17: { yaw: 110, pitch: 0 }, // Sân thiên tỉnh 17: { yaw: 110, pitch: 0 }, // Nhà Tổ
18: { yaw: 140, pitch: 0 }, // Hành lang tượng và sân vườn 18: { yaw: 140, pitch: 0 }, // Tả Vu La Hán
19: { yaw: 130, pitch: 0 }, // Gian thờ bên trong 19: { yaw: 130, pitch: 0 }, // Tiền đường
20: { yaw: 110, pitch: 0 }, // Thượng điện 20: { yaw: 110, pitch: 0 }, // Tiền đường
21: { yaw: 150, pitch: 0 }, // Hậu đường 21: { yaw: 150, pitch: 0 }, // Tiền đường
}; };
const scenes: TourScene[] = seeds.map((seed, index) => { const scenes: TourScene[] = seeds.map((seed, index) => {
@@ -378,6 +568,40 @@ const mapRoutes = (() => {
return routes; 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"> = { export const chuaThaiLacTour: Omit<TourConfig, "sceneById" | "locationGroups"> = {
id: "chua-thai-lac", id: "chua-thai-lac",
title: "Chùa Thái Lạc (Pháp Vân tự)", 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ự", welcomeAccent: "Pháp Vân tự",
welcomeSubtitle: 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.", "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: [ welcomeCards: [
{ image: imageForFile(1), label: "Cổng chùa", rotate: "-rotate-6", sceneId: "scene-1" }, { image: imageForFile(1), label: "Tam quan", rotate: "-rotate-6", sceneId: "scene-1" },
{ image: imageForFile(10), label: "Đài Quan Âm", rotate: "rotate-5", sceneId: "scene-9" }, {
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) backgroundAudio: "", // chưa có nhạc nền; engine bỏ qua chuỗi rỗng (không render thẻ audio)
practicalInfo: { practicalInfo: {
@@ -409,7 +638,7 @@ export const chuaThaiLacTour: Omit<TourConfig, "sceneById" | "locationGroups"> =
], ],
}, },
scenes, scenes,
sceneNarration: new Map<string, string[]>(), sceneNarration,
continuousNarrationGroups: [], continuousNarrationGroups,
mapRoutes, mapRoutes,
}; };