Webgl , tüm modern tarayıcılarda yaygın olarak desteklenen, donanım hızlandırılmış 3D grafiklerle çalışmanızı sağlar Javascript , tarayıcı tabanlı uygulamalar ve oyunlar için çok çeşitli olasılıklar açmak - sadece bunları kontrol et 20 İnanılmaz WebGL örneği , kanıt için.
WebGL'nin kendisi oldukça düşük seviyeli ve bununla birlikte vanilya formunda çalışmak isteyeceksiniz. Daha yüksek düzeyde işlevsellik sağlamak için çeşitli kütüphane ve hatta oyun motorları vardır.
Bu eğitimde size göstereceğim Bir uygulama nasıl yapılır veya WebGL kullanan site ile birlikte üç.js , bu, WebGL'nin soyutlamasını sağlayan ücretsiz bir açık kaynaklı kütüphanedir.
Tutarak başlamanız gerekir üç.js . En son yapıya sahip olduğunuzda, üç.j'leri proje klasörünüze yerleştirin. Daha sonra diğer JavaScript kütüphanesi gibi sayfamıza bir komut dosyası olarak ekleyeceğiz. Kendi kodumuzu ayrı bir javascript dosyasına yerleştireceğiz.
& lt;! DOCTYPE HTML & GT;
& lt; html & gt;
& lt; head & gt;
& lt; meta charset = utf-8 & gt;
& lt; unvanı & gt; üç.js ile başlamak; / unvan & gt;
/ head & gt;
& lt; vücut stili = "marjı: 0;" & gt;
& lt; script src = "three.js" & gt; & lt; / script;
& lt; script src = "demo.js" & gt; & lt; / script;
& lt; / body & gt;
& lt; / html & gt;
WebGL ile başlamak için üç şeye ihtiyacımız var: bir sahne, kamera ve bir renderer. Bir sahne, nesneleri üç.js tarafından görüntülenecek nesneleri yerleştirdiğimiz yerdir. Bir kamera, onları göreceğimiz bakış açısıdır. Render, ikisini bir araya getirir ve ekranı buna göre çeker. Bunları ayarladıktan sonra, oluşturucuyu belgeye ekleriz.
Var genişliği = window.innerwidth;
var yüksekliği = window.innerheight;
var görünümü = 45;
var yakınlar = 0.1;
var farclipping = 9999;
var sahne = yeni üç.scene ();
var kamera = yeni three.Perspectivecamera (Görünüm, genişlik / yükseklik, yakın klipleme, farclipping);
var renderer = yeni üç.webglrenderer ();
renderer.Setsize (genişlik, yükseklik);
belge.body.appendchild (renderer.domelement);
Daha sonra, sahnemizi gerçekleştirmek için bir döngü oluşturmamız gerekiyor. Bunu kullanarak bunu yapıyoruz renderer.render () fonksiyonu, ancak anahtar kısım tekrar tekrar kullanmaktır. RequestanimationFrame () , tarayıcının bir tane çizmeye hazır olduğunda başka bir çerçeve isteyebilmesini sağlayan yerleşik bir işlevdir. Kullanma RequestanimationFrame () daha kolaydır ve daha yumuşak bir animasyonda, çerçevelerin kendinizin zamanını çizmeyi denemek yerine.
fonksiyon animate () {
RequestanimationFrame (animate);
renderer.render (sahne, kamera);
}
canlandırmak ();
Şimdi sahnemize bazı nesneler eklemeye başlayabiliriz. Bunu örgü nesneleri oluşturarak ve bunlara ekleyerek yapabiliriz. Bir örgü, geometri (nesnenin şekli) ve bir malzemeden oluşur (boyamak için kullanılan renk veya doku). Üç farklı geometri tanımlayarak ve onlara farklı renk malzemeleri atanarak bazı temel nesneler oluşturacağız.
var küpometrisi = yeni üç.boxgeometri (1, 1, 1);
var cubemeral = yeni üç.MeshlambertMaterial ({Renk: 0xff0000});
var küp = yeni üç.Mesh (kubbeometri, cubemalial);
var konigeometrisi = yeni üç. tongeometri (0.5, 1, 4);
var conataterial = yeni üç.MeshlambertMaterial ({Renk: 0x00ff00});
var koni = yeni üç.Mesh (konigeometri, aynalı);
var küregeometrisi = yeni üç.sphereometry (0.5, 8, 8);
var spheremial = yeni üç.MeshlambertMaterial ({Renk: 0x0000ff});
var küresi = yeni üç.Mesh (küregeometri, küremateryal);
Varsayılan olarak, kameramızın olduğu yerin kökenine (x = 0, y = 0, z = 0) eklenir, bu nedenle onlar için bir pozisyon belirlememiz gerekecek. Daha sonra, kafemize ağlarımızı eklemeye hazırız, bu da otomatik olarak oluşturulurlar. canlandırmak () döngü.
cube.position.x = -2
cube.position.z = -5;
cone.position.z = -5;
küre.posisyon.z = -5;
küre.position.x = 2;
cube.position.z = -5;
sahne.add (küp);
sahne.add (koni);
sahne.add (küre);
Sayfanızı şimdi görürseniz, bir şeyler biraz düz görünüyorsunuz. Nesnelere uygulanan aydınlatma yoktur, bu nedenle katı birincil renklerdir ve iki boyutlu görünüyorlar. Bunu düzeltmek için, Meshbasicmalı aydınlatmayı destekleyen bir malzemeye; Kullanacağız Meshlambertmaterial . Ayrıca sahneye ışık kaynağı eklemeliyiz.
var lambası = yeni üç.Pointlight (0xffffff);
light.position.x = 0;
light.position.y = 10;
light.position.z = 0;
sahne.add (ışık);
Şimdi oraya gidiyoruz! Sayfanızdaki neyin açıkça üç boyutlu nesnelerin neler olduğunu görmelisiniz. Henüz yapmadık, tam olarak yararlanılıyor. canlandırmak () işlevi. Işık kaynağımızın nesnelerin üstünde dairesel bir hareketle hareket etmesi için birkaç değişiklik yapalım.
var ılamazı = 0;
fonksiyon animate () {
lamblegle + = 5;
eğer (lambleggle & gt; 360) {lightangle = 0;};
light.position.x = 5 * matematik (lamble * math.pi / 180);
light.position.z = 5 * matematik.sin (lamble * math.pi / 180);
RequestanimationFrame (animate);
renderer.render (sahne, kamera); }
Uygulamada, muhtemelen nesnelerimizin düz renkler olmasını istemiyoruz. Bir dosyadan bazı dokuları bir dosyadan uygulamak daha tipik olurdu. Bunu kullanarak yapabiliriz Üç.Textureloader () . Koni nesnemizin bir dosyadan yüklediğimiz bir dokuyu kullanmak için nasıl oluşturulduğunu değiştirelim. İşlev, dosya yüklendiğinde çağrılır.
Var textureloader = yeni three.textureloader ();
textureloader.load ("./ gres_texture.jpg", doku = & gt; {
var konigeometrisi = yeni üç. tongeometri (0.5, 1, 4);
var conataterial = yeni üç.MeshlambertMaterial ({harita: doku});
var koni = yeni üç.Mesh (konigeometri, aynalı);
cone.position.z = -5;
sahne.add (koni);
}
);
İşler daha iyi görünüyor, ama bir şey hala doğal değil. Doku çok düz görünüyor ve aydınlatmaya cevap vermiyor. Bunu, bir nesnenin yüzeyindeki dokumayı simüle etmek için bir görüntünün ışık ve koyu parçalarını kullanmamızı sağlayan Bump Haritalama kullanımıyla bunu çözebiliriz. Küre üzerinde farklı bir doku ile bunu deneyelim. Malzemeyi değiştireceğiz Meshphongmaterial , bu bir belirlememizi sağlayan bumpmap öznitelik.
Var textureloader = yeni three.textureloader ();
textureloader.load ("./ bump_map.jpg", texture = & gt; {
var küregeometrisi = yeni üç.sphereometry (0.5, 8, 8);
var spheremial = yeni üç.MeshphongMaterial ({Renk: 0x0000FF, Bumpmap: Doku, Bumpscale: 1.0});
var küresi = yeni üç.mesh (küregometri, küresel);
küre.posisyon.z = -5;
küre.position.x = 2;
sahne.add (küre);
}
);
Son bir dokunuş olarak, kullanıcıya sahne üzerinde biraz kontrol verin. Etrafında tava yeteneğini eklemek için, sadece bunu yapmayı inandırıcı derecede kolaylaştıran üç.js ile gönderilen ekstra bir kütüphane var. ORBITCONTROLS.JS'yi üç.js paketinden proje dizininize çıkardığınızdan ve sayfanıza eklediğinizden emin olun. Bu, kamera kontrolünün ortak stillerini yerine getirmek için üç.js ile birlikte gelen birkaç kontrol kütüphanesinden biridir.
& lt; script src = "orbitcontrols.js" & gt;
Şimdi tek yapmamız gereken bir Üç.OritControls nesne ve kameramıza uygulayın. Kütüphane sizin için geri kalanıyla ilgilenecek: tıklamalar, fare hareketleri vb. Dinlemeniz gerekmez. Ayrıca, nesnelerinizi menşe noktasına geri getirmek ve kamerayı nesnelerin etrafında düzgün bir şekilde kaydırabilmesini sağlamak isteyebilirsiniz.
Bununla, tanıtımımızla bitirdik. Değişken doku stilleri, bazı dinamik aydınlatma ve oynatmak için kullanıcı kontrollü bir kamera ile üç nesneniz olmalıdır.
camera.position.z = 10;
var kontrolleri = yeni üç.orbitcontrols (kamera);
Bu makale, Web Tasarımcısı'nın 268 sayısında, Creative Web Design Magazine, uzman öğreticiler, son teknoloji trendler ve ücretsiz kaynaklar sunar. Şimdi web tasarımcısına abone olun.
Bunu beğendin mi? Bunları dene:
CSS şartnamesi hiç gelişmektedir. CSS'de yeni özelliklerin uygulanması için işlem karmaşıktır, ancak basitleştirilmiş..
Yıllardır sayısız çapraz platform mobil çerçeve, geliştirici tecrübesi ve performansında sürekli iyileştirmelerle bir..
Simgeleri büyütmek için üstündeki simgeye tıklayın Resimli simgeler sizin için s..
Duyarlı web tipografi zordur - hem tasarım pirzolası hem de teknik bilgi birikimine sahip olmanız gerekir. Fakat ancak zor olabilir, yanlış almak bir seçenek değildir, çünkü tipogr..
Birkaç şanslı geliştirici ve bu yazar, Addy Osmani'nin yeni Image Optimizasyon ebook'unu Teknik Düzenle düzenlemesi fırsat..
Hepimizin fotoğraf olarak alınan büyük bir hatıra mağazasına sahibiz ve hatırlayabilmek harika. Fakat ya da bir adım dah..
Vecteezy Editor Tarayıcınızda doğru çalışan ücretsiz bir vektör düzenleme süitidir. Bu öğretici, sitedek..
Benimki bir suluboya, oldukça etkileyici bir tarzdır. boyama tekniği , detaylar bir ses kompozisyonundan daha a..