Доступ к контексту WebGL
Дата публикации: 18.02.2013
WebGL контекст — это обработчик (точнее объект JavaScript), через который можно получить доступ ко всем функциям WebGL и атрибутам. Они представляют собой приложения WebGL в программный интерфейс (API).
Сейчас мы создадим функцию JavaScript, которая будем проверять, можем ли мы получить WebGL контекст на канве или нет. В отличие от других библиотек JavaScript, которые должны быть загружены и включены в работу проекта, WebGL уже находится в Вашем браузере. Другими словами, если вы используете современный браузер, с поддержкой WebGL, то ничего дополнительного вам устанавливать или подключать не нужно.
var gl = null;
function getGLContext(){
var canvas = document.getElementById("canvas-element-id");
if (canvas == null){
alert("there is no canvas on this page");
return;
}
try {
// Попробуем взять стандартный контекст. Если это не удается, берем экспериментальный.
gl = canvas.getContext("webgl") || canvas.getContext("experimental-webgl");
}
catch(e) {}
if (gl == null){
alert("WebGL не поддерживается");
}
else{
alert("Ура! Вы получили WebGL контекст");
}
}
Нам нужно вызвать функцию при срабатывании события onload. Демо пример
Из этого примера мы научились создавать WebGL контекст, теперь поиграем с некоторыми атрибутами контекста.
Задача — написать скрипт, который бы по нажатию клавиш, к пример «1» и «2» менял цвет нашей области для рисования, а по нажатию клавиши «3», получали атрибуты выбранного цвета
var gl = null;
var c_width = 0;
var c_height = 0;
window.onkeydown = checkKey;
function checkKey(ev){
switch(ev.keyCode){
case 49:{ // 1
// Устанавливаем цвет для закрашивания фона
gl.clearColor(0.3,0.7,0.2,1.0);
clear(gl);
break;
}
case 50:{ // 2
// Устанавливаем цвет для закрашивания фона
gl.clearColor(0.3,0.2,0.7,1.0);
clear(gl);
break;
}
case 51:{ // 3
// Получаем параметры установленного цвета
var color = gl.getParameter(gl.COLOR_CLEAR_VALUE);
alert('clearColor = (' + Math.round(color[0]*10)/10 + ',' +Math.round(color[1]*10)/10+','+Math.round(color[2]*10)/10+')');
window.focus();
break;
}
}
}
function getGLContext(){
var canvas = document.getElementById("canvas-element-id");
if (canvas == null){
alert("there is no canvas on this page");
return;
}
var ctx = null;
try {
// Попробуем взять стандартный контекст. Если это не удается, берем экспериментальный.
ctx = canvas.getContext("webgl") || canvas.getContext("experimental-webgl");
}
catch(e) {}
if (ctx == null){
alert("WebGL is not available");
}
else{
return ctx;
}
}
function clear(ctx){
// Закрашиваем область установленным цветом
ctx.clear(ctx.COLOR_BUFFER_BIT);
// Определяем рабочую область
ctx.viewport(0,0,c_width, c_height);
}
function initWebGL(){
gl = getGLContext();
}
Нам нужно вызвать функцию при срабатывании события onload. Демо пример
