FBXLoaderã¯FBXããã¹ã圢åŒã®ã¿ããµããŒãããŸããïŒ
[]..ã
[x]ããããã¹ãŠ
[ ] ã€ã³ã¿ãŒããããšã¯ã¹ãããŒã©
[x]ããããã¹ãŠ
ã¯ãã çŸåšã FBXLoader
ã¯ããŒãžã§ã³7ã®ASCII圢åŒã®ã¿ããµããŒãããŠããŸãã
Three.jsããŒãžã§ã³ïŒr77
ã©ãããŠïŒ
/ ping @yamahigashi
ã©ãããŠïŒ
åç §ãªãŒãã³ãœãŒã¹å®è£ ããªãã®ã§ïŒ ããªãããããç¥ã£ãŠãããªããç§ã¯ãããèŠãããšæããŸãã
ãããåŸ ã£ãŠãç§ã¯ããããã€ããªã«ã€ããŠã ãšæã£ãã v7ããåã®ASCIIFBXã®å Žåãããã«ã³ãŒã
ãã€ããªFBXããŒãµãŒãäœæããããŸãã¯äœæããŠãã人ã¯ããŸããïŒ
ããã§ãªããã°ãç§ã¯ãããäœãããšããŠãããããªæ°ãããŸã...
ãããè¡ãã«ã¯ãªããŒã¹ãšã³ãžãã¢ãªã³ã°ã倧奜ãã§ãïŒãããŠããããåçŽãªã¿ã°ã§ããã°å¹žéãããããŸãããããã¹ãŠã®ããŒã¿åãäžæã«ã·ãªã¢ã«åããå Žåã¯ãé©åã§ãïŒã¢ãã«ããšã«1ã€ã®æ°å€ã埮調æŽããŠä¿åããå¿ èŠããããŸãäžåºŠã«äœãå€ãã£ããã確èªããŸãã
ã¢ããã€ã¹ãããããšãã
ãã®ãµã€ããèŠãŠãFBXãã€ããªããŒãµãŒãäœæããããšã«æåããŸããã
https://code.blender.org/2013/08/fbx-binary-file-format-specification/
ãªããžã§ã¯ããäœãObjectParserãäœã£ãŠã¿ãŸã
次ã®ãã€ããªããŒãµãŒã®çµæããã
ãããããã誰ãããã§ã«å°çãéãæããŸããããããŠã¹ããã¯ããããŸãïŒ
https://banexdevblog.wordpress.com/2014/06/23/a-quick-tutorial-about-the-fbx-ascii-format/
ãã®ãªã³ã¯ããããè¡ãã®ã«çŽ æŽããããã®ã ãšæããŸãã
@takahiroxæ°ããããŒãµãŒãTHREE.PLYLoader
ãããªåæ§ã®æ§é ãæã€ãšããã§ããã ãã®å®è£
ã§ã¯ãASCIIãŸãã¯ãã€ããªå
¥åããããŒã¿ã解æããåŸã«THREE.BufferGeometry
ãªããžã§ã¯ããäœæããããã®çµ±äžããžãã¯ã䜿çšããŸãïŒã¡ãœããhandleElement
䜿çšæ³ãåç
§ïŒã
ããããŸããããã£ãŠã¿ãŸãã ãããŠããããMMDLoader
ã«ã䜿çšã§ãããã©ãããèããŠããŸãã
ãšããã§ãFBXãã€ããªåœ¢åŒãããŒãžã§ã³7ããäžã§ãåããŸãŸã§ãããã©ãããããã®èª°ããç¥ã£ãŠããŸããïŒ
äœãæãã€ããŸããã
ãã¶ã@mrdoobã¯ç¥ã£ãŠããŸããïŒ
@takahiroxãã€ããª
ãŸã âŠãããããããŸãïŒ
@takahiroxæŽæ°ã¯ãããŸãã:)ïŒ ããããšãïŒ
ç³ãèš³ãããŸããããæè¿å¿ããã§ã...ãããããã«ïŒ
@takahiroxçŽ æŽããã\ o /
4æããåã³FBXãã€ããªããŒãµãŒã®äœæ¥ãéå§ããŸãã
誰ããæ¥ãã§ãããªãLMKã
@takahiroxå ±æããã®ã
ããã«ã¡ã¯@takahiroxç§ã¯å®éã«æ¥ãã§ããŸããããã«é¢ããæŽæ°ã¯ãããŸããïŒ ç§ã¯å¯èœãªéãå©ããããšãã§ããŸãããããã¯ãã¹ãŠç§ã«ãšã£ãŠãŸã æ°ããããšã§ãã
ç§ã¯ããã«ã€ããŠåã³åãçµã¿å§ãããšããã§ãã
å°ãªããšãããããå
±æããã«ã¯ãŸã æ°é±éå¿
èŠã§ãã
äœé±éã ãšæããŸããïŒ
ããŒããå€å2ã3é±éïŒ
奜å¥å¿ãããéçºäœæ¥ã®äžéšãåŸæŽããããšãã§ããã°ãããã¯1é±éããããã§è¡ãããšãã§ããŸããïŒ
ãŸããçŽæã¯ã§ããŸãããããã£ãŠã¿ãŸãã
å
±æã§ããç¹å®ã®ã¢ãã«ããŒã¿ã¯ãããŸããïŒ
åèãšããŠåœŒããšäžç·ã«åãããã§ãã
testfile.fbx.zip
ããã¯ãããã圹ç«ã€å Žåã«å¿
èŠãªãã®ãšäŒŒãŠããŸã
ãã®é...
https://with.in/watch/under-neon-lights/ã§ã¯ããã¬ãŒã³ããã¹ãã®FBXã䜿çšããŸãããããµãŒããŒãgzipã§å§çž®ããããã«æ¡åŒµåã.fbx.txtã«å€æŽããŸããã ãŸãã FBXLoader2
ããªãæé©åããŸããã ããã¯ããªããŸãšããªã¯ãŒã¯ãããŒã«ãªã£ãŠããŸããŸããã
FBXLoader
ãFBXLoader2
ãµããŒãããŠããªããã®ãããã®ãââããããšããã§ã«çœ®ãæããããšãã§ããã®ã ããã...
@ kyle-larsonïŒ
è£è¶³ïŒFBXã®äŸã§ããã§ã«FBXLoader2
ã䜿çšããŠããŸãã
@mrdoob FBXLoaderãšFBXLoader2ã®å¯äžã®éãã¯ãã€ã³ããã¯ã¹ãããã¡ã®äœ¿çšã§ãã FBXLoader2ã¯ã€ã³ããã¯ã¹ãããã¡ã䜿çšããŸããã ãã以å€ã«ãFBXLoader2ã«ã¯ä»¥åã®ããŒããŒã®ãã¹ãŠã®æ©èœãå«ãŸããŠããå¿ èŠããããŸãã
ããïŒ ããã亀æããæãæ¥ãŸããð
ãã®äººã«äœãæŽæ°ã¯ãããŸããïŒ ã§ããéããæäŒããããŠããã ããŸãã
testfile.fbx.zipã®ããã¹ããã¡ã€ã«ããŒãžã§ã³ã¯ãããŸããïŒ
æ¯èŒãããã
ãã€ããªããŒãµãŒã®é²è¡ç¶æ³...
@ adam-clarey
ã¢ãã«ã®ã¹ã¯ãªãŒã³ã·ã§ãããå
±æã§ããŸããïŒ
ããã¹ããã¡ã€ã«ã§ããThree.jsã«ããŒãã§ããŸããã§ããã
å¥ã®ã¢ãã«ã®ã¹ã¯ãªãŒã³ã·ã§ãã...
ã¢ãã«ïŒ https ïŒ
æ Œå¥œè¯ãïŒ ð
çãããããããšãããããŸããïŒ
ããã«ã¹ã¯ãªãŒã³ã·ã§ãããã¢ããããŒãããŠã¿ãŸãã åºæ¬çã«ãç§ã®ãŠãŒã¹ã±ãŒã¹ã¯ããããªã¢ã«ç»åãšã¢ãã«ã1ã€ã®ãã¡ã€ã«ã«ãã³ãã«ã§ããããšã§ãã
ããã¯ãfbxã«çŒãä»ããããç»åçŽ æãšãBlenderã§ã©ã®ããã«èŠãããã®ç»åã䌎ãåçŽãªãããã¯ã§ãã
ã€ãŸãããã¯ã¹ãã£ç»åããŒã¿ã¯fbxãã¡ã€ã«ã«ããå¿ èŠããããŸããïŒ
ã¯ãã ãã®ã¢ãã«ã誀ã£ãŠãšã¯ã¹ããŒãããå¯èœæ§ããããŸã
fbxãã€ããªããŒã¿ã§ç»åããŒã¿ãèŠã€ãããŸãã...
çŒãä»ããã¯ã¹ãã£ç»åã®ããŒã¿ä»æ§ããåç¥ã®æ¹ãããã£ããããŸããããç¥ãããã ããã
å€åãããè©ŠããŠã¿ãŠãã ãã
block2.fbx.zip
ãŸã èŠã€ãããŸãã...
ãããã®ãã¡ã€ã«ã¯ä»ã®ãã¥ãŒã¢ã«ããŒãã§ããŸããïŒ
çŒããã¯ã¹ãã£ç»åã®ããŒã¿ä»æ§ããåç¥ã®æ¹ãããã£ããããŸããããç¥ãããã ããã
ãã¬ã³ããŒãš3dsmaxã§block2.fbx.zip
ãéãããšããŸããã ã©ã¡ãããã¡ã€ã«åã®ã¿ã衚瀺ããç»åã¯è¡šç€ºããŸããã ãã¡ã€ã«ã«ã¯.../Users/adamclarey/Documents/burger-screen.jpg
ãžã®åç
§ãããªãããã§ãã
ã¯ããç§ã®ããŒãµãŒã¯ãã¡ã€ã«åãæœåºããŸãããç»åããŒã¿ã¯æœåºããŸããã
Okã ç§ã¯æããã«äœãééã£ãããšãããŠããã Blenderã¯äœ¿çšããã®ã«æãçŽæçãªã¢ããªã§ã¯ãããŸããã ç§ã¯äœãä»ã®ãã®ãè©ŠããŠã¿ãŸã
ç»åããŒã¿ã3Dãšã¯ã¹ããŒã/ã€ã³ããŒã圢åŒã«ãã€ã¯ã§ãããšã¯èããããšããããŸããïŒãã ãããªãœãŒã¹ãžã®çžå¯Ÿãã¹ã®ã¿ïŒã
ãããå¯èœã§ããïŒ
ç§ã¯ã¡ããã©æ°ã¥ããŸããïŒããã¯å¯èœã§ãã
ãã®ãããªãã¹ããã¡ã€ã«ãäœæããŠãããã«æçš¿ããŸãã
çŽ æŽããããã®ã
ãã®FBXã¯3dsmaxã§äœæããããã¡ãã£ã¢ã®åã蟌ã¿ããªãã·ã§ã³ã䜿çšããŠãšã¯ã¹ããŒããããŸããã
TestcubeWithImage.zip
3ds maxã®ã¹ã¯ãªãŒã³ã·ã§ããïŒ
ãã¬ã³ããŒã§éãïŒå¥ã®ãã·ã³ã§ïŒïŒ
ãã¬ã³ããŒã§ã¯ããããŸã§ãã€ã¯åŠçãããç»åãå«ãFBXããšã¯ã¹ããŒããããªãã·ã§ã³ãçºèŠããŸããã§ããã ããããããšã¯ã¹ããŒãããåã«ããŒãã³ã°ãè¡ãå¿ èŠããããŸããïŒ -ç§ã¯ãã¬ã³ããŒã®çµéšããããŸããã
@takahiroxãããåããã¡ã€ã«ã§ã3ds maxã§äœæãããŠããŸããããã¡ãã£ã¢ã®åã蟌ã¿ããªãã·ã§ã³ãªãã§ãšã¯ã¹ããŒããããŠããŸãã
æ¯èŒããã®ã«é¢çœããããããŸããã
ãã¹ãçšã«ä»ã®ãã¡ã€ã«ãå¿ èŠãªå Žåã¯ãããã«æçš¿ããŠãã ããã
TestcubeWithImage.fbxã®Video.ID.properties.Contentããããã£ã®äžã«ç»åããŒã¿ã®ããã«èŠããããŒã¿ãèŠã€ãããŸããã
ããã¯ããã®ã¹ã¬ããã«æçš¿ãããä»ã®ãã€ããªãã¡ã€ã«ã«ã¯ååšããŸããã
詳ããèŠãŠãããŸã...
é²æç¶æ³...ð
ã ãããåã蟌ãŸãããã¯ã¹ãã£ã¯ä»ã¯å€§äžå€«ã«èŠããŸãã
ã¢ãã¡ãŒã·ã§ã³ãå«ããã€ããªfbxãå
±æã§ãã人ã¯ããŸããïŒ
ããŸããŸãªçš®é¡ã®ããŒãã¬ãŒã ã¢ãã¡ãŒã·ã§ã³ãå«ã3ã€ã®ãã¹ããã¡ã€ã«ã次ã«ç€ºããŸãã
AnimationTranslate.zip
AnimationMorph.zip
AnimationBones.zip
ããããæ®å¿µãªãããç°ãªãããã°ã©ã ã§åãããã«åäœãããã¡ã€ã«ãäœæããããšã¯ã§ããŸããã§ããã
ãããã¯ãã¹ãŠ3dsmaxã§äœæãããŸãã
@takahiroxç§ãã¡ã®ããŒã ã¯ããã°ããã®éãthree.jsãã€ããªFBXããŒãµãŒãæ¢ããŠããŸããããããã¯çŽ æŽãããã§ããïŒ ãœãŒã¹ãã©ãã§ãå©çšã§ããããã«ããŸãããïŒ ç§ãã¡ã®ç®çã®ããã«ãFBXããã¡ãã·ã¥ãæ³ç·ãUVãããã³ããžã¥ã¢ã«ã·ãŒã³ãæœåºã§ããå¿ èŠããããŸãããããã¯æ£åžžã«æ©èœããŠããããã§ãã
ãœãŒã¹ãå©çšã§ããå Žåã¯ããããã©ãã«ããããæããŠããã ããã°å¹žãã§ãã
çŽ æŽãããä»äºãããããšãïŒ
https://github.com/takahirox/three.js/blob/FixLoaderBinaryParser/examples/js/loaders/FBXLoader2.js
ããã¯éåžžã«äžæçãªãã®ã§ããããšã«æ³šæããŠãã ããã
ã³ãŒããã¯ãªãŒã³ã¢ããããŠæé©åããå¿
èŠããããŸãã
ãããŠãæ©èœã¯ä»å£ããŠããå¯èœæ§ããããŸãã
@takahirox泚æïŒããŸããŸãªããã°ã©ã ã§ãã¹ãããåŸã以åã®ã³ã¡ã³ããæŽæ°ããŸããã
@jostschmithals
ããããšãã
翻蚳ãšããŒã³ã¯çŸåšæ©èœããŠããããã§ãã
FBXLoaderã¯ãASCIIãã¡ã€ã«ã䜿çšããŠãã¢ãŒãã¢ãã¡ãŒã·ã§ã³ããŸã ãµããŒãããŠããŸããã
ããã¯ç§ãã¡ã®æ¬¡ã®ä»äºã«ãªãã§ããã....
three.jsãããžã§ã¯ãã«testcubeãã¡ã€ã«ãããŒãããããšããŸããããäœãããŒããããŸããã
FBXTreeãªããžã§ã¯ãã調ã¹ãåŸãç»åãã¡ã€ã«ã«404ã衚瀺ãããŸãããããã§ã絶察ãã¡ã€ã«ãã¹ãžã®åç
§ãä¿æãããŠããããšãããããŸãã
ïŒå ã®jpgãå©çšã§ããªããã·ã³ã§ïŒãã¹ããããšãããæ£åžžã«åäœããŸãã
泚ïŒäœ¿çšããå¿
èŠããããŸã
https://github.com/takahirox/three.js/blob/FixLoaderBinaryParser/examples/js/loaders/FBXLoader2.js ã
ãã ããããŒããŒã¯åã«THREE.FBXLoader
ãšåŒã°ããŸãïŒããŒãžã§ã³çªå·2ã¯ãããŸããïŒã
ãããç§ã䜿ã£ãŠãããã®ã§ãã ããã«èª¿æ»ããŸã
TestcubeWithImage.fbxããè©Šããã ãã
Testcube.fbxã«ã¯ç»åããŒã¿ãå«ãŸããŠããªãããã404ãååŸããå¿
èŠããããŸã
@æ£åžžã«åäœããŠããç§ã®ãã¹ãã§ã¯ã GET ... 404
ã¡ãã»ãŒãžãé€ããŠã@ adam-clareyãšãŸã£ããåãã³ã³ãœãŒã«åºåãåŸãããŸãã
ãšããã§ïŒç§ã¯Windows10ã§ãã¹ãããŸããã
é²æ...
ã¢ãã¡ãŒã·ã§ã³ã¯æ£åžžã«æ©èœããŠããããã§ãð
ã¢ãã«ã®ããŒãã«äœ¿çšããŠããã³ãŒãã貌ãä»ããŠããã ããŸããïŒ ã©ãããããããããã¯ç§ã®ããã«ããŒããããŸããã
Testcubeãã¡ã€ã«ãwebgl_loader_fbx.htmlã®äŸã«çœ®ãæããŠã¿ãŸãããïŒFBXLoader2.jsãã¡ã€ã«ã亀æããŠããŸãïŒãããã§ãã¢ãã«ãã¬ã³ããªã³ã°ãããŸããã
@ adam-clareyããã¯ãŸãã«ç§ãããããšã§ããïŒãã¡ãããã¢ãã¡ãŒã·ã§ã³ãéã¢ã¯ãã£ãåïŒãä»ã®å€æŽãªãã§æ©èœããŸããã
ãªããŠå¥åŠãª...
ãããŠãããã¯ïŒ@takahiroxãææããããã«ïŒããªããTestcubeWithImage.fbxã䜿çšããŠããããšã確èªããŠããã®ã§ããïŒ
ããã«ãšã©ãŒã¡ãã»ãŒãžã¯ãããŸããïŒ
ã©ã®OSã䜿çšããŠããŸããïŒ
ãã¹ãŠã®ãã©ãŠã¶ã§åãã§ããïŒ
AAHHHããªããŠãã£ãïŒ æåã®testcubeãã¡ã€ã«ãèŠã€ãããŸã§äžã«ã¹ã¯ããŒã«ããŸããã
ç§ã®ééã
ããïŒ ãªãŒããã¹ã¯ãããšã¯ã¹ããŒããããå€éš.fbxã¢ãã«ãèªã¿èŸŒãããšãããšããã®ãšã©ãŒãçºçããŸãã 誰ããç§ã«ããã«å¯Ÿãã解決çãäžããããšãã§ããŸãã
ããããšãããããŸããïŒ
https://github.com/takahirox/three.js/blob/FixLoaderBinaryParser/examples/js/loaders/FBXLoader2.js
ããã¯éåžžã«äžæçãªãã®ã§ããããšã«æ³šæããŠãã ããã
ã³ãŒããã¯ãªãŒã³ã¢ããããŠæé©åããå¿ èŠããããŸãã
ãããŠãæ©èœã¯ä»å£ããŠããå¯èœæ§ããããŸãã
@ hmtri1011
@RicoLiuããã¯
ãããŠãTHREE.FBXLoader2ã䜿çšãããšããšã©ãŒTHREE.FBXLoader2 is not a constructor
webgl_loader_fbx.exampleã䜿çšã§ããŸãã
THREE.FBXLoader
ïŒããŒãžã§ã³çªå·2ãªãïŒ ïŒã䜿çšãããããŠããã¯ããŸãããã¯ãã§ãã
@jostschmithalsç§ã¯ããªãã®æé ã«åŸããæ°ãããšã©ãŒãZlib is not defined
ã¢ãã«ãã¡ã€ã«ãå§çž®ãããŠããããã§ããïŒ
ç§ãåŸããã®ã®å®å
šãªãšã©ãŒ
ãã®è¡ãäŸã«è¿œå ããŸãã
<script src="js/libs/zlib_and_gzip.min.js"></script>
å®äºããå¥ã®ãšã©ãŒã衚瀺ãããŸãã.... :(
äžã§æžããããã«ãã¢ãã¡ãŒã·ã§ã³ãå«ãŸãªãã¢ãã«ãã¡ã€ã«ã§ãµã³ãã«ã³ãŒãã䜿çšããå Žåã¯ãã¢ãã¡ãŒã·ã§ã³ã³ãŒããïŒããŒãã»ã¯ã·ã§ã³ãšã¬ã³ããªã³ã°ã«ãŒãã§ïŒéã¢ã¯ãã£ãåããå¿ èŠããããŸãã
ç§ã¯å¥ã®åé¡ãçµéšããŠããŸãã確ãã«ææã«é¢é£ããŠããŸãã ç§ã®åé¡ã¯ãç¹å®ã®æ¡ä»¶äžã§ãäžéšã®fbxã¢ãã«ãã¬ã³ããªã³ã°ããäžéšãã¬ã³ããªã³ã°ããªãããšã§ãã
åçŸããã«ã¯ïŒ
webgl_loader_fbx.htmlãµã³ãã«ãã¡ã€ã«ã®initïŒïŒã®ããå
åŽã«ã次ã®ã³ãŒããé
眮ããŠç°å¢ãäœæããŸã
var loadSkyDomeAndGroundBowl = function(scene, onLoad, onProgress, onError) {
var pathtop="path/to/top.jpg";
var pathbot="path/to/bottom.jpg";
var radius=40;
var bottomtopfactor=0.1;
var sinkin=0.05;
var texturetop;
var texturebot;
var onTextureLoadTop=function(texture) {
console.log('onTextureLoadTop');
texturetop=texture;
onTextureLoaded();
};
var onTextureLoadBot=function(texture) {
console.log('onTextureLoadBot');
texturebot=texture;
onTextureLoaded();
};
var onTextureProgress=function(xhr) {
console.log('onTextureProgress');
if(onProgress)
onProgress('Loading sky dome / ground bowl texture');
};
var onTextureError=function(xhr) {
console.log('onTextureError');
if(onError)
onError('Error loading sky dome / ground bowl texture');
};
var onTextureLoaded=function() {
console.log('onTextureLoaded');
if(texturetop && texturebot) {
console.log('onTextureLoaded 2');
var geometrytop = new THREE.SphereGeometry( radius*10, 600, 400, 0, Math.PI*2, 0, Math.PI*0.5);
var materialtop = new THREE.MeshBasicMaterial();
materialtop.map = texturetop;
materialtop.side = THREE.BackSide;
var skydome = new THREE.Mesh( geometrytop, materialtop );
skydome.position.y=bottomtopfactor*radius+sinkin;
scene.add( skydome );
var geometrybot = new THREE.SphereGeometry( radius, 60, 40, 0, Math.PI*2, Math.PI*0.5, Math.PI*0.5);
var materialbot = new THREE.MeshBasicMaterial();
materialbot.map = texturebot;
materialbot.side = THREE.BackSide;
var groundbowl = new THREE.Mesh( geometrybot, materialbot );
groundbowl.scale.set(1,bottomtopfactor,1);
groundbowl.position.y=bottomtopfactor*radius+sinkin;
scene.add( groundbowl );
if(onLoad)
onLoad();
}
};
var loader=new THREE.TextureLoader();
loader.load(pathtop, onTextureLoadTop, onTextureProgress, onTextureError);
loader.load(pathbot, onTextureLoadBot, onTextureProgress, onTextureError);
}
ããã¯åºæ¬çã«ã2ã€ã®ç»åã§ã¹ã«ã€ããŒã ãšå°é¢ãè¿œå ããã ãã§ãã
次ã«ãã·ãŒã³ãåæåãããåŸã次ã®ã³ãã³ããå®è¡ããŸããloadSkyDomeAndGroundBowlïŒsceneïŒ;
ãã®æ°ããç°å¢ã§ã¯ã2ã€ã®fbxã¢ãã«ãããŒããããŠæ£åžžã«ã¬ã³ããªã³ã°ãããããšãããããŸãã
ããã§ãxsi_man_skinning.fbxåç §ãTestcudeWithImages.fbxïŒã¢ãã¡ãŒã·ã§ã³ã³ãŒããã³ã¡ã³ãã¢ãŠãïŒã«çœ®ãæãããšãã³ãŒãããŸã£ããã¬ã³ããªã³ã°ãããªãããšãããããŸãã
ä»ã®fbxãã¡ã€ã«ã§ãããã«æ°ã¥ããŸããã ãã€ããªfbxãã¡ã€ã«ã¯ç°å¢ãšäºææ§ããªãããã§ãã
ãŸãã¯ç§ã¯äœãééã£ãããšãããŠããå¯èœæ§ããããŸã...
ïŒã¯ããææ°ã®FBXLoader2ãã¡ã€ã«ã䜿çšããŠããŸãïŒ
ããã¯ç§ã®ãµã³ãã«ã³ãŒãã§ãïŒ
`
<script src="../build/three.js"></script>
<script src="js/controls/OrbitControls.js"></script>
<script src="js/curves/NURBSCurve.js"></script>
<script src="js/curves/NURBSUtils.js"></script>
<script src="js/loaders/FBXLoader2.js"></script>
<script src="js/Detector.js"></script>
<script src="js/libs/stats.min.js"></script>
<script src="js/libs/zlib_and_gzip.min.js"></script>
<script>
if (!Detector.webgl) Detector.addGetWebGLMessage();
var container, stats, controls;
var camera, scene, renderer, light;
var clock = new THREE.Clock();
var mixers = [];
init();
function init() {
container = document.createElement('div');
document.body.appendChild(container);
camera = new THREE.PerspectiveCamera(45, window.innerWidth / window.innerHeight, 1, 2000);
scene = new THREE.Scene();
// grid
var gridHelper = new THREE.GridHelper(28, 28, 0x303030, 0x303030);
gridHelper.position.set(0, - 0.04, 0);
scene.add(gridHelper);
// stats
stats = new Stats();
container.appendChild(stats.dom);
// model
var manager = new THREE.LoadingManager();
manager.onProgress = function (item, loaded, total) {
console.log(item, loaded, total);
};
var onProgress = function (xhr) {
if (xhr.lengthComputable) {
var percentComplete = xhr.loaded / xhr.total * 100;
console.log(Math.round(percentComplete, 2) + '% downloaded');
}
};
var onError = function (xhr) {
console.error(xhr);
};
var loader = new THREE.FBXLoader(manager);
loader.load('models/fbx/accient_2_full.fbx', function (object) {
//object.mixer = new THREE.AnimationMixer(object);
//mixers.push(object.mixer);
//var action = object.mixer.clipAction(object.animations[0]);
//action.play();
scene.add(object);
}, onProgress, onError);
loader.load('models/fbx/nurbs.fbx', function (object) {
scene.add(object);
}, onProgress, onError);
renderer = new THREE.WebGLRenderer();
renderer.setPixelRatio(window.devicePixelRatio);
renderer.setSize(window.innerWidth, window.innerHeight);
renderer.setClearColor(0x000000);
container.appendChild(renderer.domElement);
// controls, camera
controls = new THREE.OrbitControls(camera, renderer.domElement);
controls.target.set(0, 12, 0);
camera.position.set(2, 18, 28);
controls.update();
window.addEventListener('resize', onWindowResize, false);
light = new THREE.HemisphereLight(0xffffff, 0x444444, 1.0);
light.position.set(0, 1, 0);
scene.add(light);
light = new THREE.DirectionalLight(0xffffff, 1.0);
light.position.set(0, 1, 0);
scene.add(light);
//animate();
}
function onWindowResize() {
camera.aspect = window.innerWidth / window.innerHeight;
camera.updateProjectionMatrix();
renderer.setSize(window.innerWidth, window.innerHeight);
}
//
function animate() {
requestAnimationFrame(animate);
if (mixers.length > 0) {
for (var i = 0; i < mixers.length; i++) {
mixers[i].update(clock.getDelta());
}
}
stats.update();
render();
}
function render() {
renderer.render(scene, camera);
}
</script>
`
@jostschmithalsããã«å¯Ÿããæ£ãã解決çãæããŠãã ããã ã¢ãã¡ãŒã·ã§ã³ã³ãŒããç¡å¹ã«ããŠããŸã
@ adam-clareyç§ã¯ããããã¹ãããŸããããããŠããªããç«æ¹äœãèŠãããšãã§ããªãçç±ã¯ãããå°é¢ã®äžã«ããããã§ãïŒããªãããããã«ã¡ã©ã§è»éã«ä¹ããã°ããªãã¯ãããèŠãã¯ãã§ãïŒã ããã«å ããŠããã¹ãŠãããªãã®ã³ãŒãã§ç§ã®ããã«ããŸãåããŠããŸãã
@takahirox ïŒ
ïŒç»åã¯äžã«æ£ãã衚瀺ãããŸãã...ïŒ
@ hmtri1011 animateïŒïŒé¢æ°ãéã¢ã¯ãã£ãåããŸããã ãããã£ãŠãã·ãŒã³ã¯ãŸã£ããã¬ã³ããªã³ã°ãããŸããð
ïŒãã®å Žåããã§ã«ã³ã¡ã³ãã¢ãŠãããè¡ã®ã¿ãéã¢ã¯ãã£ãåããã ãã§ååã§ããïŒ
@jostschmithals tksïŒDä»ã¯åäœããŸã
è¯ãå Žæ@jostschmithals ãããããšãã
ãã¡ã€ã«ãã©ã®ãã€ããªããŒãžã§ã³ã§ãããã¯éèŠã§ããïŒ æ£åžžã«ã¬ã³ããªã³ã°ãããããŒãžã§ã³7400ã®fbxãã¡ã€ã«ããããŸãããããŒãžã§ã³7500ã®fbxãã¡ã€ã«ã§ãšã©ãŒãçºçããŸãã
ãFBXLoaderïŒäžæãªããããã£ã¿ã€ãã
ããã§ãå€æ° 'type'ã¯ç©ºã®æååã§ã
@ adam-clareyfbxã®è©³çŽ°ãªç¥èã¯ãããŸããã ãã®ã¹ã¬ããã«åå ããã®ã¯ãç»åããŒã¿ãã¢ãã«ãã¡ã€ã«ã«ãã€ã¯ã§ãããã©ãã/ã©ã®ããã«äœæã§ããããšãã質åãèå³æ·±ããšæã£ãããã§ãã ããã§ããã®è³ªåã@takahiroxã«è»¢éããããšæããŸãã
> = 7500ã®ä»æ§ã¯<7500ãšã¯å°ãç°ãªãããšãç§ã¯ç¥ã£ãŠããŸãããããŠ
> = 7500ããµããŒãããããã«åãçµãã§ããŸãã
ãã¹ãçšã«ããŒãžã§ã³7500ã®ãã€ããªã¢ãã«ããŒã¿ãå
±æã§ããŸããïŒ
ãããã£ãŠãããã«ãã¹ãããåŸã7200ãš7500ã¯åé¡ãªãããã§ãã
ãã ãã6100ããã³7300ã¯ã¬ã³ããªã³ã°ãããŸããã
house_fs.fbx.zip
DutchHouse.FBX.zip
ASCIIããŒãžã§ã³ã®ãã¡ã€ã«ãå
±æããŸããïŒ
åé¡ããã€ããªåºæã§ãããã©ãããæ確ã«ããããšãã§ããŸãã
ãããŠã FBXLoader
ããã€ããªããµããŒãããããã«ãªã£ãã®ã§ããã®åé¡ã解決ããããšæããŸãïŒãããããŸã å®å
šã§ã¯ãããŸããïŒã
FBXLoader
æ¹åã®ããã«å¥ã®åé¡ãäœæããŸãããã
@takahiroxããã§ããïŒ
@ adam-clarey
ç§ã¯ãã®ãã°ãæã£ãŠãããšæããŸãã
ãFBXLoaderïŒäžæãªããããã£ã¿ã€ãã
ããã§ãå€æ° 'type'ã¯ç©ºã®æååã§ã
FBXLoader.jsã§
ãžã®å€æŽ
while ( ! this.endOfContent( reader ) ) {
var node = this.parseNode( reader, version );
if ( node !== null )
allNodes.add( node.name, node );
else
break;
}
ããã«ã¡ã¯ãã¿ããªã
FBXLoaderãFBXãã¡ã€ã«ããµããŒãããŠããã®ã¯7.0以äžã§ããããšã«æ°ã¥ããŸããã
7.0æªæºã®fbxãã¡ã€ã«ãããŒããããã®ã§ããããã®æ¹æ³ãæããŠãã ããã
ãããç§ã®fbxãã¡ã€ã«ã§ãhttps://github.com/nxhoang/Three.js-Fxb-and-Textures/tree/master/models/fbx
ã©ããããããšãã
ããã§èª¬æã@nxhoangã¯ã6100ïŒãã€ããªïŒãŸãã¯7000ïŒASCIIïŒãè¶ ããFBXããŒãžã§ã³ã®ã¿ããµããŒãããŸãã
å€ãFBXãã¡ã€ã«ã䜿çšããå¿ èŠãããå Žåã¯ãããããæŽæ°ãããïŒ3ds maxãŸãã¯Mayaã«ããŒãããŠãããè¡ãã®ãæé©ã§ãïŒããŸãã¯å¥ã®åœ¢åŒã«å€æããå¿ èŠããããŸãã
æãåèã«ãªãã³ã¡ã³ã
4æããåã³FBXãã€ããªããŒãµãŒã®äœæ¥ãéå§ããŸãã
誰ããæ¥ãã§ãããªãLMKã