µ¼Óï£ºËæ×ÅÓ²¼þºÍÈí¼þ¼¼ÊõµÄ·¢Õ¹£¬²úÒµ½ç¶ÔÐéÄâÏÖʵ£¨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±Ø½«»áÓиü´óµÄ·¢Õ¹Óë½ø²½£¬×÷Ϊ¼¼Êõ¹¤×÷Õߣ¬ÎÒÃǸüÓ¦¸Ã´Ó×ÔÉíµÄ¼¼Êõר³¤×÷Ϊ³ö·¢µã£¬²ÎÓ뵽м¼Êõ¶ÔÉç»áÓëÉú»îµÄ±ä¸ïÖÐÀ´¡£
|