일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- accordian
- parent padding
- createPortal
- vite
- BlockFormattingContext
- es6
- tailwindCSS
- ignore padding
- react
- 조건부스타일
- 화살표2개
- alias설정
- twoarrow
- 제어컴포넌트
- 함수형프로그래밍
- transition
- 문제해결
- DOM
- useQueryClient
- 리액트
- CustomHook
- ?? #null병합연산자
- 부모패딩
- ㅡ
- debouncing
- QueryClient
- 부모요소의 패딩 무시
- BFC
- 서초구보건소 #무료CPR교육
- Carousel
Archives
- Today
- Total
프론트엔드 첫걸음
BufferGeometry로 Geometry 만들기 2 본문
import * as THREE from "three";
import { OrbitControls } from "three/addons/controls/OrbitControls.js";
window.addEventListener("load", function () {
init();
});
function init() {
const renderer = new THREE.WebGLRenderer({
antialias: true,
});
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);
const scene = new THREE.Scene();
const camera = new THREE.PerspectiveCamera(
75,
window.innerWidth / window.innerHeight,
1,
10000
);
camera.position.z = 5;
new OrbitControls(camera, renderer.domElement);
const geometry = new THREE.BufferGeometry();
const count = 10000;
// Float32Array 생성할 아이템 인자를 전해주기
// x,y,z를
const positions = new Float32Array(count * 3);
for (let i = 0; i < count; i++) {
// positions[i * 3] = Math.random() - 0.5; // -0.5~ 1.5
positions[i * 3] = THREE.MathUtils.randFloatSpread(10);
positions[i * 3 + 1] = THREE.MathUtils.randFloatSpread(10);
positions[i * 3 + 2] = THREE.MathUtils.randFloatSpread(10);
}
geometry.setAttribute("position", new THREE.BufferAttribute(positions, 3));
const material = new THREE.PointsMaterial({
color: 0xccaaff,
size: 0.01,
});
const points = new THREE.Points(geometry, material);
scene.add(points);
render();
function render() {
renderer.render(scene, camera);
requestAnimationFrame(render);
}
function handleResize() {
camera.aspect = window.innerWidth / window.innerHeight;
camera.updateProjectionMatrix();
renderer.setSize(window.innerWidth, window.innerHeight);
renderer.render(scene, camera);
}
window.addEventListener("resize", handleResize);
}
- BufferGeometry는 사실상 Three.js의 모든 Geometry들을 구성하는 방식으로, BufferAttributes라는 데이터 배열들의 집합으로 구성된다.
- randFloatSpread ( range : Float ) : Float
Random float in the interval [- range / 2, range / 2].
'개발 공부 > three.js' 카테고리의 다른 글
[R3F] Three.js에서 애니메이션 캐릭터를 클론하는 방법 (0) | 2024.08.07 |
---|---|
BufferGeometry로 Geometry 만들기 (0) | 2023.05.24 |
gsap을 사용해서 3D 객체에 간단한 애니메이션 효과 주기 (0) | 2023.05.12 |
OrbitControls (0) | 2023.05.12 |
Renderer 리사이징 (0) | 2023.05.12 |