일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
Tags
- 티스토리챌린지
- react-three/fiber
- 브루트포스
- 시뮬레이션
- three.js
- 세그먼트 트리
- REACT
- 코딩일기
- 백준
- js
- 회고
- Next.js
- JavaScript
- 해시를 사용한 집합과 맵
- State
- styled-components
- 개발 회고
- 모던 자바스크립트 튜토리얼
- 구현
- HTML5
- 프론트엔드
- 토이 프로젝트
- 기본 문법
- 자료 구조
- 자바
- 자바스크립트
- 수학
- playwright
- poiemaweb
- 오블완
Archives
- Today
- Total
코딩하는 고릴라
[FE] 게시글 등록 상태에 따른 별자리 형성, 해제 본문
🦍 상황
- Three.js(React-three/fiber)를 활용한 프로젝트 진행 중, 특정 별자리내 모든 별의 불을 밝히면 해당 별자리를 선명하게 표현해야 하는 기능을 구현했어야 했음
🐌 로직
1. 별자리 형성 여부 체크
- 모든 별들의 등록 상태를 담고 있는 누적합 세그먼트 트리 생성
- 등록된 별의 경우 point update를 이용해 해당 별의 정보를 담고 있는 리프노드의 값을 1로 설정
- 별자리 형성을 체크할 때는 range query를 활용해 해당 별자리 내 별의 개수와 등록된 별 개수를 비교, 일치할 때 별자리 형성
2. 별자리 형성 여부에 따른 props 전달 및 react-three/fiber 오브젝트 속성 제어
- GroupStar 컴포넌트 레벨에서 해당 별자리의 생성 여부를 체크
- 별자리 생성 여부에 따른 boolean 값을 props를 통해 Line 컴포넌트로 전달
- transparent 속성과 opacity 속성을 활용해 별자리 선의 투명도 조절
- transparent: true로 설정해 두어야 opacity 속성 조절을 통한 오브젝트 투명도 조절 가능
- opacity: 0 ~ 1 범위의 값 설정을 통해 오브젝트 투명도 조절
function Line(props) {
// ...
return (
<line geometry={lineGeometry}>
<lineBasicMaterial
attach="material"
ref={lineRef}
transparent={true}
opacity={
!props.lineColor {/*전달받은 lineColor props를 통해 투명도 조절*/}
? 1
: starLineOpacity === groupNum
? 0.05
: 0.01
}
color={0xced6ff}
/>
</line>
);
}
3. 결과
🦢 고찰
- 별의 등록, 삭제 시마다 State값에 1을 더하거나 빼주는 식으로 로직을 구성하면 성능적으로 더 우수할 것으로 예상
- 불필요한 세그먼트트리 생성 및 조작 과정을 사용하지 않으므로
- 프로젝트를 진행하면서 이전에 학습했던 알고리즘을 적용해 보고 싶었던 시도로써 적용
반응형
'Project > 별일' 카테고리의 다른 글
[FE] React-three/fiber 겹친 오브젝트 간 렌더링 오류 트러블 슈팅 (2) | 2024.03.05 |
---|---|
[FE] React-three/fiber로 하늘에 별 띄우기 (4) | 2024.03.05 |
[FE] 한 번의 post 요청으로 미디어 파일, JS 객체 전송하기 (0) | 2024.03.02 |