
ããã¯ãã³ãŒãã®æé©åã«é¢ããäžé£ã®èšäºã®2çªç®ã®èšäºã§ãã æåãããããã©ãŒãã³ã¹ãäœäžãããã³ãŒãã®ããã«ããã¯ãèŠã€ããŠåæããæ¹æ³ãåŠã³ãŸããã ãã®äŸã®äž»ãªåé¡ã¯ãã¡ã¢ãªã¢ã¯ã»ã¹ãé
ãããšã§ãã ãã®èšäºã§ã¯ãã¡ã¢ãªãæäœããéã®ã³ã¹ããåæžããããã°ã©ã ã®é床ãäžããæ¹æ³ãæ€èšããŸãã
ã³ãŒãã®ææ°ããŒãžã§ã³ã¯æ¬¡ã®ãšããã§ãã
void Modifier::Update() { for(Object* obj : mObjects) { Matrix4 mat = obj->GetTransform(); mat = mTransform*mat; obj->SetTransform(mat); } }
ã¡ã¢ãªã¢ã¯ã»ã¹ã®æé©å
ã¡ã¢ãªã«é¢ããä»®å®ãæ£ããå Žåãããã€ãã®æ¹æ³ã§ããã°ã©ã ãé«éåã§ããŸãã
- è²»çšã倿°ã®ãã¬ãŒã ã«åé
ããŠããã¬ãŒã å
ã®ããã€ãã®ãªããžã§ã¯ããæŽæ°ããŸãã
- 䞊è¡ããŠæŽæ°ããŸãã
- å§çž®ããããããªãã¯ã¹åœ¢åŒãäœæããã¡ã¢ãªæ¶è²»éãæžãããŸãããåŠçã«å¿
èŠãªããã»ããµãªãœãŒã¹ãå¢ãããŸãã
- ãã£ãã·ã¥ãååã«æŽ»çšããŠãã ããã
ãã¡ãããæåŸã®ã¹ãããããå§ããŸãã ããã»ããµéçºè
ã¯ãã¡ã¢ãªãžã®ã¢ã¯ã»ã¹ãé
ãããã»ã¹ã§ããããšãçè§£ããŠãããæ©åšãèšèšããéã«ãã®æ¬ ç¹ãå¯èœãªéãè£ãããšããŸãã ããšãã°ãå¿
èŠãšæãããããŒã¿ã¯ãã¡ã¢ãªããäºåã«ååŸãããŸãã ããã°ã©ã ãæ¬åœã«ããããèŠæ±ãããšããåŸ
æ©æéã¯æå°éã§ãã ããã°ã©ã ãããŒã¿ã«ã·ãŒã±ã³ã·ã£ã«ã«ã¢ã¯ã»ã¹ããå Žåãããã¯ç°¡åã«å®è£
ã§ããŸãããã©ã³ãã ã¢ã¯ã»ã¹ã§ã¯å®å
šã«äžå¯èœã§ãã ãããã£ãŠãé
åå
ã®ããŒã¿ãžã®ã¢ã¯ã»ã¹ã¯ããªã³ã¯ããããªã¹ãããã®ã¢ã¯ã»ã¹ãããã¯ããã«é«éã§ãã ãããã¯ãŒã¯ã«ã¯ããã£ãã·ã¥ã®æäœã«é¢ããå€ãã®åªããããã¥ã¡ã³ããããããã髿§èœããã°ã©ã ã®äœæã«é¢å¿ãããå Žåã¯ãå¿
ãåŠç¿ããŠãã ããã éå§ããã®ã«åœ¹ç«ã€è³æãããã€ã玹ä»ããŸãã
ã¡ã¢ãªå
ã®ã¬ã€ã¢ãŠãã倿Žãã
æé©åã®æåã®ã¹ãããã¯ãã³ãŒãã§ã¯ãªããã¡ã¢ãªã®ã¬ã€ã¢ãŠãïŒã¡ã¢ãªã¬ã€ã¢ãŠãïŒã倿Žããããšã§ãã ã¡ã¢ãªãæäœããç°¡åãªããŒã«ãäœæããŸãããããã«ãããç¹å®ã®ã¿ã€ãã®ãã¹ãŠã®ããŒã¿ã1ã€ã®ããŒã«ã§èŠã€ããããã®ããŒã¿ãå¯èœãªéãé çªã«äœ¿çšã§ããããã«ãªããŸãã ãã®ããããã®ã€ã³ã¹ã¿ã³ã¹å
ã«è¡åãä»ã®åãä¿åãã代ããã«ããªããžã§ã¯ããé
眮ãããšãã«ããã®ãããªåã®ããŒã«ã«ããããŒã¿åãžã®ãã€ã³ã¿ãä¿åããŸãã
ãã®çµæãObjectã¯ã©ã¹ã®ããŒã¿ã¹ãã¬ãŒãžã¯æ¬¡ã®ããã«å€æŽãããŸãã
protected: Matrix4 mTransform; Matrix4 mWorldTransform; BoundingSphere mBoundingSphere; BoundingSphere mWorldBoundingSphere; bool m_IsVisible = true; const char* mName; bool mDirty = true; Object* mParent;
ããã«ã€ããŠïŒ
protected: Matrix4* mTransform = nullptr; Matrix4* mWorldTransform = nullptr; BoundingSphere* mBoundingSphere = nullptr; BoundingSphere* mWorldBoundingSphere = nullptr; const char* mName = nullptr; bool mDirty = true; bool m_IsVisible = true; Object* mParent;
ããã¯ç§ãèãããšã§ãïŒããããä»ãããå€ãã®ã¡ã¢ãªã䜿çšãããŠããŸãïŒ ãã€ã³ã¿ãŒãšããããåç
§ããããŒã¿èªäœã®äž¡æ¹ãå«ãŸããŠããŸãã ããªãã¯æ£ããã§ãã ãã£ãšã¡ã¢ãªãå¿
èŠã§ãã å€ãã®å Žåãæé©åã¯åŠ¥åã§ãïŒããã©ãŒãã³ã¹ãåäžããã代ããã«ãã¡ã¢ãªãå¢ããã粟床ãäžããŸãã ãã®å Žåãå¥ã®ãã€ã³ã¿ãŒã远å ããïŒ32ãããã¢ã»ã³ããªã®å Žåã¯4ãã€ãïŒãObjectããã®ãã€ã³ã¿ãŒã«åŸã£ãŠã倿ããå¿
èŠã®ããå®éã®è¡åãèŠã€ããå¿
èŠããããŸãã ã¯ããããã¯è¿œå ã®äœæ¥ã§ãããæ¢ããŠãããããªãã¯ã¹ã¯Objectã€ã³ã¹ã¿ã³ã¹ããèªã¿åããã€ã³ã¿ãŒã®ããã«é çªã«é
眮ããããããåè·¯ã¯ã¡ã¢ãªããã©ã³ãã ãªé åºã§èªã¿åããããé«éã«åäœããã¯ãã§ãã ããã¯ããªããžã§ã¯ããããŒããããã³ä¿®é£Ÿåã䜿çšããã¡ã¢ãªã«ããŒã¿ãé çªã«é
眮ããå¿
èŠãããããšãæå³ããŸãã å®éã®ã·ã¹ãã ã§ã¯ããã®ãããªã¿ã¹ã¯ã解決ããã®ã¯é£ããå ŽåããããŸãããäŸãæ€èšããŠãããããç«å Žã匷åããããã«arbitraryæçãªå¶éã課ããŸãã
ãªããžã§ã¯ãã³ã³ã¹ãã©ã¯ã¿ãŒã¯æ¬¡ã®ããã«ãªããŸããã
Object(const char* name) :mName(name), mDirty(true), mParent(NULL) { mTransform = Matrix4::identity(); mWorldTransform = Matrix4::identity(); sNumObjects++; }
ãããŠä»ããã®ããã«ãªããŸãïŒ
Object(const char* name) :mName(name), mDirty(true), mParent(NULL) { mTransform = gTransformManager.Alloc(); mWorldTransform = gWorldTransformManager.Alloc(); mBoundingSphere = gBSManager.Alloc(); mWorldBoundingSphere = gWorldBSManager.Alloc(); *mTransform = Matrix4::identity(); *mWorldTransform = Matrix4::identity(); mBoundingSphere->Reset(); mWorldBoundingSphere->Reset(); sNumObjects++; }
gManager.Alloc()
åŒã³åºãã¯ãåçŽãªãããã¯ã¢ãã±ãŒã¿ãŒã®åŒã³åºãã§ãã
Manager<Matrix4> gTransformManager; Manager<Matrix4> gWorldTransformManager; Manager<BoundingSphere> gBSManager; Manager<BoundingSphere> gWorldBSManager; Manager<Node> gNodeManager;
ã¡ã¢ãªã®å€§ããªãã£ã³ã¯ãäºåã«å²ãåœãŠãŠãããåAlloc()
åŒã³åºãã¯æ¬¡ã®Nãã€ããè¿ããŸãMatrix4
å Žåã¯64ãã€ãã Matrix4
å Žåã¯32ãã€ãã ãã ããç¹å®ã®ã¿ã€ãã«ã¯å€§éã®ã¡ã¢ãªãå¿
èŠã§ãã å®éãããã¯ãã¡ã¢ãªã«äºåã«å²ãåœãŠãããç¹å®ã¿ã€ãã®ãªããžã§ã¯ãã®å€§ããªé
åã§ãã ãã®ãããªãã£ã¹ããªãã¥ãŒã¿ã®å©ç¹ã®1ã€ã¯ãç¹å®ã®é åºã§é
眮ãããç¹å®ã®ã¿ã€ãã®ãªããžã§ã¯ããã¡ã¢ãªå
ã§æ¬¡ã
ã«ç§»åããããšã§ãã ãªããžã§ã¯ããã¢ã¯ã»ã¹ãããé åºã§é
眮ãããšãããŒããŠã§ã¢ã¯ããå¹ççã«ããªãã§ããããŠãæå®ãããé åºã§ãªããžã§ã¯ããåŠçã§ããŸãã 幞ããªããšã«ããã®äŸã§ã¯ãã¡ã¢ãªã«é
眮ãããé åºã§è¡åããã®ä»ã®æ§é ã調ã¹ãŸãã
ãã¹ãŠã®ãªããžã§ã¯ãããããªãã¯ã¹ãããã³å¢ççãå転é ã«ä¿åãããã®ã§ãããã°ã©ã ã®ãããã¡ã€ã«ã倿ŽããŠãããã©ãŒãã³ã¹ãå€åãããã©ããã確èªããŸãã ã³ãŒããžã®å¯äžã®å€æŽã¯ãã¡ã¢ãªã¬ã€ã¢ãŠãã®å€æŽãšããã€ã³ã¿ãä»ããããŒã¿ã®äœ¿ç𿹿³ã§ããããšã«æ³šæããŠãã ããã ããšãã°ã Modifier::Update()
ã¯æ¬¡ã®ããã«ãªããŸãã
void Modifier::Update() { for(Object* obj : mObjects) { Matrix4* mat = obj->GetTransform(); *mat = (*mTransform)*(*mat); obj->SetDirty(true); } }
ãããªãã¯ã¹ãžã®ãã€ã³ã¿ãŒã䜿çšããããã SetTransform
ã䜿çšããŠãããªãã¯ã¹ä¹ç®ã®çµæããªããžã§ã¯ãã«ã³ããŒããå¿
èŠããªããªããŸãããããã«å€æããŸãã
ããã©ãŒãã³ã¹ã®å€å
倿ŽåŸãæåã«ã³ãŒããæ£ããã³ã³ãã€ã«ããã³å®è¡ãããŠããããšã確èªããŸãã ãã¹ããããã¡ã€ã«ã®ä»¥åã®çµæã¯æ¬¡ã®ãšããã§ãã

ããããã¡ã¢ãªå
ã®ã¬ã€ã¢ãŠãã倿ŽããåŸã¯ã©ããªããŸãããïŒ

ã€ãŸããããã°ã©ã ããã¬ãŒã ããã17.5ããªç§ãã10.15ããªç§ã«å éããŸããïŒ ã¡ã¢ãªå
ã®ããŒã¿ã®ã¬ã€ã¢ãŠãã®ã¿ã倿Žãããšãã»ãŒ2åã®é床ã«ãªããŸããã
ãã®äžé£ã®èšäºã®äž»ãªãã®ãæãåºããŠãã ãããã¡ã¢ãªå
ã®ããŒã¿ã®ã¬ã€ã¢ãŠãã¯ãããã°ã©ã ã®ããã©ãŒãã³ã¹ã«ãšã£ãŠéèŠã§ãã 人ã
ã¯æ§æ¥ãªæé©åã®å±éºæ§ã«ã€ããŠè©±ããŸãããç§ã®çµéšã瀺åããŠããããã«ãããŒã¿ãšåŠçããã³åŠçã®é åºãšã®é¢ä¿ã«ã€ããŠå°ãæ
éã«ããã°ãçç£æ§ã倧å¹
ã«åäžããŸãã äºåã«ã¬ã€ã¢ãŠããèšç»ã§ããªãå Žåã¯ãã¬ã€ã¢ãŠãã®åç·šæãšäœ¿çšã«åœ¹ç«ã€ã³ãŒããèšè¿°ããããšãããšãæé©åãä¿é²ãããŸãã ã»ãšãã©ã®å Žåãã¹ããŒããŠã³ããã®ã¯ã³ãŒãã§ã¯ãªããããŒã¿ã¢ã¯ã»ã¹ã§ãã
次ã®ããã«ããã¯
ã³ãŒãã¯é«éã§ãããããã§ååã§ããïŒ ãã¡ããéããŸãã ããã©ãŒãã³ã¹ç¹æ§ã倿Žãããããããããã¡ã€ã«ãåäœæããæé©åã®æ¬¡ã®åè£ãèŠã€ããå¿
èŠããããŸãã ãµã³ããªã³ã°ãããã¡ã€ã©ãŒã®å®è¡ãæ¯èŒããŸãã ããã¯ïŒ

次ã®ããã«ãªããŸããïŒ

ãµã³ããªã³ã°ãããã¡ã€ã«ã§ã¯ãããã°ã©ã ãçŸåšããé«éã§ãããã©ããã¯ããããŸããã åæ©èœã«è²»ããããçžå¯Ÿçãªæéã®ã¿ã衚瀺ãããŸãã ããã§ãè¡åæŒç®åã®ä¹ç®é¢æ°ãæãé·ãæ©èœããŸãã ããã¯ãä»ã®äººãšæ¯ã¹ãŠé床ãäœäžããããšãæå³ããã®ã§ã¯ãªããå®äºãããŸã§ã«æéããããå§ããŸããã ãµã³ããªã³ã°ãèŠãŠãããã«ããã¯ãã©ãã«ããã®ããèŠãŠã¿ãŸãããã
ãŸãã Modifier::Update()
èŠãŠãã ããã ãããªãã¯ã¹ã¯ã¹ã¿ãã¯ã«ã³ããŒãããªããªããŸããã ããã¯ããã€ã³ã¿ãŒããããªãã¯ã¹ã«æž¡ãã64ãã€ããã¹ãŠãã³ããŒããããã§ã¯ãªãããããå§ãã§ãã

颿°ã®æéã®å€§éšåã¯ãè¡åä¹ç®ã®åŒã³åºãã®èšå®ã«è²»ãããããã®çµæãobj->mTransform
ã®å Žæã«ã³ããŒãobj->mTransform
ïŒç°¡ç¥åãããã¢ã»ã³ãã©ãŒã以äžã«ç€ºããŸãïŒã

åé¡ãçºçããŸãïŒé¢æ°ãåŒã³åºãã³ã¹ããåæžããæ¹æ³ã¯ïŒ çãã¯ç°¡åã§ããã€ã³ã©ã€ã³ã«ããå¿
èŠããããŸãã ããããè¡åä¹ç®é¢æ°ãããèŠããšãã€ã³ã©ã€ã³åã®æºåããã§ã«æŽã£ãŠããããšãæããã«ãªããŸãã ããã§ã¯åé¡ã¯äœã§ããïŒ
颿°ãååã«å°ããå Žåãã³ã³ãã€ã©ã¯å€ãã®å Žåãèªåçã«ã€ã³ã©ã€ã³åããããšã決å®ããŸãã ãã ããããã°ã©ãã¯ãã®åäœãå¶åŸ¡ã§ããŸãã ã€ã³ã©ã€ã³é¢æ°ã®æå€§ãµã€ãºã倿Žã§ããŸããäžéšã®ã³ã³ãã€ã©ã§ã¯ãã€ã³ã©ã€ã³ã®ã匷å¶ããå¯èœã§ãããããã«ã¯ä»£äŸ¡ããããŸãã ã³ãŒãã®ãµã€ãºã倧ãããªãå¯èœæ§ããããããŸããŸãªå Žæããããå€ãã®ãã€ããå®è¡ãããšãã£ãã·ã¥ãã¹ãªãããå§ããŸãã
SIMDã¯ãããŸããïŒ
è¡åä¹ç®æŒç®åã¯ãSIMDã§ã¯ãªããåäžã®æµ®åå°æ°ç¹æ°ã䜿çšããŸãïŒåäžåœä»€è€æ°ããŒã¿ïŒææ°ã®ããã»ããµã¯ã4ã€ã®æµ®åå°æ°ç¹æ°ãåæã«ä¹ç®ãããªã©ãããŒã¿ã®è€æ°ã®ã³ããŒã§åäžã®åœä»€ãå®è¡ã§ããåœä»€ãæäŸããŸãïŒã SIMDã䜿çšããããšãã³ã³ãã¥ãŒã¿ãŒã«äŒããŠããç¡èŠãããåæ§ã®ã³ãŒããçæãããŸãã

SIMDåœä»€ã¯ãããŸããã16ãã€ãã«ã¢ã©ã€ã¡ã³ããããããŒã¿ãå¿
èŠã§ããã4ãã€ãã®ã¢ã©ã€ã¡ã³ãããæã£ãŠããªãããã§ãã ãã¡ãããã¢ã©ã€ã¡ã³ããããŠããªãããŒã¿ãããŒãããŠããããããSIMDã¬ãžã¹ã¿ã«è»¢éã§ããŸãã ãã ããSIMDåŠçã®éã倧ããããªãå ŽåãäžåºŠã«1ã€ã®æµ®åå°æ°ç¹æ°ã䜿çšããå Žåãããé床ãäœäžããå¯èœæ§ããããŸãã 幞ããªããšã«ããã®ãããªãªããžã§ã¯ãçšã®ã¡ã¢ãªãããŒãžã£ãäœæããããããããªãã¯ã¹ã«16ãã€ãïŒãŸãã¯ãã以äžïŒã®ã¢ã©ã€ã¡ã³ãã匷å¶ã§ããŸãã ãã®äŸã§ã¯ã16ã«æ±ºããŸããããŸããVectormathã©ã€ãã©ãªãŒã«SIMDåœä»€ã®ã¿ãçæãããŸããã
ãããã¡ã€ã©ãŒã®æ¬¡ã®å®è¡æã«ãå¹³åãã¬ãŒã æéã10.15ããçŽ7ããªç§ã«æžå°ããããšã倿ããŸããã

ãµã³ããªã³ã°ãããã¡ã€ã«ãèŠãŠã¿ãŸãããã

è¡åä¹ç®æŒç®åãæ¶ããŸããã SIMDåœä»€ã倿ãããšã颿°ã®ãµã€ãºãå°ãããªãïŒ1060ãã€ãããçŽ350ïŒãã³ã³ãã€ã©ãŒã¯ã€ã³ã©ã€ã³åã§ããŸããã è¡åä¹ç®ã³ãŒãã¯ãããåŒã³åºãããã¹ãŠã®é¢æ°ã«å«ãŸããŠããŸããããçŸåšã§ã¯ä¹ç®é¢æ°ã®ã€ã³ã¹ã¿ã³ã¹ãåŒã³åºããŸããã å¯äœçšãšããŠãã³ãŒããµã€ãºã倧ãããªããŸããïŒ255ã®ä»£ããã«.exeãã¡ã€ã«ã256 Kbãå æãå§ãããããããŸãæ°ã«ããŸããïŒããåŒã³åºããã颿°ã䜿çšããããã«é¢æ°ã®ãã©ã¡ãŒã¿ãŒãã¹ã¿ãã¯ã«ã³ããŒããå¿
èŠããªããªããŸããã
Modifier::Update()
詳ããModifier::Update()
ãŸãããã

13è¡ç®ã¯mTransformãžã®ãã€ã³ã¿ãåãããã®åŸããã«ããããªãã¯ã¹SIMDã³ãŒãã¯MOVAPSåœä»€ïŒäœçœ®åãããããå粟床浮åå°æ°ç¹å€ã®ç§»åïŒã䜿çšããŠxmmã¬ãžã¹ã¿ã«å
¥åããŸãã ãã®ãããMULPSïŒMultiply Packed Single-Precision Floating-Point ValuesïŒãªã©ã®åœä»€ã䜿çšããŠäžåºŠã«4ã€ã®æµ®åå°æ°ç¹æ°ãåŠçããã ãã§ãªãããããã®æ°å€ãåæã«èªã¿èŸŒã¿ãŸãã ãã®çµæã颿°å
ã®åœä»€ã®æ°ã倧å¹
ã«åæžãããããã©ãŒãã³ã¹ãåäžããŸãã ãŸã ãã¬ãŒããããããã£ãã·ã¥ãã¹ã«èµ·å ããå¯èœæ§ããããŸãããäž»ã«åœä»€ã®äœ¿çšãšã€ã³ã©ã€ã³åã®æ¹åã«ãããçç£æ§ãåäžããŸããã ã³ãŒãã®åæã§ã¯ãè¡åã®ä¹ç®ãããåŒã°ããŠããŸããããä»ã§ã¯ããªãã®éã®é¢æ°åŒã³åºãããªããªããŸããã
ãã®ããããã¬ãŒã ã®åŠçæéã17.5ããçŽ7ããªç§ã«ççž®ããŸãããã€ãŸããã³ãŒããå£åãããããšãªã2.5åã®ããã©ãŒãã³ã¹ãåäžãããŸããã è€éãã倧å¹
ã«å¢å ãããããšãªããããéãåäœãå§ããŸããã ããŒã¿ãã¡ã¢ãªã«ä¿åããæ¹æ³ãå¶éããŸããããé«ã¬ãã«ã®ã³ãŒãã倿Žããã«äœã¬ãã«ã®å€æŽãè¡ãããšãã§ããŸãã
远å ã®å²ãåœãŠïŒä»®æ³æ©èœ
2009幎ã®ãã¬ãŒã³ããŒã·ã§ã³ã§ã¯ããããããã¯ããã«é²ãã§ããŸããã³ãŒããå£ãããã¹ãŠã®ããŒãã£ã«ãåé€ããã³ãŒãã®æè»æ§ãäœäžãããŸããããããã©ãŒãã³ã¹ã¯2åã«ãªããŸããã ä»ã¯ããŸããã ãµã³ãã«ãããã«æé©åã§ãããšç¢ºä¿¡ããŠããŸãããèªã¿ããããæ¡åŒµæ§ãç§»æ€æ§ãã¡ã³ããã³ã¹ã®å®¹æãã§ãããæ¯æãå¿
èŠããããŸãã 代ããã«ãå®è£
ãæ€èšŒããä»®æ³æ©èœã®åœ±é¿ãæ€èšããŸãã
掟çã¯ã©ã¹ã§åå®çŸ©ã§ããåºæ¬ã¯ã©ã¹ã®ä»®æ³é¢æ°ãåŒã³åºãããŸãã ããšãã°ãObjectã¯ã©ã¹ã«ã¯ã Render()
ã®æ©èœãå®çŸ©ããCube()
ããã³Elephant()
ãªããžã§ã¯ããç¶æ¿ããã³äœæã§ããä»®æ³é¢æ°Render()
ããããŸãã ãããã®æ°ãããªããžã§ã¯ãã¯ããŒãã®1ã€ã«è¿œå ã§ããŸããå
ã®ãªããžã§ã¯ãã®ãã€ã³ã¿ãŒã䜿çšããŠRender()
ãåŒã³åºããšããªãŒããŒã©ã€ããããRender()
颿°ãåŒã³åºãããç»é¢ã«ç«æ¹äœãŸãã¯è±¡ãæç»ãããŸãã
ãã®äŸã®æãç°¡åãªãã¹ãã¯ããªããžã§ã¯ããšããŒãã®SetVisibilityRecursively()
ã¡ãœããã§ãã ããŒããå®å
šã«éå°ã®å
åŽãŸãã¯å€åŽã«ããã«ãªã³ã°ãã§ãŒãºäžã«äœ¿çšãããããããã®åã¯åçŽã«è¡šç€ºãŸãã¯é衚瀺ã«å²ãåœãŠãããšãã§ããŸãã Objectã®å Žåãå
éšãã©ã°ãèšå®ãããã ãã§ãïŒ
virtual void SetVisibilityRecursively(bool visibility) { m_IsVisible = visibility; }
Nodeã®å Žåããã¹ãŠã®åã«å¯ŸããŠSetVisibilityRecursively()
ãåŒã³åºãããŸãã
void Node::SetVisibilityRecursively(bool visibility) { m_IsVisible = visibility; for(Object* obj : mObjects) { mObjects[i]->SetVisibilityRecursively(visibility); } }
ããã¯ããµã³ããªã³ã°ãããã¡ã€ã«ãåæãããšãã«ããŒãããŒãžã§ã³ã«è¡šç€ºããããã®ã§ãã

ESIã¯ã«ãŒãã®ã«ãŠã³ã¿ãŒã§ãããEAXã¯æ¬¡ã®ãªããžã§ã¯ããžã®ãã€ã³ã¿ãŒã§ãã 匷調衚瀺ãããŠããè¡ã¯CALL DWORD [EAX + 14h]ã§ããããã§ã¯ãä»®æ³ããŒãã«ã®å
é ãã0Ã14ïŒ10鲿°ã®20ïŒãã€ãã«ããä»®æ³é¢æ°ãåŒã³åºãããŸãã ãã€ã³ã¿ãŒã¯4ãã€ãã§ããã¹ãŠã®åççãªäººã0ããã«ãŠã³ããéå§ãããããããã¯ãªããžã§ã¯ãã®ä»®æ³ããŒãã«å
ã®5çªç®ã®ä»®æ³é¢æ°ã®åŒã³åºãã§ãã ãŸãã¯ã以äžã«ç€ºãããã«ã SetVisibilityRecursively()
ïŒ

ä»®æ³é¢æ°ãåŒã³åºãã«ã¯ãããå°ãäœæ¥ãå¿
èŠã§ãã ä»®æ³ããŒãã«ãããŒãããå¿
èŠããããŸããæ¬¡ã«ãä»®æ³é¢æ°ãæ€çŽ¢ããŠåŒã³åºããããã€ãã®ãã©ã¡ãŒã¿ãŒãšãthisããã€ã³ã¿ãŒããã®ããŒãã«ã«æž¡ããŸãã
äºå®äžæ¬ ããŠããããŒãã£ã«
次ã®ã³ãŒãäŸã§ã¯ãããŒããšãªããžã§ã¯ãã§ãä»®æ³é¢æ°ãéåžžã®é¢æ°ã«çœ®ãæããŸããã ããã¯ããããããç°ãªããããåããŒãã«2ã€ã®é
åïŒããŒããšãªããžã§ã¯ãïŒãä¿æããå¿
èŠãããããšãæå³ããŸãã äŸïŒ

ã芧ã®ãšãããä»®æ³ããŒãã«ã®ããŠã³ããŒããä»®æ³é¢æ°ã®éåç
§ã¯ãããŸããã æåã®ã±ãŒã¹ã§ã¯ã Node::SetVisibilityRecursively()
å®è£
ã®åçŽãªé¢æ°åŒã³åºãã®ã¿ãããã2çªç®ã®ã±ãŒã¹ã§ã¯ãObjectå®è£
ã§ã¯ã颿°ã¯å®å
šã«ã€ã³ã©ã€ã³ã§ãã ã³ã³ãã€ã©ãŒã¯ãå®è¡æã«ã®ã¿å®çŸ©ã§ããªããããä»®æ³é¢æ°ãã€ã³ã©ã€ã³åã§ããŸããã ãããã£ãŠããã®éä»®æ³å®è£
ã¯ããé«éã«åäœããã¯ãã§ãã ãããã¡ã€ã«ããŠèª¿ã¹ãŠã¿ãŸãããã

ãã®æé©åã«ãããããã©ãŒãã³ã¹ã¯ã»ãšãã©å€åããŸããã§ããïŒ6.961ãã6.963ããªç§ã ããã¯ãã³ãŒãã0.002ããªç§é
ããªã£ãããšãæå³ããŸããïŒ ãŸã£ãããããŸããã ãã®éãã¯ãã·ã¹ãã ã®ãã€ãºèæ¯ã«èµ·å ããå¯èœæ§ããããŸããããã¯ãå€ãã®ã¿ã¹ã¯ãåæã«å®è¡ããOSãå®è¡ããŠããããŒãœãã«ã³ã³ãã¥ãŒã¿ãŒã§ãïŒTwitterãã£ãŒãã®æŽæ°ãã¡ãŒã«ã®ãã§ãã¯ãéãå¿ããããŒãžã®ã¢ãã¡ãŒã·ã§ã³GIFã®æŽæ°ïŒã OSãå®è¡å¯èœã³ãŒãã«ã©ã®ããã«åœ±é¿ããããçè§£ããããã«ã貎éãªWindows Performance AnalyzerããŒã«ã䜿çšã§ããŸãã ãã®ãœãããŠã§ã¢ã¯ãã³ãŒãã®ããã©ãŒãã³ã¹ã衚瀺ããã ãã§ãªããã·ã¹ãã å
šäœãå
šäœçã«è¡šç€ºããŸãã ãã®ãããã³ãŒããçªç¶2åã®é·ãã§åŠçãéå§ããå Žåã¯ãä»ã®èª°ãããããç¯ããŠãããã©ããã確èªããããã»ããµãµã€ã¯ã«ãçã¿ãŸãã ãã«ãŒã¹ã»ããŒãœã³ã®åªããããã°ãèªãããšãã§ããŸãã
ãããã£ãŠãä»®æ³é¢æ°ãåé€ããŠããã³ãŒãã®ããã©ãŒãã³ã¹ã«ã¯ã»ãšãã©åœ±é¿ããŸããã ä»®æ³ããŒãã«ã§ã®æ€çŽ¢åæ°ã®æžå°ãšããå°ãªãåœä»€ã®å®è¡ã«ãããããããããã°ã©ã ã¯åãé床ã§å®è¡ãããŸãã æãå¯èœæ§ãé«ãã®ã¯ãMiracles of Modern Equipmentã§ã-åå²äºæž¬ãšææ©çå®è¡ã¯ããããã³ã°ã ãã§ãªããç¹°ãè¿ãã³ãŒããååŸããå¯èœãªéãè¿
éã«å®è¡ããæ¹æ³ãèŠã€ãåºãã®ã«ãé©ããŠããŸãã
ãã³ãªãŒãããã¹ããŒãåŒçšããã«ã¯ïŒ
ãçŸä»£ã®ãœãããŠã§ã¢æ¥çã®æãé©ãã¹ãææã¯ãããŒããŠã§ã¢æ¥çã®çå®ã§èŠäºãªæåã®æŸæ£ã®ç¶ç¶ã§ããã
ä»®æ³é¢æ°ã¯ç¡æã§ã¯äœ¿çšã§ããªãããšã瀺ããŸãããããã®å Žåãã³ã¹ãã¯ãããããã§ãã
ãŸãšã
ãµã³ãã«ã³ãŒãã®ãããã¡ã€ã«ãäœæããããã«ããã¯ãç¹å®ãããã®åœ±é¿ã軜æžããããšããŸããã ã³ãŒãã倿Žãããã³ã«ããããã¡ã€ã«ãåãããã¡ã€ãªã³ã°ããŠãæªåãããæ¹åããããææ¡ããŸããïŒãšã©ãŒã¯æçšã§ãããããããåŠç¿ããŸãïŒã ãããŠãåæ®µéã§ãã³ãŒãã®å®è¡æ¹æ³ãã¡ã¢ãªãžã®ã¢ã¯ã»ã¹æ¹æ³ãããããçè§£ããŸãã ãã®ãœãªã¥ãŒã·ã§ã³ã¯ãé«ã¬ãã«ã®ã³ãŒããæå°éã«ä¿®æ£ããåäžãã¬ãŒã ã®ã¬ã³ããªã³ã°æéã17ããªç§ãã7ããªç§ã«ççž®ããŸãã ã¡ã¢ãªãé
ããããããŒããŠã§ã¢ãæäœããŠé«éã³ãŒããèšè¿°ããå¿
èŠãããããšãããããŸããã
ã·ãªãŒãºã®ç¬¬3éšã§ã¯ã League of Legendsã§æè¿çºèŠããããã©ãŒãã³ã¹ã®ããã«ããã¯ã®ç¹å®ãåæãããã³æé©åã«ã€ããŠèª¬æããŸãã
