크라우니OS 두근두근타운 3D 시작화면 GUI
개요
크라우니OS의 시작화면을 두근두근타운(ruliweb 219854) 풍 아늑한 파스텔 3D 마을로 구축했다. 부드러운 황혼빛, 둥근 저폴리 건물, 막대사탕 나무, 떠다니는 구름 — "마을을 바라보는 것만으로 안정감"을 주는 분위기를 목표로 했다.참고: real.crowny.org(Canvas2D + MVP 투영 + rAF 루프 — 렌더 구조 차용), design.crowny.org(디자인 토큰 + NURBS 커널). 구조 원칙은 crowny-real과 1:1 — 씬은 한선씨가 데이터로 생성(정본), 실시간 렌더 루프는 브라우저 래퍼.
무엇을 했는지
도구 툴킷 (한선씨)
| 파일 | 역할 |
|---|---|
crownyc/libs/삼각도.한선 | 도(degree) 기반 사인도/코사인도(Bhaskara, ×1000). VM 사인/코사인 정수라디안 함정 우회 |
crownyc/libs/장면3D.한선 | 씬그래프(병렬배열) + 집/지붕/나무/덤불/가로등/분수/길/바닥 생성기 + JSON 스트리밍 방출 |
crownyc/libs/마을생성.한선 | 두근두근타운 배치(집 18채·나무·중앙광장+분수·십자길·외곽숲), 파스텔 팔레트 |
시작화면/시작화면생성.한선 | 최종 정본 — 마을 SCENE 임베드 + 부팅 UI(로고/로딩바/시작하기) → index.html 방출 |
시작화면/town.js | Canvas2D 실시간 렌더(구면 궤도카메라·원근투영·painter 깊이정렬·소프트 방향광·2D 하늘구름·마우스 둘러보기) |
시작화면/부팅스플래시.한선 | 네이티브 PPM 부팅 스틸(RGB사각형/원채움/지붕) — 브라우저 없이 커널 프레임버퍼용 |
시작화면/빌드.sh | 웹+네이티브 일괄 생성 후 os.crowny.org 배포 |
두 렌더 경로
- 웹(3D 애니메이션):
index.html(10KB, SCENE 76물체 임베드) +town.js— 천천히 도는 궤도카메라, 부팅 로딩바→시작하기 버튼 - 네이티브(부팅 스틸):
boot-splash.png/ppm(1024×600) — 순수 한선씨 GUI opcode
검증
- Chrome 헤드리스 스크린샷으로 시각 검증 (웹·네이티브 둘 다 PASS)
- 한선씨 컴파일·실행·JSON 유효성 전부 통과
관련 파일 경로
- 소스:
/Users/ef/CrownyOS/시작화면/,/Users/ef/CrownyOS/crownyc/libs/{삼각도,장면3D,마을생성}.한선 - 배포:
/Users/ef/CrownyOS/os-site/{boot.html,town.js}→ os.crowny.org/boot.html
발견한 VM 함정 (메모리 기록)
- 루트는 정수 sqrt 반환 (×1000 아님).
루트(4900)=70. 사인/코사인은 ×1000 — 불일치 주의. 거리계산/1000금지. - 모듈로
i - i/m*m깨짐 — 자연반올림 나눗셈으로i/m*m > i→ 음수 인덱스.나머지양(a,m)뺄셈 루프로 대체. - 인라인
;다단어 주석 →//사용.
잔여 이슈
- 시작하기 버튼 →
/desktop이동(데스크톱 셸 미구현, 경로 변경 가능) - 웹 마을 중앙부가 다소 밀집 — 배치 간격 튜닝 여지
- 네이티브 스플래시
글쓰기타이틀은 소형 폰트(거의 안 보임) — 비트맵폰트렌더 연동 시 개선 가능 - 실제 커널 부팅 시퀀스(QEMU 프레임버퍼)에 PPM 스플래시 결선은 후속 작업
재스크리닝 반영: 살아있는 마을 (2026-06-21)
ruliweb 219854 재스크리닝 핵심="동식물·NPC가 가득, 마을이 살아있다, 펫이 따라다닌다, 공간을 바라보는 것만으로 안정감"(라이프심, XD Inc., 50개국 1위). → 정적이던 마을에 행위자 추가: 장면3D.한선 행위자추가/NPC추가/펫추가/새추가/나비추가(병렬배열, JSON "actors" 방출). 마을생성.한선에 NPC5·펫2·새3·나비3 배치. town.js actorPos(시간 T 기반 원형배회/비행/플러터)+drawActor(npc 몸+머리+bob, pet 타원, bird 날갯짓 V, butterfly 양날개). 픽셀프로브로 NPC 1949px 렌더 확정. 정렬=지면 깊이순+새는 위.정렬 개선 (펫추적·탈것·둥근창)
- 행위자 owner 필드: 펫추가(x,z,색,owner)가 NPC 인덱스 추적. town.js actorPos가 주인 위치(T-0.6 지연)+오프셋으로 따라다님("펫이 자연스럽게 따라다님" 반영).
- 탈것추가(vehicle): 광장 둘레 순회 카트(몸체+바퀴2+탄사람). "탈것의 리듬" 반영. 픽셀프로브 3452px 확정.
- 데스크톱 창 border-radius 11→18px("둥글게 다듬어진 형태" 3D 데스크톱 적용).
- 검증: actors 14(npc5·pet2·bird3·butterfly3·vehicle1), NPC 1500px·탈것 3452px 렌더.