ជំហាន​ដំបូង


WebGL គឺ​ជា​អក្សរ​កាត់​មកពី​ពាក្យ​ថា Web Graphics Library ដែល​ជា​កញ្ចប់​​នៃ​​ក្បួន​ខ្នាត​មាន​ស្រាប់​​ទាំងឡាយ​សរសេរ​ជា​ភាសា JavaScript ប្រើ​សំរាប់​សរសេរ​កម្មវិធី​គូរ​គំនូរ​ត្រីមាត្រ (Three Dimensional Graphic) ​នៅ​លើ browser ។ មួយ​វិញ​ទៀត កញ្ចប់​នៃ​ក្បួន​ខ្នាត WebGL នេះ​ត្រូវ​បាន​បញ្ចូល​រួច​ជា​ស្រេច​ទៅ​ក្នុង browser មួយ​ចំនួន​ធំ​​មាន​ដូចជា Chrome, Firefox, Safari ជាដើម​។ ដូចនេះ ដើម្បី​សរសេរ​កម្មវិធី​ជា​ភាសា​ JavaScript គូរ​គំនូរ​ត្រីមាត្រ​នៅ​លើ browser យើង​មិន​ចាំ​បាច់​ត្រូវ​ការ​អ្វី​ទាំងអស់​។

យ៉ាង​ណា​ម៉ិញ ដើម្បី​សំរួល​ការប្រើប្រាស់​កញ្ចប់ក្បួន​ខ្នាត WebGL នេះ​អោយ​កាន់​តែ​មានប្រសិទ្ធិភាព មាន​ក្រុមហ៊ុននិង​ក្រុម​អ្នកសរសេរ​កម្មវិធី​គំនូរ​កំព្យូទ័រ​ជា​ច្រើន​​បាន​បង្កើត​នូវ​កញ្ចប់​ក្បួន​ខ្នាត​ផ្សេង​ៗ​ជាច្រើន​ទៀត​រាប់​មិន​អស់​ ដោយ​បញ្ចូល​កញ្ចប់ WebGL ​ទៅ​ក្នុង​នោះ​​រួច​ជា​ស្រេច ដូច​ជា​កញ្ចប់ «babylon.js» ជាដើម​។ ហើយ​តទៅ​នេះ យើង​នឹង​ចាប់​ផ្តើម​រៀន​សរសេរ​កម្មវិធី​គូរគំនូរ​ត្រីមាត្រ​នៅ​លើ​ browser ទាំងឡាយ​ ដោយ​ប្រើប្រាស់​កញ្ចប់ «babylon.js» នេះ​។

ដំបូង​បង្អស់​ ដើម្បី​អាច​ប្រើប្រាស់​ក្បួន​ខ្នាត​នៅ​ក្នុង​កញ្ចប់ babylon.js បាន យើង​ចាំបាច់​ត្រូវ​ទាញ​យក​​ក្បួន​ខ្នាត​ទាំងនោះ បញ្ចូល​ទៅ​​ក្នុង​​ប្លក់​រប់ស​យើង​ ដោយ​សរសេរ​តំណរ​ភ្ជាប់​ដូច​ខាង​ក្រោម​នេះ​​នៅ​ក្នុង​​ធាតុ «head» នៅ​ក្នុង​ប្លក់​ template របស់យើង​៖

<head>
  ​
  
  
</head>


បន្ទាប់​មក​ទៀត​ យើង​ត្រូវ​បង្កើតផ្ទាំង​គំនូរ​ទទេ​ស្អាត​មួយ សំរាប់​គូរ​រូប​ត្រីមាត្រ​ផ្សេង​ៗ​នៅ​លើ​នោះ​ ដោយ​ប្រើ​ធាតុ «canvas» ដូច​ខាង​ក្រោម​នេះ៖

<canvas id="renderCanvas" style="width:100%;height:100%;touch-action:none;"></canvas>


ខាង​ក្រោម​នេះ គឺ​ជា​ឧទាហរណ៍​នៃ​ការសាកល្បង​គូរ​រូប​​ sphere មួយ​នៅ​លើ​ផ្ទាំង​គំនូរ​មួយ​។ យើង​នឹង​សិក្សា​លំអិត​ពី​ការគូរ​រូប​ផ្សេង​ៗ មួយ​ម្តង​ៗ​នៅ​ពេល​ខាង​មុខ​នេះ​។ ឥឡូវ​នេះ​ យើង​គ្រាន់​តែ​ដឹង​ថា​ ដើម្បី​គូររូប​ត្រីមាត្រ​នៅ​លើ​ផ្ទាំង​គំនូរ​ណាមួយ យើង​អាច​ធ្វើ​ដូច​ខាង​ក្រោម​នេះ​៖

var canvas = document.getElementById("renderCanvas");
var engine = new BABYLON.Engine(canvas, true);

var createScene = function(){
  var scene = new BABYLON.Scene(engine);
  var camera = new BABYLON.ArcRotateCamera("Camera", Math.PI / 2, Math.PI / 2, 2, new BABYLON.Vector3(0,0,5), scene);
  camera.attachControl(canvas, true);
  var light1 = new BABYLON.HemisphericLight("light1", new BABYLON.Vector3(1, 1, 0), scene);
  var light2 = new BABYLON.PointLight("light2", new BABYLON.Vector3(0, 1, -1), scene);
  var sphere = BABYLON.MeshBuilder.CreateSphere("sphere", {diameter:2}, scene);
  return scene;
}

var scene = createScene();

engine.runRenderLoop(function(){ 
  scene.render();
});
window.addEventListener("resize", function(){ 
  engine.resize();
});