{ κ²½λ ν¨ν΄μ΄λ? }
κ²½λ ν¨ν΄μ GoFμ ꡬ쑰 ν¨ν΄ μ€ νλλ‘,
μΈμ€ν΄μ€κ° νμν λλ§λ€ λ§€λ² μμ±νλ κ²μ΄ μλκ³ κ°λ₯ν 곡μ ν΄μ μ¬μ©ν¨μΌλ‘μ¨ λ©λͺ¨λ¦¬λ₯Ό μ μ½νλ ν¨ν΄μ΄λ€.
λ€μμ μ μ¬ κ°μ²΄λ₯Ό μμ±νκ±°λ μ‘°μν λ μ μ©νκ² μ¬μ©ν μ μλ€.
λ μμΈν μ€λͺ νμλ©΄ κ²½λ ν¨ν΄μ ν κ°μ κ³ μ μνλ₯Ό λ€λ₯Έ κ°μ²΄μμ 곡μ νκ² λ§λ€μ΄ λ©λͺ¨λ¦¬ μ¬μ©λμ μ€μΈλ€.
- κ³ μ μν (intrinsic state): μ μ¬ κ°μ²΄λ€μ λ°μ΄ν° κ°μ΄ κ°μμ 곡μ ν μ μλ λ°μ΄ν°
- μΈλΆ μν (extrinsic state): μ μ¬ κ°μ²΄λ€μ λ°μ΄ν° κ°μ΄ μλ‘ λ¬λΌμ 곡μ ν μ μλ λ°μ΄ν°
{ κ²μ κ°λ°μμ κ²½λ ν¨ν΄ νμ©νκΈ° : λ무 ν΄λμ€ μ€κ³νκΈ° }
κ²μ μλ μμ λ€μμ λλ¬΄κ° μλ€. κ° λ무λ€μ ꡬμ±νλ λ°μ΄ν°λ λ€μκ³Ό κ°λ€.
1. λ무 ννλ₯Ό λνλ΄λ ν΄λ¦¬κ³€ λ©μ
2. λ무 κ»μ§κ³Ό μμ¬κ· ν μ€μ²
3. μλ μμμ μμΉ, λ°©ν₯, ν¬κΈ°
4. κ·Έ μΈ μμ κ°κ³Ό κ°μ 맀κ°λ³μ
μ΄κ²λ€μ μ½λλ‘ νννλ©΄ λ€μκ³Ό κ°λ€.
class Tree {
private:
Mesh mesh_;
Texture bark_;
Texture leaves_;
Vector position_;
double height_;
double thickness_;
Color barkTint_;
Color leafTint_;
};
κ²½λ ν¨ν΄μ μ΄μ©ν΄μ μ΄ Tree ν΄λμ€λ₯Ό μ΅μ νν΄λ³΄μ.
λκ° λ무 μΈμ€ν΄μ€λ€μ λμΌν meshμ textureλ₯Ό κ°μ§λ€.
κ·Έλ λ€λ©΄ μ΄ meshμ textureκ° κ³ μ μνκ° λλ κ²μ΄λ€.
κ³ μ μνλ€μ μλ‘μ΄ ν΄λμ€μ λͺ¨μ보μ.
class TreeModel {
private:
Mesh mesh_;
Texture bark_;
Texture leaves_;
};
- κ²μ λ΄μμ μ΄μ TreeModel κ°μ²΄λ νλλ§ μ‘΄μ¬νκ² λλ€. κ°μ meshμ textureλ₯Ό μ¬λ¬λ² λ©λͺ¨λ¦¬μ μ¬λ¦΄ νμκ° μκΈ° λλ¬Έμ΄λ€.
- κ° λ무 μΈμ€ν΄μ€λ μ΄ TreeModel κ°μ²΄λ₯Ό μ°Έμ‘°νκΈ°λ§ νλ©΄ λλ€.
- Tree ν΄λμ€μλ μΈμ€ν΄μ€λ³λ‘ λ€λ₯Έ μνκ°λ§ λ¨κ²¨λλ€.
class Tree {
private:
shared_ptr<TreeModel> model_;
Vector position_;
double thickness_;
Color barkTint_;
Color leafTint_;
};
β κ²½λ ν¨ν΄ μΈμ€ν΄μ€ μμ± μμ²μ΄ λ€μ΄μ€λ©΄, μ΄μ μ κ°μ κ²μ μμ±ν μ μ΄ μλμ§ νμΈν΄μΌ νλ€.
μ΄λ¬λ €λ©΄ κ°μ²΄λ₯Ό μμ±ν λ κΈ°μ‘΄ κ°μ²΄κ° μλ μ§ λ¨Όμ νμΈνκ² ν μ μλλ‘, μμ± μ½λλ₯Ό μΈν°νμ΄μ€ λ°μ μ¨κ²¨λ¬μΌ νλ€.
λν μ΄μ μ λ§λ€μ΄ λμ κ²½λ ν¨ν΄ κ°μ²΄λ₯Ό λ°ννλ €λ©΄, μ΄λ―Έ μμ±ν΄ λμ κ°μ²΄λ₯Ό μ°Ύμ μ μλλ‘ ν(pool)λ‘ κ°μ²΄λ€μ κ΄λ¦¬ν΄μΌ νλ€.
{ μΈμ€ν΄μ± }
μΈμ€ν΄μ± νΉμ μΈμ€ν΄μ€ λ λλ§μ κ°μ Meshμ Materialμ κ°μ§ μ¬λ¬ μ€λΈμ νΈλ₯Ό νλμ λλ‘μ° μ½λ‘ λ λλ§ μμ²μ νλ κ²μ΄λ€.
- λλ‘μ° μ½(λ λλ§ μμ²)μ΄ λ°μνλ©΄ λ λλ§μ νμν λ°μ΄ν°λ₯Ό GPUλ‘ λ³΄λ΄κ² λλλ° μ΄κ²μ λΉμ©μ΄ ν° μμ
μ΄λ€.
=> λ°λΌμ κ°μ Meshμ Materialμ κ°μ§ μ¬λ¬ μ€λΈμ νΈλ₯Ό λ λλ§ν λ, νλ²μ λλ‘μ° μ½λ‘ μ΄ μ€λΈμ νΈλ€μ λͺ¨λ 그릴 μ μλ μΈμ€ν΄μ±μ μ¬μ©νλ€. - μΈμ€ν΄μ±μ νλ €λ©΄ λ°μ΄ν° μ€νΈλ¦Όμ΄ λ κ° νμνλ€.
- 첫λ²μ§Έ μ€νΈλ¦Όμλ μμ μμμμ λ무μ meshμ textureμ²λΌ μ¬λ¬λ² λ λλ§λμ΄μΌ νλ 곡μ λ°μ΄ν°κ° λ€μ΄κ°λ€.
- λλ²μ§Έ μ€νΈλ¦Όμλ μΈμ€ν΄μ€ λͺ©λ‘κ³Ό κ° μΈμ€ν΄μ€μ κ°λ³ λ°μ΄ν°κ° λ€μ΄κ°λ€.
- μΈμ€ν΄μ±μ νλμ¨μ΄κ° μ§μνλ κ²½λ ν¨ν΄μ΄λ€.
λμ : κ²μ νλ‘κ·Έλλ° ν¨ν΄
'π₯οΈ Study Note > Design Patteren' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
νλ‘ν νμ (ProtoType) ν¨ν΄ (0) | 2023.06.19 |
---|---|
κ΄μ°°μ(Observer) ν¨ν΄ (0) | 2023.06.08 |
λͺ λ Ή(Command) ν¨ν΄ (2) | 2023.06.05 |
λμμΈ ν¨ν΄μ΄λ? (0) | 2023.06.05 |