webgl ซึ่งรองรับอย่างกว้างขวางในเบราว์เซอร์ที่ทันสมัยทั้งหมดช่วยให้คุณสามารถทำงานกับกราฟิก 3 มิติที่เร่งด้วยฮาร์ดแวร์ได้ จาวาสคริปต์ เปิดความเป็นไปได้มากมายสำหรับแอพและเกมเบราว์เซอร์ที่ใช้เบราว์เซอร์ - เพียงแค่ตรวจสอบสิ่งเหล่านี้ 20 ตัวอย่างที่น่าทึ่งของ WebGL ในการดำเนินการ สำหรับการพิสูจน์
WebGL นั้นค่อนข้างต่ำระดับต่ำและไม่น่าเป็นไปได้ที่คุณจะต้องทำงานกับมันในรูปแบบวานิลลา มีห้องสมุดหลากหลายประเภทและแม้แต่เกมเกมเพื่อให้ฟังก์ชั่นระดับสูงขึ้น
ในบทช่วยสอนนี้ฉันจะแสดงให้คุณเห็น วิธีการทำแอป หรือไซต์ที่ใช้ WebGL ร่วมกับ สาม.js ซึ่งเป็นห้องสมุดโอเพนซอร์ซฟรีที่ให้บริการนามธรรมของ WebGL
คุณจะต้องเริ่มต้นด้วยการจับ สาม.js . เมื่อคุณมีการสร้างล่าสุดให้วาง Three.js ในโฟลเดอร์โครงการของคุณ จากนั้นเราจะเพิ่มเป็นสคริปต์ในหน้าของเราเช่นไลบรารี JavaScript อื่น ๆ เราจะวางรหัสของเราเองไว้ในไฟล์ JavaScript แยกต่างหาก
& lt;! Doctype HTML & GT;
& lt; html & gt;
& lt; หัว & gt;
& lt; Meta Charset = UTF-8 & GT;
& lt; ชื่อ & gt; เริ่มต้นใช้งานด้วย three.js & lt; / ชื่อ & gt;
& lt; / head & gt;
& lt; body style = "margin: 0;" & gt;
& lt; สคริปต์ SRC = "three.js" & gt; & lt; / script & gt;
& lt; สคริปต์ src = "demo.js" & gt; & lt; / script & gt;
& lt; / body & gt;
& lt; / html & gt;
เราต้องการสามสิ่งที่จะเริ่มต้นกับ WebGL: ฉากกล้องและตัวเรนเดอร์ ฉากคือที่ที่เราวางวัตถุที่จะแสดงโดย Three.js กล้องเป็นมุมมองที่เราจะเห็นพวกเขา Renderer นำทั้งสองเข้าด้วยกันและดึงหน้าจอตามนั้น เมื่อเรามีการตั้งค่าเหล่านี้เราเพิ่ม Renderer ลงในเอกสาร
var width = window.innerwidth;
ความสูง = window.innerHeight;
var varglangle = 45;
var nearclipping = 0.1;
Var Farclipping = 9999;
Var Scene = New Three.Scene ();
Var Camera = New Three.PerspectiveCamera (ViewGLE, ความกว้าง / ความสูง, ใกล้, Farlipping);
Var Renderer = New Three.WebGlrenderer ();
renderer.setsize (ความกว้างความสูง);
document.body.ephendchild (renderer.domelement);
ต่อไปเราต้องสร้างลูปเพื่อสร้างฉากของเรา เราทำสิ่งนี้โดยใช้ renderer.render () ฟังก์ชั่น แต่ส่วนสำคัญคือการใช้ซ้ำ SewionAnmationFrame () ซึ่งเป็นฟังก์ชั่นในตัวที่ช่วยให้เบราว์เซอร์ร้องขอเฟรมอื่นเมื่อพร้อมที่จะวาดหนึ่ง การใช้ SewionAnmationFrame () ง่ายกว่าและส่งผลให้เคลื่อนไหวที่ราบรื่นกว่าการพยายามใช้เวลาในการวาดเฟรมด้วยตัวคุณเอง
ฟังก์ชั่นเคลื่อนไหว () {
SecureSimationFrame (Animate);
renderer.render (ฉากกล้อง);
}
Animate ();
ตอนนี้เราสามารถเริ่มเพิ่มวัตถุบางอย่างในฉากของเรา เราสามารถทำได้โดยการสร้างวัตถุตาข่ายและเพิ่มลงไป ตาข่ายประกอบด้วยรูปทรงเรขาคณิต (รูปร่างของวัตถุ) และวัสดุ (สีหรือพื้นผิวที่ใช้ในการทาสี) เราจะสร้างวัตถุพื้นฐานบางอย่างด้วยการกำหนดรูปทรงเรขาคณิตที่แตกต่างกันสามรูปแบบและกำหนดวัสดุสีที่แตกต่างให้กับพวกเขา
Var CouseGeometry = ใหม่สาม.boxgeometry (1, 1, 1);
var cubeMaterial = ใหม่สาม.Meshlambertmaterial ({สี: 0xFF0000});
Var Cube = New Three.Mesh (CubeGeometry, CubeMaterial);
var conebetomry = new three.conegeometry (0.5, 1, 4);
var conematerial = ใหม่สาม.meshlambertmaterial ({สี: 0x00ff00});
Var Cone = New Three.mesh (ComeGeometry, Conematerial);
var sphereometry = new three.sphereometry (0.5, 8, 8);
Var SphereMaterial = New Three.Meshlambertmaterial ({สี: 0x0000ff});
Var Sphere = New Three.mesh (SphereGeometry, SphereMaterial);
ตามค่าเริ่มต้นวัตถุจะถูกเพิ่มที่จุดกำเนิด (x = 0, y = 0, z = 0) ของฉากซึ่งเป็นที่ที่กล้องของเราอยู่ดังนั้นเราจะต้องระบุตำแหน่งสำหรับพวกเขาเช่นกัน เราพร้อมที่จะเพิ่มตาข่ายให้กับฉากของเราซึ่งหมายความว่าพวกเขาจะแสดงผลโดยอัตโนมัติใน Animate () ลูป.
cube.position.x = -2
cube.position.z = -5;
CONE.Position.z = -5;
sphere.position.z = -5;
sphere.position.x = 2;
cube.position.z = -5;
Scene.add (ลูกบาศก์);
Scene.add (กรวย);
Scene.add (ทรงกลม);
หากคุณดูหน้าของคุณตอนนี้คุณจะพบว่าสิ่งต่าง ๆ ดูแบนเล็กน้อย ไม่มีแสงที่ใช้กับวัตถุดังนั้นพวกเขาจึงเป็นสีหลักที่เป็นของแข็งและดูสองมิติ เพื่อแก้ไขปัญหานี้เราต้องเปลี่ยนจาก meshbasicmaterial เป็นวัสดุที่รองรับแสงสว่าง เราจะใช้ Meshlambertmaterial . นอกจากนี้เรายังต้องเพิ่มแหล่งกำเนิดแสงไปยังฉาก
Var Light = New Three.PointLight (0xFFFFFF);
Light.position.x = 0;
Light.position.y = 10;
light.position.z = 0;
Scene.add (แสง);
ตอนนี้เรากำลังไปที่นั่นแล้ว! คุณควรเห็นสิ่งที่ค่อนข้างชัดเจนสามมิติในหน้าของคุณ สิ่งที่เรายังไม่ได้ทำจะได้รับประโยชน์อย่างเต็มที่จาก Animate () ฟังก์ชั่น. มาทำการเปลี่ยนแปลงเล็กน้อยเพื่อให้แหล่งกำเนิดแสงของเราเคลื่อนที่ไปรอบ ๆ ในการเคลื่อนที่เป็นวงกลมเหนือวัตถุ
var lightangle = 0;
ฟังก์ชั่นเคลื่อนไหว () {
lightangle + = 5;
ถ้า (lightangle & gt; 360) {lightangle = 0;};
light.position.x = 5 * math.cos (lightangle * math.pi / 180);
light.position.z = 5 * math.sin (lightangle * math.pi / 180);
SecureSimationFrame (Animate);
renderer.render (ฉากกล้อง); }
ในทางปฏิบัติเราอาจไม่ต้องการให้วัตถุของเราเป็นสีแบน มันจะเป็นเรื่องปกติมากขึ้นที่จะใช้พื้นผิวกับไฟล์จากไฟล์ เราสามารถทำสิ่งนี้ได้ Three.TextureLoader () . มาเปลี่ยนวิธีสร้างวัตถุกรวยของเราเพื่อใช้ประโยชน์จากพื้นผิวที่เราโหลดจากไฟล์ ฟังก์ชั่นเรียกว่าเมื่อโหลดไฟล์
var texture loader = ใหม่ three.textureLoader ();
textureloader.load ("./ grass_texture.jpg", พื้นผิว = & gt; {
var conebetomry = new three.conegeometry (0.5, 1, 4);
Var Conematerial = ใหม่สาม.Meshlambertmaterial ({แผนที่: พื้นผิว});
Var Cone = New Three.mesh (ComeGeometry, Conematerial);
CONE.Position.z = -5;
Scene.add (กรวย);
},
);
สิ่งต่าง ๆ ดูดีขึ้น แต่บางสิ่งยังไม่เป็นธรรมชาติ พื้นผิวดูแบนมากและไม่ตอบสนองต่อแสง เราสามารถแก้ปัญหานี้ได้ด้วยการใช้การทำแผนที่ชนซึ่งช่วยให้เราสามารถใช้ชิ้นส่วนแสงและสีเข้มของภาพเพื่อจำลองพื้นผิวบนพื้นผิวของวัตถุ ลองทำสิ่งนี้ด้วยพื้นผิวที่แตกต่างกันบนทรงกลม เราจะเปลี่ยนเนื้อหาให้ meshphongmaterial ซึ่งช่วยให้เราระบุ การทำท่า คุณลักษณะ
var texture loader = ใหม่ three.textureLoader ();
textureloader.load ("./ bump_map.jpg", พื้นผิว = & gt; {
var sphereometry = new three.sphereometry (0.5, 8, 8);
Var SphereMaterial = New Three.meshphongmaterial ({สี: 0x0000FF, BUMPMAP: เนื้อ, Bumpscale: 1.0});
Var Sphere = New Three.mesh (SphereGeometry, SphereMaterial);
sphere.position.z = -5;
sphere.position.x = 2;
Scene.add (ทรงกลม);
},
);
เป็นสัมผัสสุดท้ายให้ผู้ใช้ควบคุมฉากเล็กน้อย เพื่อเพิ่มความสามารถในการเลื่อนไปรอบ ๆ มีห้องสมุดพิเศษที่จัดส่งด้วย Three.js ที่ทำให้ง่ายต่อการทำอย่างไม่น่าเชื่อ ตรวจสอบให้แน่ใจว่าได้แยก orbitcontrols.js จากแพ็คเกจ three.js ไปยังไดเรกทอรีโครงการของคุณและรวมไว้ในหน้าของคุณ นี่เป็นหนึ่งในห้องสมุดควบคุมหลายแห่งที่จัดส่งด้วย Three.js เพื่อเติมเต็มสไตล์การควบคุมกล้องทั่วไป
& lt; สคริปต์ SRC = "OrbitControls.js" & GT; & LT; / สคริปต์ & GT;
ตอนนี้สิ่งที่เราต้องทำคือสร้าง Three.orbitControls วัตถุและนำไปใช้กับกล้องของเรา ห้องสมุดจะดูแลส่วนที่เหลือให้คุณ: คุณไม่จำเป็นต้องฟังการคลิกการเคลื่อนไหวของเมาส์และอื่น ๆ คุณอาจต้องการย้ายวัตถุของคุณกลับไปที่จุดกำเนิดและชดเชยกล้องแทนเพื่อให้สามารถถาดไปรอบ ๆ วัตถุได้อย่างเรียบร้อย
ด้วยที่เราทำกับการแนะนำของเรา คุณควรมีวัตถุสามชิ้นที่มีลักษณะที่แตกต่างกันของพื้นผิวแสงแบบไดนามิกบางอย่างและกล้องควบคุมที่ผู้ใช้จะเล่นด้วย
camera.position.z = 10;
Var Controls = New Three.orbitControls (กล้อง);
บทความนี้ให้ความสำคัญในปัญหา 268 ของนักออกแบบเว็บไซต์นิตยสารสร้างสรรค์ Web Design - เสนอแบบฝึกหัดผู้เชี่ยวชาญแนวโน้มที่ทันสมัยและทรัพยากรฟรี สมัครสมาชิกนักออกแบบเว็บไซต์ตอนนี้
ชอบสิ่งนี้? ลองเหล่านี้:
การแนะนำเอฟเฟกต์ต่อข้อความและการพิมพ์สามารถ..
เนื้อหาของคุณจะไม่มีที่ไหนเลยเว้นแต่ผู้คนสา..
สำหรับแคมเปญการตลาดผ่านอีเมลใด ๆ ในการทำงานอีเมลจะต้องไปถึงกล่องจ..
เมื่อออกแบบแบรนด์ไม่ว่าจะเป็นหนึ่งในที่จัดตั้งขึ้นหรือเริ่มต้นท�..
เคล็ดลับต่อไปนี้สลายกระบวนการของฉันสำหรับการเคลื่อนไหวแบบอนิเมช�..