Rumah >hujung hadapan web >tutorial js >Cara Membina VR di Web Hari Ini
Untuk memulakan pengembaraan pembangunan anda ke web maya, terdapat tiga cara yang berpotensi untuk melakukan ini:
Takeaways Key
Untuk mencapai adegan 3D yang indah dalam penyemak imbas, kami menggunakan tiga.js, rangka kerja JavaScript yang menjadikannya mudah untuk membuat bentuk dan adegan 3D. Ia mengambil sebahagian besar kerumitan daripada menyusun pengalaman 3D dan membolehkan anda memberi tumpuan kepada apa yang anda cuba sediakan di dalam adegan anda.
Saya telah menulis dua demo di sini di SitePoint yang menggunakan kaedah orientasi peranti:
Jika anda baru untuk tiga.js dan bagaimana untuk menyatukan adegan, saya akan mengesyorkan melihat dua artikel di atas untuk pengenalan yang lebih mendalam ke dalam kaedah ini. Saya akan merangkumi konsep utama di sini, namun ia akan berada di tahap yang lebih tinggi.
Komponen utama masing -masing melibatkan fail JavaScript berikut (anda boleh mendapatkan fail -fail ini dari demo contoh di atas dan juga akan menemui mereka dalam contoh tiga.js muat turun):
<span>function setOrientationControls(e) { </span> <span>if (!e.alpha) { </span> <span>return; </span> <span>} </span> controls <span>= new THREE<span>.DeviceOrientationControls</span>(camera, true); </span> controls<span>.connect(); </span> controls<span>.update(); </span> element<span>.addEventListener('click', fullscreen, false); </span> <span>window.removeEventListener('deviceorientation', setOrientationControls, true); </span><span>} </span><span>window.addEventListener('deviceorientation', setOrientationControls, true); </span> <span>function fullscreen() { </span> <span>if (container.requestFullscreen) { </span> container<span>.requestFullscreen(); </span> <span>} else if (container.msRequestFullscreen) { </span> container<span>.msRequestFullscreen(); </span> <span>} else if (container.mozRequestFullScreen) { </span> container<span>.mozRequestFullScreen(); </span> <span>} else if (container.webkitRequestFullscreen) { </span> container<span>.webkitRequestFullscreen(); </span> <span>} </span><span>}</span>pendengar acara peranti menyediakan nilai alfa, beta dan gamma apabila ia mempunyai peranti yang serasi. Sekiranya kita tidak mempunyai nilai alfa, ia tidak mengubah kawalan kita untuk menggunakan orientasi peranti supaya kita boleh menggunakan kawalan orbit sebaliknya.
Jika ia mempunyai nilai alfa ini, maka kami membuat kawalan orientasi peranti dan memberikan pembolehubah kamera kami untuk mengawal. Kami juga menetapkannya untuk menetapkan adegan kami ke skrin penuh jika pengguna mengetuk skrin (kami tidak mahu menatap bar alamat penyemak imbas ketika dalam VR).
Kawalan orbit
controls <span>= new THREE<span>.OrbitControls</span>(camera, element); </span>controls<span>.target.set( </span> camera<span>.position.x, </span> camera<span>.position.y, </span> camera<span>.position.z </span><span>); </span>controls<span>.noPan = true; </span>controls<span>.noZoom = true;</span>Perkara -perkara utama yang mungkin mengelirukan dari kod di atas adalah Nopan dan Nozoom. Pada asasnya, kami tidak mahu bergerak secara fizikal di sekitar tempat kejadian melalui tetikus dan kami tidak mahu dapat mengezum masuk atau keluar - kami hanya mahu melihat -lihat.
kesan stereo
effect <span>= new THREE<span>.StereoEffect</span>(renderer);</span>Kemudian saiz semula tetingkap, kami mengemas kini saiznya:
effect<span>.setSize(width, height);</span>Di setiap permintaan
itu adalah asas bagaimana gaya orientasi peranti mencapai kerja VR. Ia boleh menjadi berkesan untuk pelaksanaan yang baik dan mudah dengan Google Cardboard, namun ia tidak begitu berkesan pada Oculus Rift. Pendekatan seterusnya jauh lebih baik untuk Rift.
effect<span>.render(scene, camera);</span>
mencari untuk mengakses orientasi alat dengar VR seperti Oculus Rift? WebVR adalah cara untuk melakukannya pada masa ini. WebVR adalah API JavaScript awal dan eksperimen yang menyediakan akses kepada ciri -ciri peranti realiti maya seperti Oculus Rift dan Google Cardboard. Pada masa ini, ia boleh didapati di Firefox setiap malam dan beberapa eksperimen membina krom mudah alih dan kromium. Satu perkara yang perlu diingat ialah spesifikasi masih dalam draf dan tertakluk kepada perubahan, jadi bereksperimen dengannya tetapi tahu bahawa anda mungkin perlu menyesuaikan perkara dari masa ke masa.
secara keseluruhan, API WebVR menyediakan akses kepada maklumat peranti VR melalui:
<span>function setOrientationControls(e) { </span> <span>if (!e.alpha) { </span> <span>return; </span> <span>} </span> controls <span>= new THREE<span>.DeviceOrientationControls</span>(camera, true); </span> controls<span>.connect(); </span> controls<span>.update(); </span> element<span>.addEventListener('click', fullscreen, false); </span> <span>window.removeEventListener('deviceorientation', setOrientationControls, true); </span><span>} </span><span>window.addEventListener('deviceorientation', setOrientationControls, true); </span> <span>function fullscreen() { </span> <span>if (container.requestFullscreen) { </span> container<span>.requestFullscreen(); </span> <span>} else if (container.msRequestFullscreen) { </span> container<span>.msRequestFullscreen(); </span> <span>} else if (container.mozRequestFullScreen) { </span> container<span>.mozRequestFullScreen(); </span> <span>} else if (container.webkitRequestFullscreen) { </span> container<span>.webkitRequestFullscreen(); </span> <span>} </span><span>}</span>
Saya tidak akan masuk ke banyak butiran teknikal di sini (saya akan menutupi ini dengan lebih terperinci dalam artikel SitePoint masa depannya sendiri!), Jika anda berminat untuk mengetahui lebih lanjut, lihat draf editor WebVR. Sebab saya tidak akan terperinci dengannya adalah bahawa terdapat kaedah yang lebih mudah untuk melaksanakan API.
Kaedah yang lebih mudah disebutkan di atas ini untuk melaksanakan API WebVR adalah dengan menggunakan boilerplate webvr dari Boris Smus. Ia menyediakan tahap fungsi asas yang baik yang melaksanakan WebVR dan dengan anggun merendahkan pengalaman untuk peranti yang berbeza. Ia kini merupakan pelaksanaan Web VR yang paling baik yang saya lihat. Jika anda ingin membina pengalaman VR untuk web, ini adalah tempat terbaik untuk bermula!
Untuk mula menggunakan kaedah ini, muat turun boilerplate webvr pada github.
Anda boleh memberi tumpuan kepada mengedit index.html dan menggunakan semua fail dalam set up, atau anda boleh melaksanakan plugin tertentu ke dalam projek anda sendiri dari awal. Jika anda ingin membandingkan perbezaan dalam setiap pelaksanaan, saya telah berhijrah saya memvisualisasikan aliran Twitter dalam VR dengan tiga.js dan contoh nod dari atas ke dalam aliran Twitter yang berkuasa WebVR dalam VR.
Untuk memasukkan projek ini ke dalam diri anda dari awal, fail yang anda inginkan ialah:
Melaksanakannya hanya memerlukan beberapa pelarasan dari kaedah orientasi peranti. Berikut adalah gambaran keseluruhan bagi mereka yang ingin mencuba kaedah ini:
Kawalan VR agak mudah untuk ditubuhkan. Kami hanya boleh menetapkan objek VRControls baru kepada pemboleh ubah kawalan yang kami gunakan sebelum ini. Kawalan orbit dan kawalan orientasi peranti tidak perlu kerana boilerplate kini harus menjaga pelayar tanpa keupayaan VR. Ini bermakna adegan anda masih berfungsi dengan baik di Google Cardboard juga!
<span>function setOrientationControls(e) { </span> <span>if (!e.alpha) { </span> <span>return; </span> <span>} </span> controls <span>= new THREE<span>.DeviceOrientationControls</span>(camera, true); </span> controls<span>.connect(); </span> controls<span>.update(); </span> element<span>.addEventListener('click', fullscreen, false); </span> <span>window.removeEventListener('deviceorientation', setOrientationControls, true); </span><span>} </span><span>window.addEventListener('deviceorientation', setOrientationControls, true); </span> <span>function fullscreen() { </span> <span>if (container.requestFullscreen) { </span> container<span>.requestFullscreen(); </span> <span>} else if (container.msRequestFullscreen) { </span> container<span>.msRequestFullscreen(); </span> <span>} else if (container.mozRequestFullScreen) { </span> container<span>.mozRequestFullScreen(); </span> <span>} else if (container.webkitRequestFullscreen) { </span> container<span>.webkitRequestFullscreen(); </span> <span>} </span><span>}</span>
kesannya sangat serupa dengan pelaksanaan seperti stereoeffect. Gantikan kesan itu dengan vreffect baru kami:
controls <span>= new THREE<span>.OrbitControls</span>(camera, element); </span>controls<span>.target.set( </span> camera<span>.position.x, </span> camera<span>.position.y, </span> camera<span>.position.z </span><span>); </span>controls<span>.noPan = true; </span>controls<span>.noZoom = true;</span>Walau bagaimanapun, kami tidak memberikan kesan tersebut dalam kaedah ini. Sebaliknya, kami memberikan pengurus VR kami.
VR Manager
effect <span>= new THREE<span>.StereoEffect</span>(renderer);</span>Pengurus VR menyediakan butang yang membolehkan pengguna memasukkan mod VR jika mereka berada di pelayar yang serasi, atau skrin penuh jika penyemak imbas mereka tidak mampu VR (skrin penuh adalah apa yang kita mahu untuk mudah alih). Parameter HideButton mengatakan sama ada kita mahu menyembunyikan butang itu atau tidak. Kami pasti tidak mahu menyembunyikannya!
panggilan kami kemudian kelihatan seperti demikian, ia menggunakan pembolehubah cap waktu yang berasal dari Fungsi Tiga.js kami () Fungsi:
effect<span>.setSize(width, height);</span>Dengan semua itu, anda harus mempunyai pelaksanaan VR yang berfungsi yang diterjemahkan ke dalam pelbagai format bergantung pada peranti.
Adakah Renderer.getSize () mengembalikan ralat? Ini mendorong saya marah selama beberapa jam tetapi semua yang anda perlu lakukan untuk membetulkannya adalah - kemas kini tiga.js!
apa yang kelihatan seperti webvr boilerplate dalam tindakan
inilah dalam pandangan Oculus Rift yang muncul apabila anda mengklik ikon VR:
Ini adalah apa yang kelihatan seperti pada telefon pintar, orientasi peranti masih membolehkan kita melihat sekitar tempat kejadian dan kita tidak mempunyai skrin berpecah. Pandangan yang responsif mengenai kandungan:
Jika kita mengklik ikon VR di telefon bimbit, kami mendapat paparan skrin penuh untuk peranti gaya kadbod Google:
Mozilla bertujuan untuk membawa keupayaan tontonan VR ke pelayarnya dalam versi Firefox malam juga, namun ia adalah hari -hari awal! Saya tidak mempunyai banyak nasib untuk bekerja di Mac dan Oculus saya. Jenis konvensyen yang Vladimir Vukićević dari Firefox telah disebutkan termasuk mengintegrasikan transformasi CSS 3D dengan mod skrin penuh VR.
Sebagai contoh dari catatan blog Vladimir, dia mengatakan bahawa unsur-unsur dengan gaya transform: Preserve-3D harus diberikan dua kali dari dua pandangan untuk membawanya ke VR:
<span>function setOrientationControls(e) { </span> <span>if (!e.alpha) { </span> <span>return; </span> <span>} </span> controls <span>= new THREE<span>.DeviceOrientationControls</span>(camera, true); </span> controls<span>.connect(); </span> controls<span>.update(); </span> element<span>.addEventListener('click', fullscreen, false); </span> <span>window.removeEventListener('deviceorientation', setOrientationControls, true); </span><span>} </span><span>window.addEventListener('deviceorientation', setOrientationControls, true); </span> <span>function fullscreen() { </span> <span>if (container.requestFullscreen) { </span> container<span>.requestFullscreen(); </span> <span>} else if (container.msRequestFullscreen) { </span> container<span>.msRequestFullscreen(); </span> <span>} else if (container.mozRequestFullScreen) { </span> container<span>.mozRequestFullScreen(); </span> <span>} else if (container.webkitRequestFullscreen) { </span> container<span>.webkitRequestFullscreen(); </span> <span>} </span><span>}</span>
Jika anda tahu mana -mana demo menggunakan VR dan CSS, sila beritahu saya! Saya tidak dapat mengesan apa -apa. Idea untuk membawa bahagian HTML dan CSS dari Web ke VR adalah tanpa keraguan konsep yang sangat menarik. Tidak dapat dielakkan bahawa web akan memasuki alam VR seperti ini pada satu ketika kerana kita semua perlahan -lahan beralih ke peranti VR!
Dunia teknologi perlahan -lahan tetapi pasti akan memeluk realiti maya pada tahun -tahun akan datang kerana keupayaan teknologi kita sesuai dengan aspirasi liar kita! Satu perkara yang akan mendorong penggunaan VR dan nilainya adalah kandungan. Kami perlu mendapatkan kandungan VR di luar sana untuk pengguna VR untuk menikmati! Apa cara yang lebih baik dan lebih mudah di sana daripada melalui web?
Jika anda mengambil risiko dan membina demo VR menggunakan kod ini, sila kongsi dalam komen atau berhubung dengan saya di Twitter (@ThatpatrickGuy). Saya suka memakai Oculus Rift atau Google Cardboard saya dan mengambilnya untuk putaran!
Saya mempunyai satu set pautan curated pada VR dan AR melalui JavaScript untuk mereka yang mencari rujukan cepat. Teruskan ke Dev Diner dan periksa Dev Diner VR dan AR dengan Panduan Pemaju JavaScript, penuh dengan kedua -dua pautan yang disebutkan dalam artikel ini, artikel SitePoint yang hebat dan banyak lagi. Jika anda mempunyai sumber -sumber hebat lain yang saya tidak telah disenaraikan - sila beritahu saya juga!
Bagaimana saya boleh membuat pengalaman VR saya dapat diakses oleh pengguna tanpa peranti VR? Sebagai contoh, anda boleh menggunakan API DeviceOrientation untuk membolehkan pengguna meneroka adegan VR dengan menggerakkan peranti mudah alih mereka. Anda juga boleh memberikan pandangan 360 darjah bahawa pengguna boleh menavigasi dengan tetikus atau sentuhan mereka. Headset VR. Jika anda tidak mempunyai alat dengar, anda boleh menggunakan pelanjutan emulator WebVR untuk Chrome dan Firefox. Alat ini menyerupai API WebVR dan memberikan pandangan 3D adegan VR. Dalam tiga.js untuk mengeksport model 3D anda dalam format yang boleh dibaca oleh A-Frame. GLTF (format penghantaran GL) adalah format fail standard untuk adegan dan model 3D.
Atas ialah kandungan terperinci Cara Membina VR di Web Hari Ini. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!