Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
Web¶ËVR¿ª·¢»ù´¡Ñ§Ï°
 
×÷ÕߣºÕÅǬ À´Ô´£º¼¼ÊõÖ®¼Ò ·¢²¼ÓÚ£º2017-5-4
  1999  次浏览      28
 

µ¼Óï£ºËæ×ÅÓ²¼þºÍÈí¼þ¼¼ÊõµÄ·¢Õ¹£¬²úÒµ½ç¶ÔÐéÄâÏÖʵ£¨Virtual Reality£©Óû§ÌåÑé²úÉúÁËÖØ´óÆÚÍû¡£¼¼ÊõµÄ½ø²½Ò²Ê¹ÎÒÃÇ¿ÉÄÜͨ¹ýÏÖ´úä¯ÀÀÆ÷½èÖú¿ª·ÅWebƽ̨»ñµÃÕâÖÖÓû§ÌåÑé¡£Õ⽫°ïÖúWeb³ÉΪ´´½¨¡¢·Ö·¢ÒÔ¼°°ïÖúÓû§»ñµÃÐéÄâÏÖʵӦÓúͷþÎñÉú̬ϵͳµÄÖØÒª»ù´¡Æ½Ì¨¡£

ÒýÑÔ

2016Äê×îÁî¿Æ¼¼½ç¼¤¶¯µÄ»°Ì⣬ιýÓÚVR»áÈçºÎ¸Ä±äÊÀ½ç¡£Ò»Ð©µçÓ°ÒÑ¿ªÊ¼Éæ×ãVR£¬ÈÃÓû§²»½öÄÜ¿´µ½3DÓ°Ïñ£¬¸üÄÜÒÔ¡°ÒÆÐλ»Ó°¡±Ö®ÊõÉíÁÙÆä¾³£¬´øÀ´Ç°ËùδÓеijÁ½þʽ¹ÛÓ°ÌåÑ飻´ËÍ⣬ÓÎÏ·ÁìÓòÒ²¿ªÊ¼VR»¯£¬Óû§ÔÙÒ²²»ÓÃÈÌÊÜÓÎÏ·°üÀïµ¥Ò»µÄ³¡¾°¡£ÕâЩ¿áìÅЧ¹û´øÀ´Á˾޴óÏëÏó¿Õ¼ä£¬VRÕýÔÚ×ß½üÈËÃǵÄÉú»î¡£È»¶øÏÖʵÊÇ£¬³ýÁËż¶ûÌåÑéϺڿƼ¼µÄÆæÃîÍ⣬VR²¢Ã»ÓÐÕæÕýÆÕ¼°£¬ÔÚ×ʱ¾ºÍÓ²¼þ³§ÉÌ¿ñÈȵı³ºó£¬ÖÊÒÉÉùÒ²´ËÆð±Ë·ü¡£

Ŀǰ£¬ËäÈ»VRÓ²¼þµÄ·¢Õ¹ÒѾ­×ßÉÏÁ˿쳵µÀ£¬µ«ÄÚÈÝÈ´·Ç³£µ¥±¡¡£Ò»²¿VRµçÓ°µÄ³É±¾Ï൱¸ß°º£¬VRÓÎÏ·Ò²²»Ñ·É«¡£ÄÚÈÝ´´×÷³É±¾µÄ¾Ó¸ß²»Ï£¬µ¼ÖÂÁËVRµÄÇú¸ßºÍ¹Ñ¡£ÒªÏëÍÑÏÂÄÇÒ»²ã¸ßÀäµÄ¹ó×廪ÉÑ£¬·ÉÈëѰ³£°ÙÐÕ¼Ò£¬VRÉÐÐè½â¾öÄÚÈݹ©¸øÕâÒ»ÄÑÌâ¡£ÒÔHTML5Ϊ´ú±íµÄWeb¼¼ÊõµÄ·¢Õ¹£¬»ò½«¸Ä±äÕâÒ»½©¾Ö¡£Ä¿Ç°£¬×îеÄGoogle ChromeºÍMozilla Firefoxä¯ÀÀÆ÷ÒѾ­¼ÓÈëÃæÏòHTML5¼¼ÊõµÄWebVR¹¦ÄÜÖ§³Ö£¬Í¬Ê±¸÷·½Ò²ÕýÔÚÆð²Ý²¢³äʵҵ½ç×îеÄWebVR API±ê×¼¡£»ùÓÚWeb¶ËµÄÕâЩÐéÄâÏÖʵ±ê×¼½«½øÒ»²½½µµÍVRÄÚÈݵļ¼Êõ´´×÷³É±¾¼°Ãż÷£¬ÓÐÀûÓÚÊÀ½çÉÏ×î´óµÄ¿ª·¢ÕßȺÌ塪HTML5£¨JavaScript£©¿ª·¢Õß½øÈëVRÄÚÈÝ´´×÷ÁìÓò¡£Õâ²»½öÊÇWeb¼¼Êõ·¢Õ¹Àú³ÌÉϵÄÏÔÖøÍ»ÆÆ£¬Ò²ÎªVRÔì¾ÍÁ˽èÁ¦ÌÚ·ÉµÄÆõ»ú¡£

Web¶ËVRµÄÓÅÊÆ

Web¿ª·¢Õß»ùÊýÅÓ´ó

³ýÁ˼¼ÊõÉϵÄʵÏÖÓÅÊÆ£¬Web»¹ÄܸøVR´øÀ´Ò»¹É¾Þ´óµÄ´´Ð¶¯Á¦£¬ÒòΪËüÓµÓÐ׏㷺µÄÓ¦Ó÷¶Î§ÓëÅÓ´óµÄ¿ª·¢Õß»ùÊý£¬ÄܰïÖúVR¼¼Êõ´òÓ®Ò»³¡ÈËÃñÕ½Õù£¬ÈÃVR²»ÔÙÖ»ÊDzúÒµ´óºàÃǵÄ×ʱ¾ÓÎÏ·£¬¶øÊÇÒÔÆ½Ãñ»¯µÄ×Ë̬£¬½øÈë¹ã´óÓû§ÈÕ³£Éú»îµÄ·½·½ÃæÃæ¡£

ÏàÐżÙÒÔʱÈÕ£¬VRÓ¦ÓûáÏñÏÖÔÚÂúÄ¿½ÔÊǵÄAppÒ»Ñù£¬´óÁ¿µÄVR¿ª·¢Õß½èÖúÓÚWeb¶Ë¿ª·¢µÄµÍÃż÷¶ø´óÁ¿½øÈ룬ͬʱ¸÷ÖÖÏ¡Ææ¹Å¹ÖµÄ´´Òâ²ã³ö²»ÇÐéÄâÏÖʵ³ÉΪµçÉÌÉ̼ұØÐëµÄ¾­ÓªÊֶεȡ£Èôµ½ÁËÕâ¸ö½×¶Î£¬VRÀëÕæÕýµÄ·±ÈÙÒ²¾Í²»Ô¶ÁË¡£

WebVR ¿ª·¢µÄ·½Ê½

ÔÚWebÉÏ¿ª·¢VRÓ¦Óã¬ÓÐÏÂÃæÈýÖÖ·½Ê½£º

HTML5+ Java Scnipt + WebGL + WebVR API

´«Í³ÒýÇæ + Emscripten[1]

µÚÈý·½¹¤¾ß£¬ÈçA-Frame[2]

µÚÒ»ÖÖ·½·¨ÊÇʹÓÃWebGLÓëWebVR API½áºÏ£¬ÔÚ³£¹æWeb¶ËÈýάӦÓõĻù´¡ÉÏͨ¹ýAPIÓëVRÉ豸½øÐн»»¥£¬½ø¶øµÃµ½¶ÔÓ¦µÄVRʵÏÖ¡£µÚ¶þÖÖÊÇÔÚ´«Í³ÒýÇæ¿ª·¢ÄÚÈݵĻù´¡ÉÏ£¬±ÈÈçUnity¡¢UnrealµÈ£¬Ê¹ÓÃEmscripten½«C/C++´úÂëÒÆÖ²µ½Java Scnipt°æ±¾ÖУ¬½ø¶øÊµÏÖWeb¶ËµÄVR¡£µÚÈýÖÖÊÇÔÚ·â×°µÚÒ»ÖÖ·½·¨µÄ»ù´¡ÉÏ£¬×¨ÃÅÃæÏòûÓбà³Ì»ù´¡µÄÆÕͨÓû§À´Éú²úWeb¶ËVRÄÚÈÝ¡£ÔÚ±¾ÎÄÖÐÎÒÃÇÖ÷ÒªÒÔµÚÒ»ºÍµÚÈýÖÖ·½·¨ÎªÀý½øÐÐ˵Ã÷¡£

Web¿É½µµÍVRÌåÑéÃż÷

Web¼¼Êõ²»½öʹ´´×÷VRµÄ³É±¾¸ü¼ÓµÍÁ®£¬¶øÇÒ´ó´ó½µµÍ¼¼ÊõÃż÷¡£Web VRÒÀÍÐÓÚWebGL¼¼ÊõµÄ¸ßËÙ·¢Õ¹£¬ÀûÓÃGPUÖ´ÐмÆËãÒÔ¼°ÓÎÏ·ÒýÇæ¼¼ÊõÕë¶ÔоƬ¼¶µÄAPIÓÅ»¯£¬Ìá¸ßÁËͼÐÎäÖȾ¼ÆËãÄÜÁ¦£¬´ó´ó½µµÍ¿ª·¢Õß½øÈëVRÁìÓòµÄÃż÷£¬Í¬Ê±Web VR»¹¿ÉÒÔ¸üºÃµØ½áºÏÔÆ¼ÆËã¼¼Êõ£¬²¹×ãVRÖն˵ļÆËãÄÜÁ¦£¬¼ÓÇ¿½»»¥ÌåÑé¡£

¿ÉÒԿ϶¨£¬WebÀ©Õ¹ÁËVRµÄʹÓ÷¶Î§£¬¹ã¸æÓªÏú£¬È«¾°ÊÓÆµµÈÁìÓòÒѾ­Ó¿ÏÖÒ»Åú´´Ð°¸Àý£¬ºÜ¶àÉú»î»¯µÄÄÚÈÝÒ²ÄÉÈëÁËVRµÄ´´×÷Ö®ÖУ¬Èçʵ¾°ÂÃÓΡ¢ÐÂÎű¨µÀ¡¢ÐéÄ⹺ÎïµÈ£¬ÆäÄÚÈÝչʾ¡¢½»»¥¶¼¿ÉÒÔÓÉHTML5ÒýÇæÇáËÉ´´½¨³öÀ´¡£ÕâÎÞÒɸøÆäδÀ´·¢Õ¹´øÀ´¸ü¶àÏëÏó¿Õ¼ä¡£

¿ª·¢Web¶ËµÄVRÄÚÈÝ

½ÓÏÂÀ´ÎÒÃÇͨ¹ýʵ¼ù²Ù×÷À´ÕæÕýÖÆ×÷һЩWeb¶ËµÄVRÄÚÈÝ£¬ÌåÑéWebVRµÄ±ã½ÝÓÅÊÆ¡£ÎÒÃÇÖªµÀ£¬Ðí¶àVRÌåÑéÊÇÒÔÓ¦ÓóÌÐòµÄÐÎʽ³ÊÏֵģ¬ÕâÒâζ×ÅÄãÔÚÌåÑéVRǰ£¬±ØÐë½øÐÐËÑË÷ÓëÏÂÔØ¡£¶øWeb VRÔò¸Ä±äÁËÕâÖÖÐÎʽ£¬Ëü½«VRÌåÑé°á½øÁËä¯ÀÀÆ÷£¬Web+VR = WebVR¡£ÔÚ½øÈëʵ¼ù֮ǰ£¬ÏÂÃæÏÈÀ´·ÖÎöÒ»ÏÂWebVRʵÏֵļ¼ÊõÏÖ×´¡£

ʹÓÃA-Frame¿ª·¢VRÄÚÈÝ

Èç¹ûÏëÒԽϵ͵ÄÃż÷ÌåÑéÒ»°ÑWebVR¿ª·¢£¬ÄÇô¿ÉÒÔʹMozVRÍŶӿª·¢µÄA-Frame¿ò¼Ü¡£A-FrameÊÇÒ»¸öͨ¹ýHTML´´½¨VRÌåÑéµÄ¿ªÔ´WebVR¿ò¼Ü¡£Í¨¹ý¸Ã¿ò¼Ü¹¹½¨µÄVR³¡¾°ÄܼæÈÝÖÇÄÜÊÖ»ú¡¢PC¡¢ Oculus RiftºÍHTC Vive¡£MozVRÍŶӿª·¢A-Frame¿ò¼ÜµÄµÄÊÇ£ºÈù¹½¨3D/VR³¡¾°±äµÃ¸üÒ׸ü¿ì£¬ÒÔÎüÒýWeb¿ª·¢ÉçÇø½øÈëWebVRµÄÉú̬¡£WebVRÒª³É¹¦£¬ÐèÒªÓÐÄÚÈÝ¡£µ«Ä¿Ç°Ö»ÓкÜÉÙÒ»²¿·ÖWebGL¿ª·¢Õߣ¬È´ÓÐÊýÒÔ°ÙÍòµÄWeb¿ª·¢ÕßÓëÉè¼ÆÊ¦¡£A-FrameÒª°Ñ3D/VRÄÚÈݵĴ´ÔìȨÁ¦¸³Óè¸øÃ¿¸öÈË£¬Æä¾ßÓÐÈçϵÄÓÅÊÆÓëÌØµã£º

A-FrameÄܼõÉÙÈßÓà´úÂë¡£ÈßÓิÔӵĴúÂë³ÉΪÁ˳¢ÏÊÕßµÄÕϰ­£¬A-Frame½«¸´ÔÓÈßÓàµÄ´úÂë¼õÖÁÒ»ÐÐHTML´úÂ룬Èç´´½¨³¡¾°ÔòÖ»ÐèÒ»¸ö<a-scene> ±êÇ©¡£

A-FrameÊÇרΪWeb¿ª·¢ÕßÉè¼ÆµÄ¡£Ëü»ùÓÚ DOM£¬Òò´ËÄÜÏñÆäËûWebÓ¦ÓÃÒ»Ñù²Ù×÷3D/VRÄÚÈÝ¡£µ±È»£¬Ò²ÄܽáºÏbox¡¢d3¡¢ReactµÈJavaScript ¿ò¼ÜÒ»ÆðʹÓá£

A-FrameÈôúÂë½á¹¹»¯¡£Three.js´úÂëͨ³£ÊÇËÉÉ¢µÄ£¬A-FrameÔÚThree.jsÖ®ÉϹ¹½¨ÁËÒ»¸öÉùÃ÷ʽµÄʵÌå×é¼þϵͳ£¨entity-component-system£©¡£ÁíÍ⣬×é¼þÄÜ·¢²¼²¢·ÖÏí³öÈ¥£¬ÆäËû¿ª·¢ÕßÄÜÒÔ HTMLµÄÐÎʽ½øÐÐʹÓá£

WebVR²Ý°¸

WebVRÊÇÔçÆÚºÍʵÑéÐÔµÄJavaScript API£¬ËüÌṩÁË·ÃÎÊÈçOculus Rift¡¢HTC ViveÒÔ¼°Google CardboardµÈVRÉ豸¹¦ÄܵÄAPI¡£VRÓ¦ÓÃÐèÒª¸ß¾«¶È¡¢µÍÑӳٵĽӿڣ¬²ÅÄÜ´«µÝÒ»¸ö¿É½ÓÊܵÄÌåÑé¡£¶ø¶ÔÓÚÀàËÆDevice Orientation Event½Ó¿Ú£¬ËäÈ»ÄÜ»ñȡdz²ãµÄVRÊäÈ룬µ«Õâ²¢²»ÄÜΪ¸ßÆ·ÖʵÄVRÌṩ±ØÒªµÄ¾«¶ÈÒªÇó¡£WebVRÌṩÁËרÃÅ·ÃÎÊVRÓ²¼þµÄ½Ó¿Ú£¬Èÿª·¢ÕßÄܹ¹½¨ÊæÊʵÄVRÌåÑé¡£

WebVR APIĿǰ¿ÉÓÃÓÚ°²×°ÁËFirefox nightlyµÄOculus Rift¡¢ChromeµÄʵÑéÐÔ°æ±¾ºÍSamsung Gear VRµÄä¯ÀÀÆ÷¡£

´úÂëʵÏÖÈçÏ£º

A-frame¿ò¼Ü´úÂë

// ÒýÈëA-Frame¿ò¼Ü  
<script src="./aframe.min.js"></script>
<a-scene>
<!-- ¶¨Òå²¢´´½¨ÇòÌå -->
<a-sphere position="0 1 -1" radius="1" color="#EF2D5E"></a-sphere>
<!-- ¶¨Òå½»´´½¨Á¢·½Ìå -->
<a-box width="1" height="1" rotation="0 45 0" depth="1" color="#4CC3D9" position="-1 0.5 1"></a-box>
<!-- ¶¨Òå²¢´´½¨Ô²ÖùÌå -->
<a-cylinder position="1 0.75 1" radius="0.5" height="1.5" color="#FFC65D"></a-cylinder>
<!-- ¶¨Òå²¢´´½¨µ×°å -->
<a-plane rotation="-90 0 0" width="4" height="4" color="#7BC8A4"></a-plane>
<!-- ¶¨Òå²¢´´½¨»ùÓÚÑÕÉ«µÄÌì¿ÕºÐ±³¾°-->
<a-sky color="#ECECEC"></a-sky>
<!-- ÉèÖò¢Ö¸¶¨ÉãÏñ»úµÄλÖà -->
<a-entity position="0 0 4">
<a-camera></a-camera>
</a-entity>
</a-scene>

ÉÏÊö´úÂëÔÚA-FrameÖÐÖ´ÐеÄЧ¹ûÈçͼ1Ëùʾ¡£

ʹÓÃThree.js¿ª·¢VRÄÚÈÝ

ÉÏÎÄÖÐÎÒÃÇÌáµ½ÁíÍâÁËÒ»ÖÖ¸ü¼Ó¿¿½üµ×²ãͬʱ¸ü¼ÓÁé»îÉú²úWebVRÄÚÈݵķ½·¨£¬¾ÍÊÇÖ±½ÓʹÓÃWebGL+WebVRµÄAPI¡£ÕâÖÖ·½·¨Ïà¶ÔÓÚA-FrameµÄÓÅÊÆÔÚÓÚ¿ÉÒÔ½«VRµÄÖ§³Ö·½±ãµØÒýÈëµ½ÎÒÃÇ×Ô¼ºµÄWeb3DÒýÇæÖУ¬Í¬Ê±¶ÔÓÚµ×²ã£¬ÌØ±ðÊÇäÖȾģ¿é¿ÉÒÔ×ö¸ü¶àÓÅ»¯²Ù×÷´Ó¶øÌáÉýVRÔËÐÐʱµÄÐÔÄÜÓëÌåÑé¡£

Èç¹ûûÓÐ×Ô¼ºµÄWeb3DÒýÇæÒ²Ã»ÓйØÏµ£¬¿ÉÒÔÖ±½ÓʹÓóÉÊìµÄäÖȾ¿ò¼Ü£¬±ÈÈçThree.jsºÍBabylon.jsµÈ£¬ÕâЩ¶¼ÊDZȽÏÁ÷ÐÐÇÒ½ÏΪ³öÉ«µÄWeb3D¶ËäÖȾÒýÇæ£¨¿ò¼Ü£©¡£½ÓÏÂÀ´¾ÍÒÔThree.jsΪÀý£¬ËµÃ÷ÈçºÎÔÚÆäÉÏÖÆ×÷WebVRÄÚÈÝ¡£

Ê×ÏÈ£¬¶ÔÓÚÈκÎäÖȾ³ÌÐòµÄÈý¸öÒªËØÊÇÏàËÆµÄ£¬¼´Êǽ¨Á¢ºÃscene¡¢renderer¡¢camera¡£ÉèÖÃäÖȾÆ÷¡¢³¡¾°ÒÔ¼°ÉãÏñ»úµÄ²Ù×÷ÈçÏ£º

äÖȾ³ÌÐò´úÂë

var renderer = new THREE.WebGLRenderer({antialias: true});  
renderer.setPixelRatio(window.devicePixelRatio);
document.body.appendChild(renderer.domElement);
// ´´½¨Three.jsµÄ³¡¾°
var scene = new THREE.Scene();
// ´´½¨Three.jsµÄÉãÏñ»ú
var camera = new THREE.PerspectiveCamera(60, window.innerWidth / window.innerHeight, 0.1, 10000);
// µ÷ÓÃWebVR APIÖеÄÉãÏñ»ú¿ØÖÆÆ÷¶ÔÏ󣬲¢½«ÆäÓëÖ÷ÉãÏñ»ú½øÐаó¶¨
var controls = new THREE.VRControls(camera);
// ÉèÖÃΪվÁ¢×Ë̬
controls.standing = true;
// µ÷ÓÃWebVR APIÖеÄäÖȾ¿ØÖÆÆ÷¶ÔÏ󣬲¢½«ÆäÓëäÖȾÆ÷½øÐаó¶¨
var effect = new THREE.VREffect(renderer);
effect.setSize(window.innerWidth, window.innerHeight);
// ´´½¨Ò»¸öÈ«¾ÖµÄVR¹ÜÀíÆ÷¶ÔÏ󣬲¢½øÐгõʼ»¯µÄ²ÎÊýÉèÖÃ
var params = {
hideButton: false, // Default: false.
isUndistorted: false // Default: false.
};
var manager = new WebVRManager(renderer, effect, params);

ÉÏÊö´úÂë¼´Íê³ÉÁËäÖȾǰµÄ³õʼ»¯ÉèÖ᣽ÓÏÂÀ´ÐèÒªÏò³¡¾°ÖмӾßÌåµÄÄ£ÐͶÔÏó£¬Ö÷Òª²Ù×÷ÈçÏÂËùʾ£º

Ä£ÐͶÔÏó´úÂë

function onTextureLoaded(texture) {  
texture.wrapS = THREE.RepeatWrapping;
texture.wrapT = THREE.RepeatWrapping;
texture.repeat.set(boxSize, boxSize);
var geometry = new THREE.BoxGeometry(boxSize, boxSize, boxSize);
var material = new THREE.MeshBasicMaterial({
map: texture,
color: 0x01BE00,
side: THREE.BackSide
});
// Align the skybox to the floor (which is at y=0).
skybox = new THREE.Mesh(geometry, material);
skybox.position.y = boxSize/2;
scene.add(skybox);
// For high end VR devices like Vive and Oculus, take into account the stage
// parameters provided.
setupStage();
}
// Create 3D objects.
var geometry = new THREE.BoxGeometry(0.5, 0.5, 0.5);
var material = new THREE.MeshNormalMaterial();
var targetMesh = new THREE.Mesh(geometry, material);
var light = new THREE.DirectionalLight( 0xffffff, 1.5 );
light.position.set( 10, 10, 10 ).normalize();
scene.add( light );
var ambientLight = new THREE.AmbientLight(0xffffff);
scene.add(ambientLight);

var loader = new THREE.ObjectLoader();
loader.load('./assets/scene.json', function (obj){
mesh = obj;
// Add cube mesh to your three.js scene
scene.add(mesh);
mesh.traverse(function (node) {
if (node instanceof THREE.Mesh) {
node.geometry.computeVertexNormals();
}
});
// Scale the object
mesh.scale.x = 0.2;
mesh.scale.y = 0.2;
mesh.scale.z = 0.2;
targetMesh = mesh;
// Position target mesh to be right in front of you.
targetMesh.position.set(0, controls.userHeight * 0.8, -1);
});

×îºóµÄ²Ù×÷±ãÊÇÔÚrequestAnimationFrameÉèÖøüС£ÔÚanimateµÄº¯ÊýÖУ¬ÎÒÃÇÒª²»¶ÏµØ»ñÈ¡HMD·µ»ØµÄÐÅÏ¢ÒÔ¼°¶Ôcamera½øÐиüС£

RequestanimationframeÉèÖøüдúÂë

// Request animation frame loop function  
var lastRender = 0;
function animate(timestamp) {
var delta = Math.min(timestamp - lastRender, 500);
lastRender = timestamp;
// Update VR headset position and apply to camera.
//¸üлñÈ¡HMDµÄÐÅÏ¢
controls.update();
// Render the scene through the manager.
//½øÐÐcamera¸üкͳ¡¾°»æÖÆ
manager.render(scene, camera, timestamp);
requestAnimationFrame(animate);
}

×îºó£¬³ÌÐòÔËÐеÄЧ¹ûÈçͼ2Ëùʾ£¬¿ÉÒÔÖ±½ÓÔÚÊÖ»úÉÏͨ¹ýVRģʽ²¢ÅäºÏGoogle Cardboard¼´¿ÉÌåÑéÎÞÐèÏÂÔØµÄVRÄÚÈÝ[3]¡£

ÉÏÊöʾÀýÖеĴúÂëʵÏÖ¿É´Ó[4]ÖÐÏÂÔØ¡£

¾­Ñé

ͨ¹ýÉÏÊö½éÉÜÎÒÃÇ»ù±¾¿ÉÒÔʵÏÖÒ»¸ö¾ßÓгõ²½½»»¥ÌåÑéµÄWeb¶ËVRÓ¦Ó㬵«ÕâÖ»ÊǵÚÒ»²½£¬µ¥´¿¼¼ÊõÉϵÄʵÏÖ¾àÀëÕæÕýµÄ¿É¹¤³Ì»¯»¹ÓÐÒ»¶¨²î¾à¡£ÒòΪ×îÖÕ¹¤³Ì»¯Ö®ºóÃæÏòÓû§µÄ²úÆ·±ØÐë±È¼¼ÊõÔ­ÐÍÒª¿¼ÂǸü¶à¾ßÌåµÄ¶«Î÷£¬±ÈÈçäÖȾµÄÖÊÁ¿¡¢½»»¥µÄÁ÷³©¶È¡¢ÐéÄ⻯µÄ³Á½þ¶ÈµÈ£¬ÕâЩ¶¼×îÖÕ¾ö¶¨Óû§ÊÇ·ñ»á³ÖÐøÊ¹ÓòúÆ·¡¢½ÓÊܲúÆ·ËùÌṩµÄ·þÎñµÈ£¬ËùÒÔ½«ÉÏÊö¼¼ÊõÔÚ¹¤³Ì»¯Ó¦ÓÃ֮ǰ»¹ÓкܶàµÄÓÅ»¯Óë¸Ä½ø¹¤×÷Òª×ö¡£ÒÔÏÂÊǸöÈËÔÚ×öWeb¶ËVRÓ¦Óùý³ÌÖÐÌå»áµÄһЩÐĵþ­Ñ飬·ÖÏí³öÀ´¹©¶ÁÕ߲ο¼¡£

ÒýÇæµÄÑ¡Óá£Èç¹ûÊÇʹÓÃÒÑÓеÄWebGLÒýÇæ£¬Ôò¿É²Î¿¼[5]ÖеÄÎĵµÀ´½øÐÐVR SDK¼¯³É¡£ÕâÀï±ßÐèÒª×öµ½ÒýÇæ²ãÓëVR SDK²ã¼æÈÝ£¬ÒÔ¼°VRģʽÓëÒýÇæµÄ¹¤¾ß²¿·ÖµÄÕûºÏ£¬Ò²¿ÉÒԲο¼×ÀÃæÒýÇæÈçUnity3DºÍUnrealÔÚVR SDK¼¯³ÉÉϵĿª·¢Ä£Ê½¡£Èç¹ûÑ¡ÓõÚÈý·½µÄWebGLÒýÇæÔòÓÐThree.js»òBabylon.jsµÈ¿ÉÑ¡£¬ÕâЩÖ÷Á÷µÄWebGLÒýÇæ¶¼ÒѾ­£¨²¿·Ö¹¦ÄÜ£©¼¯³ÉÁËVR SDK¡£

µ÷ÊÔµÄÉ豸¡£µ÷ÊÔWeb¶ËµÄVRÓ¦ÓÃͬÑùÐèÒªÓоßÌåµÄVRÉ豸µÄÖ§³Ö¡£¶ÔÓÚ×ÀÃæWebMÄÚÈÝ»¹ÊÇÒª¾¡Á¿Ê¹ÓÃHTC Vive»òOculusµÈÇ¿³Á½þ¸ÐVRÉ豸¡£¶ÔÓÚÒÆ¶¯WebÓ¦Óã¬ÓÉÓÚAndroidƽ̨Éϵĸ÷ä¯ÀÀÆ÷µÄ²îÒì½Ï´ó£¬±íÏÖÒ²»á²»Ì«Ò»Ö£¬ËùÒÔ½¨ÒéʹÓÃiOSÉ豸½øÐпª·¢Óëµ÷ÊÔ£¬µ«ÊÇÔÚ×îÖÕ·¢²¼Ç°ÈÔÒª¶Ô¸ü¶àµÄAndnoidÉ豸½øÐÐÊÊÅäÐÔ²âÊÔÓëÓÅ»¯¡£

ÐÔÄܵÄÓÅ»¯¡£ÔÚWeb¶Ë×öÈýάµÄ»æÖÆÓëäÖȾ£¬ÐÔÄÜ»¹ÊÇÖ÷Ҫƿ¾±£¬Òò¶øÒª¾¡¿ÉÄܵÄÌá¸ßʵʱäÖȾµÄÐÔÄÜ£¬ÕâÑù²ÅÄÜÓиü¶à×ÊÔ´Áô¸øVR²¿·Ö¡£Ä¿Ç°µÄWebVRÔÚäÖȾʵʱÖв¢Ã»ÓÐÏñ×ÀÃæVR SDKÒ»Ñù¿ÉÒÔµ÷ÓÃÖÚ¶àµÄGPUµ×²ã½Ó¿Ú×öÖîÈçStereo renderingµÈÉî²ã´ÎµÄÓÅ»¯£¬Òò¶ø¶ÔÐÔÄܵÄÕ¼Óû¹Êǽ϶ࡣ

ÒÑÖªµÄÎÊÌ⡣Ŀǰ£¬WebVRÈÔÈ»²»Ì«Îȶ¨£¬»¹»áÓÐÖî¶àµÄBug£¬±ÈÈçijЩÇé¿öÏ»áÓÐÉ豸¸ú×Ù¶ªÊ§µÄÇé¿ö£¬¶øÇÒЧÂÊÒ²²»ÊÇÌ«¸ß¡£´ó¶àÊýWebVRÓ¦ÓÿÉÒÔ×÷ΪºóÆÚ²úÆ·µÄ´¢±¸ºÍÔ¤ÑУ¬µ«ÒªÍƳöÕæÕý¿É¹©Óû§Ê¹Óò¢Á÷³©ÌåÑéµÄ²úÆ·£¬»¹ÊÇÓнϳ¤µÄ·Ҫ×ß¡£

×ܽá

Ðí¶àÈ˽«¼´½«¹ýÈ¥µÄ2016³ÆÎªVRÔªÄ꣬ÔÚÕâÒ»ÄêÖÐVRµÄÈ·¾­ÀúÁËÍ»·ÉÃͽøµÄ·¢Õ¹£¬ÌåÏÖÔÚ¼¼ÊõÓëÉú̬µÈ¸÷¸ö·½Ãæ¡£ÔÚеÄ2017Ä꣬ÏàÐÅVR±Ø½«»áÓиü´óµÄ·¢Õ¹Óë½ø²½£¬×÷Ϊ¼¼Êõ¹¤×÷Õߣ¬ÎÒÃǸüÓ¦¸Ã´Ó×ÔÉíµÄ¼¼Êõר³¤×÷Ϊ³ö·¢µã£¬²ÎÓ뵽м¼Êõ¶ÔÉç»áÓëÉú»îµÄ±ä¸ïÖÐÀ´¡£

   
1999 ´Îä¯ÀÀ       28
Ïà¹ØÎÄÕÂ

¹È¸è½ÌÄãÈçºÎ¹¹½¨Ò»¸öÓÅÐãµÄÒÆ¶¯ÍøÕ¾
ÈçºÎ¸ßЧµØ¹ÜÀíÍøÕ¾¾²Ì¬×ÊÔ´
¸ßÐÔÄÜÍøÕ¾½¨ÉèµÄ×î¼Ñʵ¼ù
Ïл°ÍøÕ¾×ó²àµ¼º½µÄʵÏÖ
 
Ïà¹ØÎĵµ

ÍøÕ¾½¨Éè·½°¸Á÷³Ì
ÍøÕ¾½¨Éècss½Ì³Ì
ÆóÒµÍøÕ¾½¨ÉèÓëÍÆ¹ã
ÍøÕ¾½¨Éè·½°¸Êé
Ïà¹Ø¿Î³Ì

Éè¼ÆÄ£Ê½Ô­ÀíÓëÓ¦ÓÃ
´ÓÐèÇó¹ý¶Éµ½Éè¼Æ
Èí¼þÉè¼ÆÔ­ÀíÓëʵ¼ù
ÈçºÎ±àд¸ßÖÊÁ¿´úÂë
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]

Ê®Ììѧ»áDIV+CSS(WEB±ê×¼)
HTML 5µÄ¸ïУº½á¹¹Ö®ÃÀ
½éÉÜ27¿î¾­µäµÄCSS¿ò¼Ü
35¸öÓд´ÒâµÄ404´íÎóÒ³Ãæ
×îÈÝÒ×·¸µÄ13¸öJavaScript´íÎó
Éè¼ÆÒ×Àí½âºÍ²Ù×÷µÄÍøÕ¾

Éè¼ÆÄ£Ê½Ô­ÀíÓëÓ¦ÓÃ
´ÓÐèÇó¹ý¶Éµ½Éè¼Æ
Èí¼þÉè¼ÆÔ­ÀíÓëʵ¼ù
ÈçºÎ±àд¸ßÖÊÁ¿´úÂë
µ¥Ôª²âÊÔ¡¢Öع¹¼°³ÖÐø¼¯³É
Èí¼þ¿ª·¢¹ý³ÌÖ¸ÄÏ

¶«Èí¼¯ÍÅ ´úÂëÖØ¹¹
ij½ðÈÚÈí¼þ·þÎñÉÌ ¼¼ÊõÎĵµ
Öдïµçͨ Éè¼ÆÄ£Ê½Ô­ÀíÓëʵ¼ù
·¨¹úµçÐÅ ¼¼ÊõÎĵµ±àдÓë¹ÜÀí
Î÷ÃÅ×Ó Ç¶ÈëʽÉè¼ÆÄ£Ê½
ÖÐд󶫷½ÈËÊÙ ¼¼ÊõÎĵµ±àд