undefined

3๊ฐ• Geometry

three.js์—์„œ ์ œ๊ณตํ•˜๋Š” Geometry ์ข…๋ฅ˜

BufferGeometry

Geometry๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ BufferGeometry๋ฅผ ์ƒ์†๋ฐ›๋Š”๋‹ค.

Geometry์˜ ํ˜•์ƒ์„ ์ •์˜ํ•˜๊ธฐ ์œ„ํ•œ ๋ฐ์ดํ„ฐ๋Š” ์ด 6๊ฐ€์ง€์ด๋‹ค.

BufferGeometry

 

Geometry์˜ ํ˜•์ƒ์„ ์ •์˜ํ•˜๊ธฐ ์œ„ํ•œ ๋ฐ์ดํ„ฐ

  1. ์ •์ : xyz ์ถ•์— ๋Œ€ํ•œ ์ขŒํ‘œ
  2. ์ •์  ์ธ๋ฑ์Šค: 3์ฐจ์› ์˜ค๋ธŒ์ ํŠธ์˜ ๋ฉด์„ ๊ตฌ์„ฑํ•˜๋Š” ์ •์ ์— ๋Œ€ํ•œ ์ธ๋ฑ์Šค
  3. ์ˆ˜์ง ๋ฒกํ„ฐ: ์ •์ ์— ๋Œ€ํ•œ ์ˆ˜์ง ๋ฒกํ„ฐ
  4. ์ •์  ์ƒ‰์ƒ: ๋ฒกํ„ฐ ์ •์ ์˜ ์ƒ‰์ƒ
  5. ํ…์Šค์ณ ๋งตํ•‘์„ ์œ„ํ•œ UV ์ขŒํ‘œ
  6. ์‚ฌ์šฉ์ž ์ •์˜ ๋ฐ์ดํ„ฐ

3์ฐจ์› ์‹œ๊ฐํ™”๋Š” ์ด ์—ฌ์„ฏ ๊ฐ€์ง€ ๋ฐ์ดํ„ฐ๊ฐ€ GPU์— ์ „๋‹ฌ๋˜๋ฉด์„œ ์ฒ˜๋ฆฌ๋œ๋‹ค.

โ“UV ์ขŒํ‘œ๋ž€

  • UV ์ขŒํ‘œ๋Š” ํ…์Šค์ณ ์ด๋ฏธ์ง€๋ฅผ 3์ฐจ์› ์˜ค๋ธŒ์ ํŠธ์— ์ž…ํžˆ๊ธฐ ์œ„ํ•œ ๋ณ€ํ™˜ ๊ธฐ์ค€.
  • 3D ๋ชจ๋ธ์˜ ํ‘œ๋ฉด์„ 2์ฐจ์› ์ขŒํ‘œ๋กœ ์ „๊ฐœํ•˜๋ฉด UV ์ขŒํ‘œ๊ฐ€ ๋œ๋‹ค
  • ์ขŒํ‘œ๊ฐ’์€ 0 ~ 1 ์‚ฌ์ด์˜ ๊ฐ’๋งŒ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค.

 

three.js๊ฐ€ ์ œ๊ณตํ•˜๋Š” Geometry

  • ParametricGeometry: ์ˆ˜ํ•™์  ํ•จ์ˆ˜์‹์— 2๊ฐœ์˜ ๊ฐ’์„ ์ž…๋ ฅํ•˜์—ฌ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ์ขŒํ‘œ๋กœ ๊ตฌ์„ฑ๋˜๋Š” Geometry
  • EdgesGeometry: ์ง€์˜ค๋ฉ”ํŠธ๋ฆฌ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ์ธ์ ‘๋ฉด์˜ ๊ฐ๋„์— ๋”ฐ๋ผ Geometry๋ฅผ ์žฌ๊ตฌ์„ฑํ•จ
  • PolyhedrongGeometry: ๋‹ค๋ฉด์ฒด๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” Geometry

๊ทธ ์™ธ Geometry๋Š” ์‹ค์Šต์„ ํ†ตํ•ด ํ•˜๋‚˜์”ฉ ์•Œ์•„๋ณด๋„๋ก ํ•œ๋‹ค.

 

Geometry๋ฅผ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•œ ์ค€๋น„ ์ฝ”๋“œ ์ž‘์„ฑ

1. geometry๋ฅผ ์™€์ด์–ดํ”„๋ ˆ์ž„ ํ˜•ํƒœ๋กœ ํ‘œํ˜„ํ•˜๊ธฐ ์œ„ํ•ด LineSegments ๊ฐ์ฒด๋ฅผ geometry ๋ชจ๋ธ๊ณผ ๊ทธ๋ฃนํ•‘ํ•œ๋‹ค

const line = new THREE.LineSegments(new THREE.WireframeGeometry(geometry), lineMaterial);
const group = new THREE.Group();

group.add(cube);
group.add(line);
this._scene.add(group);
  • LineSegments: ์ •์  ์Œ๋“ค์„ ์—ฐ๊ฒฐํ•˜๋Š” line ์˜ค๋ธŒ์ ํŠธ
  • WireframeGeometry: ๋ชจ๋ธ์˜ ๋ชจ๋“  ์™ธ๊ณฝ์„ ์„ ํ‘œ์‹œํ•˜๊ธฐ ์œ„ํ•œ Geometry
  • Group: ์„œ๋กœ ๋‹ค๋ฅธ ์˜ค๋ธŒ์ ํŠธ๋ฅผ ํ•˜๋‚˜์˜ ์˜ค๋ธŒ์ ํŠธ๋กœ ๋ฌถ์–ด์„œ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ์Œ

2. ์‚ฌ์šฉ์ž๊ฐ€ ๋งˆ์šฐ์Šค๋ฅผ ์ด์šฉํ•ด ์˜ค๋ธŒ์ ํŠธ๋ฅผ ์ง์ ‘ ํšŒ์ „์‹œํ‚ฌ ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.

  • three.js examples์—์„œ ์ œ๊ณตํ•˜๊ณ  ์žˆ๋Š” OrbitControls.js ์ฝ”๋“œ๋ฅผ ์ž„ํฌํŠธ ํ•˜์—ฌ ์‚ฌ์šฉ
  • OrbitsControls๋Š” Camera์™€ ๋งˆ์šฐ์Šค ์ด๋ฒคํŠธ๋ฅผ ๋ฐ›๋Š” DOM element(_divContainer) ๋ฅผ ๋ฐ›์Œ

 

three.js๊ฐ€ ์ œ๊ณตํ•˜๋Š” Geometry ์‚ฌ์šฉํ•ด ๋ณด๊ธฐ

three.js ๊ณต์‹๋ฌธ์„œ์—์„œ Geometry์˜ ์ธ์ž๋ฅผ ๋ณ€๊ฒฝํ•ด ๊ฐ€๋ฉฐ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ”๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

 

Geometry์˜ ํŒŒ๋ผ๋ฏธํ„ฐ

Geometry์˜ ์‚ฌ์ด์ฆˆ๋ฅผ ์กฐ์ ˆํ•˜๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ ์™ธ์—๋„ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ์‚ฌ์šฉ๋œ๋‹ค.

  • segments: ๋ถ„ํ• ์ˆ˜
    • ex) CircleGeometry(2์ฐจ์› ์›๋ฐ˜ ํ˜•์ƒ)์˜ segments๊ฐ’์— ๋”ฐ๋ผ ์‚ผ๊ฐํ˜•, ์‚ฌ๊ฐํ˜•, …, ์›ํ˜•(์— ๊ฐ€๊นŒ์šด ํ˜•์ƒ)์ด ๋œ๋‹ค.
    • ex) ConeGeometry(3์ฐจ์› ๊ณ ๊น” ํ˜•์ƒ)์˜ radial segments์— ๋”ฐ๋ผ ์‚ผ๊ฐ๋ฟ”, ์‚ฌ๊ฐ๋ฟ”, …, ์›๋ฟ”(์— ๊ฐ€๊นŒ์šด ํ˜•์ƒ)์ด ๋œ๋‹ค.
  • openEnded: ๋ฐ”๋‹ฅ ๋˜๋Š” ์ฒœ์žฅ์ด ์žˆ๋Š” ํ˜•์ƒ์ผ ๊ฒฝ์šฐ false๋ฉด ๋ง‰ํ˜€์žˆ๊ณ  true์ด๋ฉด ๋šซ๋ ค์žˆ๋‹ค
  • theta: radian ๋‹จ์œ„๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ, ํ˜•์ƒ์˜ ๊ฐ๋„๋ฅผ ์กฐ์ ˆํ•œ๋‹ค
    • thetaStart: ์‹œ์ž‘ ๊ฐ๋„. ๊ธฐ๋ณธ๊ฐ’ 0
    • thetaLength: ์—ฐ์žฅ ๊ฐ๋„. ๊ธฐ๋ณธ๊ฐ’ 2pi

ShapeGeometry

์ƒ์„ฑ ์‹œ Shape ํด๋ž˜์Šค ๊ฐ์ฒด๋ฅผ ์ธ์ž๋กœ ๋ฐ›์Œ

Shape ๊ฐ์ฒด๋ฅผ Mesh๋กœ ํ‘œํ˜„ํ•œ๋‹ค.

Shape ํด๋ž˜์Šค: 2์ฐจ์› ๋„ํ˜•์„ ์ •์˜ํ•˜๋Š” ํด๋ž˜์Šค

  • moveTo(x, y): ์ขŒํ‘œ ์ด๋™
  • lineTo(x, y): ํ˜„์žฌ ์ขŒํ‘œ์—์„œ (x, y) ์ขŒํ‘œ๊นŒ์ง€ ์„ ์„ ๊ทธ์Œ
  • closePath(): ๋„ํ˜•์„ ๋‹ซ๋Š”๋‹ค
  • bezierCurveTo(): ๋ฒ ์ด์ € ๊ณก์„ ์„ ๊ทธ๋ฆฐ๋‹ค

 

TubeGeometry

์ƒ์„ฑ ์‹œ Curve ํด๋ž˜์Šค ๊ฐ์ฒด๋ฅผ ์ธ์ž๋กœ ๋ฐ›์Œ

Curve ๊ณก์„ ์„ ๋”ฐ๋ผ์„œ ์›ํ†ต์ด ์ด์–ด์ง€๋Š” Mesh

Curve ํด๋ž˜์Šค: ๊ณก์„ ์„ ์ •์˜ํ•˜๋Š” ํด๋ž˜์Šค

  • Curve ํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›๊ณ  getPoint(t)๋ฅผ override ํ•˜์—ฌ ๊ณก์„ ์„ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์ปค๋ธŒ๋Š” getPoint(t) ์—์„œ ๋ฐฉ์ •์‹์œผ๋กœ ์ •์˜ํ•œ๋‹ค
  • getPoints(divisions): divisions๋Š” ์ปค๋ธŒ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ์ขŒํ‘œ์˜ ๊ฐœ์ˆ˜. ๊ฐ’์ด ํด์ˆ˜๋ก ๋” ๋ถ€๋“œ๋Ÿฌ์šด ๊ณก์„ ์ด ๋œ๋‹ค.

 

LatheGeometry

y์ถ•์œผ๋กœ ํšŒ์ „ํ•˜์—ฌ ์–ป์–ด์ง€๋Š” 3์ฐจ์› Mesh

์ƒ์„ฑ ์‹œ ํšŒ์ „์‹œํ‚ฌ ๋„ํ˜•์„ ์ธ์ž๋กœ ๋ฐ›์Œ

์‹ค์Šต์—์„œ๋Š” 2์ฐจ์› Vector array๋ฅผ ์ธ์ž๋กœ ๋ฐ›๊ณ  ์ด ๊ฒƒ์„ y์ถ•์— ๋Œ€ํ•ด ํšŒ์ „์‹œํ‚จ๋‹ค.

const points = [];
for (let i = 0; i < 10; ++i) {
  points.push(new THREE.Vector2(Math.sin(i * 0.2) * 3 + 3, (i - 5) * 0.8));
}

 

ExtrudeGeometry

์ƒ์„ฑ ์‹œ Shape ํด๋ž˜์Šค ๊ฐ์ฒด์™€ ์„ธํŒ…๊ฐ’์ด ๋“ค์–ด์žˆ๋Š” object๋ฅผ ์ธ์ž๋กœ ๋ฐ›์Œ

ํ‰๋ฉด Shape์— ๊นŠ์ด ๊ฐ’์„ ๋ถ€์—ฌํ•ด ์ฃผ๊ณ  Mesh์˜ ์œ— ๋ฉด๊ณผ ๋ฐ‘ ๋ฉด์„ ๋น„์Šค๋“ฌํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•ด ์ฃผ๋Š” Geometry

** extrude: ๋Œ์ถœํ•˜๋‹ค, beveling: ๋น„์Šค๋“ฌํ•˜๊ฒŒ ํ•˜๊ธฐ, ์‚ฌ๊ฐ ๋งŒ๋“ค๊ธฐ.

ExtrudeGeometry์˜ ์„ธํŒ…๊ฐ’

  • steps: ๊นŠ์ด๋ฅผ ๋”ฐ๋ผ segments๋กœ ๋ถ„๋ฆฌํ•  ๋•Œ ์‚ฌ์šฉ๋˜๋Š” point์˜ ๊ฐœ์ˆ˜
  • depth: ์–ด๋Š ๊นŠ์ด๊นŒ์ง€ Shape์„ ๋Œ์ถœ์‹œํ‚ฌ์ง€
  • bevelEnabled: ๋ฒ ๋ฒจ๋ง ์—ฌ๋ถ€
  • bevelThickness: ๋ฒ ๋ฒจ๋ง์„ ์›๋ž˜ Shape์œผ๋กœ๋ถ€ํ„ฐ ์–ผ๋งˆ๋‚˜ ๊นŠ๊ฒŒ ํ•  ๊ฒƒ์ธ์ง€
  • bevelSize: ๋ฒ ๋ฒจ์ด Shape์˜ ํ…Œ๋‘๋ฆฌ๋กœ๋ถ€ํ„ฐ ์–ผ๋งˆํผ ํ™•์žฅ๋  ์ˆ˜ ์žˆ๋Š”์ง€
  • bevelSegments: ๋ฒ ๋ฒจ layer ๊ฐœ์ˆ˜

 

TextGeometry

ExtrudeGeometry๋ฅผ ์ƒ์†๋ฐ›๋Š”๋‹ค.

font ๋ฐ์ดํ„ฐ๊ฐ€ ํ•„์š”ํ•˜๋ฉฐ, font๋ฅผ ๋กœ๋“œํ•  ๋•Œ๋Š” FontLoader ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

  • FontLoader.load(): font ๋ฐ์ดํ„ฐ๋ฅผ ๋น„๋™๊ธฐ์ ์œผ๋กœ ๋กœ๋“œํ•˜๋Š” ํ•จ์ˆ˜
  • ๋กœ๋“œ๋œ font๋ฅผ TextGeometry์— ์ „๋‹ฌํ•˜๋ฉด ํ•ด๋‹น font๋กœ 3D ํ…์ŠคํŠธ๊ฐ€ ๋ Œ๋”๋ง ๋œ๋‹ค.

๋งˆ๋ฌด๋ฆฌ

three.js์—์„œ ์ œ๊ณตํ•˜๋Š” ์—ฌ๋Ÿฌ ์ข…๋ฅ˜์˜ ์ง€์˜ค๋ฉ”ํŠธ๋ฆฌ๋ฅผ ์ง์ ‘ ๋‹ค๋ค„๋ณผ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

๋‹จ์ˆœํžˆ ๋”ฐ๋ผ ์น˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์–ด๋–ค ์†์„ฑ๋“ค์ด ๊ณตํ†ต์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š”์ง€, ์–ด๋–ป๊ฒŒ ์‘์šฉ๋  ์ˆ˜ ์žˆ์„์ง€๋ฅผ ์ƒ๊ฐํ•˜๋ฉฐ ๋“ค์—ˆ๋‹ค. 

๋””์ž์ด๋„ˆ์™€ ํ˜‘์—…ํ•œ๋‹ค๋ฉด ์ง์ ‘ ์ง€์˜ค๋ฉ”ํŠธ๋ฆฌ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ์ผ์€ ๋งŽ์ด ์—†์„ ๊ฒƒ ๊ฐ™๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ์ง€๋งŒ, ์ง€์˜ค๋ฉ”ํŠธ๋ฆฌ๊ฐ€ ์–ด๋–ป๊ฒŒ ๊ตฌ์„ฑ๋˜๊ณ  ์–ด๋–ค ์†์„ฑ์— ๋”ฐ๋ผ ํ˜•ํƒœ๊ฐ€ ๊ฒฐ์ •๋˜๋Š”์ง€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

bevel์ด๋ผ๋Š” ๊ฐœ๋…์ด ์กฐ๊ธˆ ์ƒ์†Œํ–ˆ๋Š”๋ฐ ๊ต‰์žฅํžˆ ์ค‘์š”ํ•˜๊ณ  ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ์†์„ฑ์ด๋ผ๊ณ  ํ•œ๋‹ค.

์ด ์‚ฌ์ดํŠธ๋Š” ์—ฌ๋Ÿฌ 3d ๊ฐ์ฒด์˜ ์†์„ฑ๊ฐ’์„ ๋ณ€๊ฒฝํ•ด ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ์—ฌ๊ธฐ์„œ bevel ๊ฐ’์„ ์ด๋ฆฌ์ €๋ฆฌ ๋ณ€๊ฒฝํ•ด ๋ณด๋ฉด์„œ 3d ๊ฐ์ฒด์˜ ํ…Œ๋‘๋ฆฌ๋ฅผ ๋ถ€๋“œ๋Ÿฝ๊ฒŒ ๊นŽ์•„๋‚ด๋Š” ์†์„ฑ์ด๋ผ๊ณ  ์ดํ•ดํ–ˆ๋‹ค.