mata teras
- Three.js dan Babylon.js adalah kedua-dua rangka kerja WebGL yang kuat yang menyediakan pemaju web dengan asas abstrak untuk mencipta karya WebGL yang kaya dengan ciri-ciri seperti logo animasi dan permainan 3D interaktif sepenuhnya.
- Three.js (bermula pada tahun 2009) bertujuan untuk mewujudkan grafik dan animasi 3D yang dipertingkatkan dengan GPU dengan penghantar berasaskan web, menjadikannya alat yang ideal untuk animasi web sejagat. Babylon.js (yang dilancarkan oleh Microsoft pada tahun 2013) mengambil pendekatan yang lebih disasarkan, memberi tumpuan kepada pembangunan permainan berasaskan web, dan ciri-ciri seperti pengesanan perlanggaran dan anti-aliasing.
- Kedua -dua bingkai mengikuti adegan, penerima, kamera, model animasi objek dan boleh digunakan untuk membuat animasi 3D yang sama. Walau bagaimanapun, Babylon.js membezakan dirinya dari tiga.js dengan memberi tumpuan kepada keperluan enjin permainan tradisional, seperti enjin dan pencahayaan tersuai.
- Walaupun kedua -dua.js dan Babylon.js menawarkan prestasi tinggi, tiga.js terkenal dengan kesederhanaan dan kemudahan penggunaannya, sesuai untuk pemula atau projek kecil; Untuk projek yang lebih besar dan lebih kompleks.
asal rangka 3D
Tiga.js yang popular dan Babylon.js yang lebih baru menyediakan asas abstrak untuk pemaju web untuk membuat kerja-kerja webgl yang kaya dengan ciri dari logo animasi ke permainan 3D interaktif sepenuhnya. Tiga.js bermula pada bulan April 2009 dan pada asalnya ditulis dalam ActionScript dan kemudian diterjemahkan ke dalam JavaScript. Oleh kerana ia dibuat sebelum WebGL diperkenalkan, tiga.js mempunyai kelebihan unik antara muka rendering modular, menjadikannya berfungsi dengan elemen kanvas SVG dan HTML5 sebagai tambahan kepada WebGL. Babylon.js dibebaskan pada musim panas tahun 2013 sebagai latecomer. Dibangunkan oleh Microsoft, Babylon.js dan Internet Explorer 11 secara rasmi menyokong API WebGL untuk kali pertama. Walaupun asalnya di makmal Redmond, Babylon.js (dan tiga.js) masih mengekalkan lesen sumber terbuka.
Perbezaan reka bentuk halus
Three.js dan Babylon.js kedua-duanya menyediakan perpustakaan yang mudah digunakan untuk mengendalikan kerumitan animasi webgl. Berikutan adegan, penerima, kamera, dan model animasi objek, rangka kerja ini sangat serupa dengan cara WebGL digunakan. Menggunakannya dalam HTML anda adalah semudah menghubungkan fail JavaScript yang sepadan. Nota: Babylon.js mempunyai beberapa kebergantungan dan juga perlu memasukkan sumber terbuka.Three.js:
<??>
Babylon.js:
<??> <??>
Perbezaan utama antara kedua -dua kerangka ini adalah penggunaan yang dimaksudkan. Walaupun kedua -dua kerangka boleh digunakan untuk mencipta animasi 3D yang sama, adalah penting untuk memahami matlamat penciptaan setiap rangka kerja. Tiga.js hanya mempunyai satu matlamat untuk mencipta: Buat grafik dan animasi 3D yang dipertingkatkan dengan GPU dengan penghantar berasaskan web. Oleh itu, kerangka ini mengamalkan pendekatan yang sangat luas untuk grafik web tanpa memberi tumpuan kepada mana -mana bidang animasi tunggal. Reka bentuk fleksibel ini menjadikan tiga.js alat yang ideal untuk animasi web sejagat seperti logo atau aplikasi pemodelan. Walaupun tiga.js cuba menyediakan pelbagai keupayaan animasi untuk WebGL, Babylon.js mengambil pendekatan yang lebih disasarkan. Pada asalnya direka sebagai enjin permainan Silverlight, Babylon.js masih lebih suka pembangunan permainan berasaskan web dan ciri-ciri seperti pengesanan perlanggaran dan anti-aliasing. Seperti yang dinyatakan sebelum ini, Babylon.js masih mampu sepenuhnya grafik dan animasi web umum.
demonstrasi teknologi webgl bersebelahan
Untuk terus menunjukkan persamaan dan perbezaan antara kedua -dua kerangka ini, mari kita membina animasi 3D yang cepat. Item yang kami pilih akan menjadi kiub super sederhana dan memohon putaran perlahan. Apabila membuat kedua -dua projek sampel ini, anda harus mula memahami bagaimana kedua -dua teknologi ini secara beransur -ansur menyimpang dan menunjukkan kekuatan unik mereka. Mari bermula. Langkah pertama dalam membina projek kreatif hampir mana -mana jenis adalah untuk memasukkan kanvas kosong di dalamnya yang mengandungi animasi 3D kami.
Three.js:
<div style="height:250px; width: 250px;" id="three"></div>
var div = document.getElementById('three');
Babylon.js:
<div style="height:250px; width: 250px;" id="babylon"> <canvas id="babylonCanvas"></canvas> </div>
var canvas = document.getElementById('babylonCanvas');
Dalam tiga.js, kita hanya perlu membuat div kosong sebagai bekas animasi. Babylon.js, sebaliknya, menggunakan kanvas HTML5 yang jelas untuk menyelamatkan grafik 3Dnya. Seterusnya, kami memuatkan penerima, yang akan bertanggungjawab untuk menyediakan tempat kejadian dan menariknya ke kanvas.
Three.js:
var renderer = new THREE.WebGLRenderer(); renderer.setSize(width, height); div.appendChild(renderer.domElement);
Babylon.js:
var engine = new BABYLON.Engine(canvas, true);
Tidak ada yang terlalu mewah di sini, kami hanya memulakan penyajian (enjin dalam kes Babylon.js) dan melampirkannya ke kanvas kami. Langkah seterusnya kami menjadi lebih rumit ketika kami menubuhkan adegan untuk menampung kamera dan kiub kami.
Three.js:
var sceneT = new THREE.Scene(); var camera = new THREE.PerspectiveCamera(70, width / height, 1, 1000); camera.position.z = 400;
Babylon.js:
var sceneB = new BABYLON.Scene(engine); var camera = new BABYLON.ArcRotateCamera ("camera", 1, 0.8, 10, new BABYLON.Vector3(0, 0, 0), sceneB); sceneB.activeCamera.attachControl(canvas); var light = new BABYLON.DirectionalLight ("light", new BABYLON.Vector3(0, -1, 0), sceneB); light.diffuse = new BABYLON.Color3(1, 0, 0); light.specular = new BABYLON.Color3(1, 1, 1);
di sini kita membuat adegan kita dengan cara yang sama dan kemudian melaksanakan kamera (kedua -dua bingkai menyokong pelbagai jenis kamera), dari mana kita sebenarnya akan melihat adegan yang dicipta. Parameter yang diluluskan ke kamera menentukan pelbagai butiran sudut tontonan kamera, seperti bidang pandangan, nisbah aspek, dan kedalaman. Kami juga menyertakan arah untuk Babylon.js dan melampirkannya ke tempat kejadian kami untuk mengelakkan melihat animasi gelap kemudian.
Dengan kanvas, adegan dan kamera kami, kami hanya perlu menarik kiub itu sendiri sebelum membuat dan animasi.
Three.js:
var cube = new THREE.CubeGeometry(100, 100, 100); var texture = THREE.ImageUtils.loadTexture('texture.gif'); texture.anisotropy = renderer.getMaxAnisotropy(); var material = new THREE.MeshBasicMaterial({ map: texture }); var mesh = new THREE.Mesh(cube, material); sceneT.add(mesh);
Babylon.js:
<??>
Pertama, kita membuat objek kiub saiz yang ditentukan, dan kemudian membuat bahan/mesh (berfikir tekstur) yang akan ditarik pada kiub. Mana -mana fail imej boleh digunakan sebagai tekstur, dan kedua -dua kerangka menyokong eksport mesh dari alat pemodelan 3D seperti Blender. Dalam langkah terakhir, kami menghidupkan sedikit putaran dan kemudian menjadikan tempat kejadian.
Three.js:
<??> <??>
Babylon.js:
<div style="height:250px; width: 250px;" id="three"></div>
Three.js dan Babylon.js kedua -duanya menggunakan animasi atau rendering gelung untuk mengemas kini kanvas dan menarik grafik berputar baru. Anda juga akan melihat bahawa tiga.js sedikit berbeza dari Babylon.js, yang melampirkan kamera semasa rendering. Produk akhir kami adalah dua kiub yang berputar perlahan di udara. Sangat mudah, bukan?
Cerita Dua Bingkai
itu sahaja. Dua rangka kerja WebGL yang sangat kuat dibina atas dasar yang sama tetapi memberi tumpuan kepada aspek yang berbeza dari grafik web yang dipertingkatkan. Anda telah melihat secara langsung bagaimana pendekatan mereka yang serupa dalam animasi, kedua-dua adegan berikut, penerima, kamera, paradigma objek. Walaupun persamaan, Babylon.js bijak membezakan dirinya dengan memberi tumpuan kepada keperluan enjin permainan tradisional, seperti enjin dan pencahayaan tersuai. Pada akhirnya, kedua -dua rangka kerja yang agak muda ini memudahkan pemaju web untuk memanfaatkan peluang 3D yang kuat yang ditawarkan oleh WebGL. Oleh itu, sesiapa yang berminat dalam pembangunan web 3D perlu mengkaji dengan teliti teknologi canggih ini.
(ini harus termasuk pautan fail zip untuk memuat turun kod demo)
(Soalan -soalan yang sering ditanya mengenai tiga.js dan Babylon.js perbandingan harus dimasukkan di sini) kerana batasan ruang, saya tidak dapat menambah bahagian FAQ penuh di sini. Walau bagaimanapun, anda boleh menyusun semula dan menggilapnya menjadi versi yang lebih ringkas dan jelas berdasarkan bahagian FAQ dalam teks asal yang disediakan.
Atas ialah kandungan terperinci Tiga.js dan Babylon.js: Perbandingan kerangka webgl. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undress AI Tool
Gambar buka pakaian secara percuma

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Java dan JavaScript adalah bahasa pengaturcaraan yang berbeza, masing -masing sesuai untuk senario aplikasi yang berbeza. Java digunakan untuk pembangunan aplikasi perusahaan dan mudah alih yang besar, sementara JavaScript digunakan terutamanya untuk pembangunan laman web.

JavaScriptcommentsareessentialformaintaining,reading,andguidingcodeexecution.1)Single-linecommentsareusedforquickexplanations.2)Multi-linecommentsexplaincomplexlogicorprovidedetaileddocumentation.3)Inlinecommentsclarifyspecificpartsofcode.Bestpractic

Titik berikut harus diperhatikan apabila tarikh pemprosesan dan masa di JavaScript: 1. Terdapat banyak cara untuk membuat objek tarikh. Adalah disyorkan untuk menggunakan rentetan format ISO untuk memastikan keserasian; 2. Dapatkan dan tetapkan maklumat masa boleh diperoleh dan tetapkan kaedah, dan ambil perhatian bahawa bulan bermula dari 0; 3. Tarikh pemformatan secara manual memerlukan rentetan, dan perpustakaan pihak ketiga juga boleh digunakan; 4. Adalah disyorkan untuk menggunakan perpustakaan yang menyokong zon masa, seperti Luxon. Menguasai perkara -perkara utama ini secara berkesan dapat mengelakkan kesilapan yang sama.

PlacingtagsatthebottomofablogpostorwebpageservespracticalpurposesforSEO,userexperience,anddesign.1.IthelpswithSEObyallowingsearchenginestoaccesskeyword-relevanttagswithoutclutteringthemaincontent.2.Itimprovesuserexperiencebykeepingthefocusonthearticl

JavaScriptispreferredforwebdevelopment, whersjavaisbetterforlarge-scalebackendsystemsandandroidapps.1) javascriptexcelsinceleatinginteractiveWebexperienceswithitsdynamicnatureanddommanipulation.2) javaoffersstrongyblectionandobjection

Penangkapan dan gelembung acara adalah dua peringkat penyebaran acara di Dom. Tangkap adalah dari lapisan atas ke elemen sasaran, dan gelembung adalah dari elemen sasaran ke lapisan atas. 1. Penangkapan acara dilaksanakan dengan menetapkan parameter useCapture addeventlistener kepada benar; 2. Bubble acara adalah tingkah laku lalai, useCapture ditetapkan kepada palsu atau ditinggalkan; 3. Penyebaran acara boleh digunakan untuk mencegah penyebaran acara; 4. Acara menggelegak menyokong delegasi acara untuk meningkatkan kecekapan pemprosesan kandungan dinamik; 5. Penangkapan boleh digunakan untuk memintas peristiwa terlebih dahulu, seperti pemprosesan pembalakan atau ralat. Memahami kedua -dua fasa ini membantu mengawal masa dan bagaimana JavaScript bertindak balas terhadap operasi pengguna.

JavascripthassevenfundamentalDatypes: nombor, rentetan, boolean, undefined, null, objek, andsymbol.1) numberuseadouble-precisionformat, bergunaforwidevaluangesbutbecautiouswithfloating-pointarithmetic.2)

Jika aplikasi JavaScript memuat perlahan -lahan dan mempunyai prestasi yang buruk, masalahnya adalah bahawa muatan terlalu besar. Penyelesaian termasuk: 1. Penggunaan kod pemisahan (codesplitting), memecah bundle besar ke dalam pelbagai fail kecil melalui react.lazy () atau membina alat, dan memuatkannya seperti yang diperlukan untuk mengurangkan muat turun pertama; 2. Keluarkan kod yang tidak digunakan (treeshaking), gunakan mekanisme modul ES6 untuk membersihkan "kod mati" untuk memastikan perpustakaan yang diperkenalkan menyokong ciri ini; 3. Memampatkan dan menggabungkan fail sumber, membolehkan GZIP/Brotli dan Terser memampatkan JS, menggabungkan fail dan mengoptimumkan sumber statik; 4. Gantikan kebergantungan tugas berat dan pilih perpustakaan ringan seperti hari.js dan ambil
