fix: [fire-shutter] 스크린형 가이드레일 3D 회전 방향 수정

- Left rail: Ry(+PI/2)→Ry(-PI/2), 립이 개구부 중심을 향하도록
- Right rail: Ry(-PI/2)→Ry(+PI/2), 동일하게 수정
- Z offset도 반전하여 레일 폭 중심 유지
- 레일 백월이 벽 기둥 내면(whw)과 정렬
This commit is contained in:
김보곤
2026-03-14 08:50:39 +09:00
parent fd9f1b1bf2
commit fa2f023ee3

View File

@@ -2231,24 +2231,26 @@ function createRailGroup() {
const isScreenType = S.productType === 'screen';
if (isScreenType) {
// ====== 스크린형: 채널 개구부가 중심(슬랫)을 향하도록 Y축 회전 ======
// createRailGroup()의 Rx(-PI/2) 후: 개구부 +Z 방향
// Ry(±PI/2) 래퍼로 개구부를 ±X 방향(중심 향함)으로 회전
// ====== 스크린형: 채널 개구부(립)가 중심(슬랫)을 향하도록 Y축 회전 ======
// createRailGroup() 단면: X=폭(0→70), Y=깊이(0=개구부, +=벽쪽)
// Rx(-PI/2) 후: X=폭, Y=높이, Z=깊이(0=개구부, +=벽쪽)
// Left: Ry(-PI/2) → 립(Z<0)이 +X(중심), 백월(Z>0)이 -X(벽쪽)
// Right: Ry(+PI/2) → 립(Z<0)이 -X(중심), 백월(Z>0)이 +X(벽쪽)
// Left rail — Ry(+PI/2): 개구부 → +X (중심 방향)
// Left rail — Ry(-PI/2): 개구부(립) → +X (중심), 백월 → -X (벽)
const railGroupL = createRailGroup();
const wrapperL = new THREE.Group();
wrapperL.add(railGroupL);
wrapperL.rotation.y = Math.PI / 2;
wrapperL.position.set(-hw, 0, rw / 2);
wrapperL.rotation.y = -Math.PI / 2;
wrapperL.position.set(-hw, 0, -rw / 2);
meshes.rails.add(wrapperL);
// Right rail — Ry(-PI/2): 개구부 → -X (중심 방향)
// Right rail — Ry(+PI/2): 개구부(립) → -X (중심), 백월 → +X (벽)
const railGroupR = createRailGroup();
const wrapperR = new THREE.Group();
wrapperR.add(railGroupR);
wrapperR.rotation.y = -Math.PI / 2;
wrapperR.position.set(hw, 0, -rw / 2);
wrapperR.rotation.y = Math.PI / 2;
wrapperR.position.set(hw, 0, rw / 2);
meshes.rails.add(wrapperR);
} else {
// ====== 철재형: 기존 C채널 방식 (슬랫이 Z방향 슬롯 통과) ======