Database & 3D Graphic

កាល​ពី​ដំបូង​ឡើយ browser ត្រូវ​បាន​បង្កើត​ឡើង​តែ​សំរាប់​បង្ហាញ​អត្ថបទ​និង​ឬ​រូបភាព​តូច​ៗ​តែ​ប៉ុណ្ណោះ តែ​រហូត​មក​ពេល​បច្ចុប្បន្ន​នេះ ជាមួយ​នឹង​បច្ចេកវិទ្យា​ថ្មី​ៗ​ដែល​ត្រូវ​បាន​បញ្ជូល​ទៅ​ក្នុង HTML5, browser បាន​និង​កំពុង​ដើរ​តួ​នាទី​យ៉ាង​សំខាន់​បំផុត​ជា GUI (Graphic User Interface) សំរាប់​កម្មវិធី​កំព្យូទ័រ​ស្ទើរ​គ្រប់​ប្រភេទ​ទាំងអស់ ទាំងនៅ​លើ​បណ្តាញ Internet (web application) ទាំងនៅ​ក្រៅ​បណ្តាញ​ Internet (desktop application) ។

ជាក់ស្តែង ក្រុមហ៊ុន Google បាន​បង្កើត​នូវ​កម្មវិធី​មួយ​ចំនួន​មាន​ដូច​ជា Google Docs, Google Sheets, និង Google Slides ជាដើម ដែល​អាច​ដំណើរការ​បាន​នៅ​លើ browser គ្រប់​ប្រភេទ​ទាំងអស់ និង​ដែល​មាន​លក្ខណៈ​និង​គុណភាព​ដូច​គ្នា​បេះបិទ​ទៅ​នឹង​កម្មវិធី Word, Exel និង PowerPoint របស់​ក្រុមហ៊ុន​ Microsoft ។

មួយវិញទៀត ដោយ​ហេតុថា​គ្រប់​កម្មវិធី​នៅ​លើ​បណ្តាញ​ទាំងអស់​ត្រូវ​បាន​បង្កើត​ឡើង​នៅ​លើ server ដូចនេះ​អ្នក​ប្រើប្រាស់​មិន​ចាំបាច់​ដំឡើង​អ្វី​ឡើយ គឺ​មាន​តែ​ browser មួយ​សំរាប់​បើក​កម្មវិធី​ទាំងនោះ គឺ​ជា​ការស្រេច​។

យ៉ាងណាម៉ិញ បច្ចេកវិទ្យា​ចុង​ក្រោយ​គេ ដែល​គួរ​អោយ​ចាប់​អារម្មណ៍​ជាង​គេ​នៅ​ក្នុង​ HTML5 នោះ គឺ​មូលដ្ឋាន​ទិន្នន័យ IndexedDB និង WebGL ។ ជាលទ្ធផល យើង​អាច​ប្រើប្រាស់​ក្បួនខ្នាត​ជា​ភាសា JS ទាំងឡាយ ក្នុង​ការបង្កើត​កម្មវិធី​មូលដ្ឋាន​ទិន្នន័យ​ដ៏ពេញ​លក្ខណៈ​ផ្សេង​ៗ​ ដែល​អាច​ដំណើរការ​នៅ​លើ browser យ៉ាងរលូន ​ដោយ​គ្មាន​បញ្ហា​អ្វី​ឡើយ​។

លើស​ពី​នេះទៀត យើង​ក៏​អាច​ប្រើប្រាស់​ក្បួន​ខ្នាត​ជា​ភាសា JS របស់​បច្ចេកវិទ្យា WebGL ផង​ដែរ​ ក្នុង​ការបង្កើត​កម្មវិធី 3D graphic ដ៏​ពេញ​លក្ខណៈ​ទាំងឡាយ ដែល​អាច​ដំណើរការ​បាន​នៅ​លើ​ browser ដូច​ជា​កម្មវិធី​ខាង​ក្រោម​នេះ​ជាដើម៖
<!DOCTYPE html>
<html>
  <head>
    <link href='https://fonts.googleapis.com/css?family=Odor+Mean+Chey' rel='stylesheet'>
    
    
    
  </head>
  <body style="font:14px/1.5 'Odor Mean Chey'">
  
  	<canvas id="renderCanvas" style="width:100%;height:100%;touch-action:none;"></canvas>
    
    <script>
		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();
      });
    </script>
  </body>
</html>