WebGL позволÑÐµÑ Ð²ÐµÐ±-конÑенÑÑ Ð¸ÑполÑзоваÑÑ API, оÑнованнÑй на OpenGL ES 2.0, Ð´Ð»Ñ Ð²Ð¸Ð·ÑализаÑии ÑÑÑÑ
меÑной гÑаÑики без иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ð»Ð°Ð³Ð¸Ð½Ð¾Ð² в HTML ÑлеменÑе canvas
в бÑаÑзеÑаÑ
, коÑоÑÑе оÑÑÑеÑÑвлÑÑÑ ÐµÐ³Ð¾ поддеÑжкÑ. WebGL пÑогÑÐ°Ð¼Ð¼Ñ ÑоÑÑоÑÑ Ð¸Ð· кода ÑпÑавлениÑ, напиÑанном на JavaScript и кода ÑпеÑиалÑнÑÑ
ÑÑÑекÑов (ÑейдеÑного кода), коÑоÑÑй вÑполнÑеÑÑÑ Ð½Ð° гÑаÑиÑеÑком пÑоÑеÑÑоÑе. WebGL ÑлеменÑÑ Ð¼Ð¾Ð³ÑÑ Ð±ÑÑÑ ÑмеÑÐ°Ð½Ñ Ñ Ð´ÑÑгими HTML-ÑлеменÑами и ÑобÑÐ°Ð½Ñ Ñ Ð´ÑÑгими ÑаÑÑÑми веб-ÑÑÑаниÑÑ Ð¸Ð»Ð¸ Ñоном веб-ÑÑÑаниÑÑ.
ÐÑа ÑÑаÑÑÑ Ð·Ð½Ð°ÐºÐ¾Ð¼Ð¸Ñ Ð²Ð°Ñ Ñ Ð¾Ñновами иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ WebGL. ÐÑедполагаеÑÑÑ, ÑÑо Ð²Ñ Ñже Ð·Ð½Ð°ÐºÐ¾Ð¼Ñ Ñ Ð¼Ð°ÑемаÑиÑеÑкими оÑновами ÑÑÑÑ Ð¼ÐµÑной гÑаÑики. ÐÐ°Ð½Ð½Ð°Ñ ÑÑаÑÑÑ Ð½Ðµ обÑÑÐ¸Ñ Ð²Ð°Ñ OpenGL.
ÐодгоÑовка к визÑализаÑии в 3DÐеÑвое, ÑÑо вам понадобиÑÑÑ Ð´Ð»Ñ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ WebGL Ð´Ð»Ñ Ð²Ð¸Ð·ÑализаÑии в 3D - ÑÑо ÑÐ»ÐµÐ¼ÐµÐ½Ñ canvas. ФÑÐ°Ð³Ð¼ÐµÐ½Ñ Ð½Ð° HTML ниже ÑодеÑÐ¶Ð¸Ñ ÑÐ»ÐµÐ¼ÐµÐ½Ñ canvas и опÑеделÑÐµÑ Ð¾Ð±ÑабоÑÑик ÑобÑÑÐ¸Ñ onload
, коÑоÑое иниÑиализиÑÑÐµÑ Ð½Ð°Ñ ÐºÐ¾Ð½ÑекÑÑ WebGL.
<body onload="start()">
<canvas id="glcanvas" width="640" height="480">
Your browser doesn't appear to support the HTML5
<code><canvas></code> element.
</canvas>
</body>
ÐодгоÑовка конÑекÑÑа WebGL
ФÑнкÑÐ¸Ñ start()
, в наÑем JavaScript-коде вÑзÑваеÑÑÑ Ð¿Ð¾Ñле загÑÑзки докÑменÑа. ÐÑ Ð½Ð°Ð·Ð½Ð°Ñение - наÑÑÑойка конÑекÑÑа WebGL и наÑаÑÑ Ð¾ÑÑиÑÐ¾Ð²ÐºÑ ÑодеÑжимого.
var gl; // глобалÑÐ½Ð°Ñ Ð¿ÐµÑÐµÐ¼ÐµÐ½Ð½Ð°Ñ Ð´Ð»Ñ ÐºÐ¾Ð½ÑекÑÑа WebGL
function start() {
var canvas = document.getElementById("glcanvas");
gl = initWebGL(canvas); // иниÑиализаÑÐ¸Ñ ÐºÐ¾Ð½ÑекÑÑа GL
// пÑодолжаÑÑ ÑолÑко еÑли WebGL доÑÑÑпен и ÑабоÑаеÑ
if (gl) {
gl.clearColor(0.0, 0.0, 0.0, 1.0); // ÑÑÑановиÑÑ Ð² каÑеÑÑве ÑвеÑа оÑиÑÑки бÑÑеÑа ÑвеÑа ÑÑÑнÑй, Ð¿Ð¾Ð»Ð½Ð°Ñ Ð½ÐµÐ¿ÑозÑаÑноÑÑÑ
gl.enable(gl.DEPTH_TEST); // вклÑÑÐ°ÐµÑ Ð¸ÑполÑзование бÑÑеÑа глÑбинÑ
gl.depthFunc(gl.LEQUAL); // опÑеделÑÐµÑ ÑабоÑÑ Ð±ÑÑеÑа глÑбинÑ: более ближние обÑекÑÑ Ð¿ÐµÑекÑÑваÑÑ Ð´Ð°Ð»Ñние
gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT); // оÑиÑÑиÑÑ Ð±ÑÑÐµÑ ÑвеÑа и бÑÑÐµÑ Ð³Ð»ÑбинÑ.
}
}
ÐеÑвое, ÑÑо Ð¼Ñ Ð·Ð´ÐµÑÑ Ð´ÐµÐ»Ð°ÐµÐ¼ - полÑÑаем ÑÑÑÐ»ÐºÑ Ð½Ð° ÑÐ»ÐµÐ¼ÐµÐ½Ñ canvas, помеÑаем ÐµÑ Ð² пеÑеменнÑÑ canvas
. ÐÑевидно, ÑÑо еÑли вам не ÑÑебÑеÑÑÑ Ð¼Ð½Ð¾Ð³Ð¾ÐºÑаÑно полÑÑаÑÑ ÑÑÑÐ»ÐºÑ Ð½Ð° canvas, Ð²Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ Ð¸Ð·Ð±ÐµÐ¶Ð°ÑÑ ÑоÑ
ÑÐ°Ð½ÐµÐ½Ð¸Ñ ÑÑого знаÑÐµÐ½Ð¸Ñ Ð³Ð»Ð¾Ð±Ð°Ð»Ñно, а ÑолÑко ÑоÑ
ÑаниÑÑ ÐµÑ Ð² локалÑной пеÑеменной или в поле обÑекÑа.
Ðак ÑолÑко Ð¼Ñ Ð¿Ð¾Ð»ÑÑили ÑÑÑÐ»ÐºÑ Ð½Ð° canvas, Ð¼Ñ Ð²ÑзÑваем ÑÑнкÑÐ¸Ñ initWebGL()
; ÐÑÑ ÑÑнкÑÐ¸Ñ Ð¼Ñ Ð¾Ð¿ÑеделÑем незамедлиÑелÑно, ÐµÑ ÑабоÑа - иниÑиализиÑоваÑÑ ÐºÐ¾Ð½ÑекÑÑ WebGL.
ÐÑли конÑекÑÑ ÑÑпеÑно иниÑиализиÑован, в gl
бÑÐ´ÐµÑ ÑодеÑжаÑÑÑÑ ÑÑÑлка на него. Ð ÑÑом ÑлÑÑае, Ð¼Ñ ÑÑÑанавливаем ÑÐ²ÐµÑ Ð¾ÑиÑÑки бÑÑеÑа ÑвеÑа (ÑÐ²ÐµÑ Ñона) на ÑÑÑнÑй, заÑем оÑиÑаем конÑекÑÑ ÑÑим ÑвеÑом. ÐоÑле ÑÑого, конÑекÑÑ ÐºÐ¾Ð½ÑигÑÑиÑÑеÑÑÑ Ð¿Ð°ÑамеÑÑами наÑÑÑойки. Рданном ÑлÑÑае, Ð¼Ñ Ð²ÐºÐ»ÑÑаем бÑÑÐµÑ Ð³Ð»ÑÐ±Ð¸Ð½Ñ Ð¸ опÑеделÑем, ÑÑо более близкие обÑекÑÑ Ð±ÑдÑÑ Ð¿ÐµÑекÑÑваÑÑ Ð±Ð¾Ð»ÐµÐµ далÑние.
ÐÑÑ Ð²ÑÑепеÑеÑиÑленное Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ ÑделаÑÑ ÑолÑко Ð´Ð»Ñ Ð¿ÐµÑвонаÑалÑной иниÑиализаÑии. ЧÑÑÑ Ð¿Ð¾Ð·Ð¶Ðµ Ð¼Ñ Ñвидим ÑабоÑÑ Ð¿Ð¾ визÑализаÑии ÑÑÑÑ Ð¼ÐµÑнÑÑ Ð¾Ð±ÑекÑов.
Создание конÑекÑÑа WebGLФÑнкÑÐ¸Ñ initWebGL()
вÑглÑÐ´Ð¸Ñ ÑледÑÑÑим обÑазом:
function initWebGL(canvas) {
gl = null;
try {
// ÐопÑÑаÑÑÑÑ Ð¿Ð¾Ð»ÑÑиÑÑ ÑÑандаÑÑнÑй конÑекÑÑ. ÐÑли не полÑÑиÑÑÑ, попÑобоваÑÑ Ð¿Ð¾Ð»ÑÑиÑÑ ÑкÑпеÑименÑалÑнÑй.
gl = canvas.getContext("webgl") || canvas.getContext("experimental-webgl");
} catch (e) {}
// ÐÑли Ð¼Ñ Ð½Ðµ полÑÑили конÑекÑÑ GL, завеÑÑиÑÑ ÑабоÑÑ
if (!gl) {
alert("Unable to initialize WebGL. Your browser may not support it.");
gl = null;
}
return gl;
}
ЧÑÐ¾Ð±Ñ Ð¿Ð¾Ð»ÑÑиÑÑ ÐºÐ¾Ð½ÑекÑÑ WebGL Ð´Ð»Ñ canvas, Ð¼Ñ Ð·Ð°Ð¿ÑаÑиваем Ñ ÑлеменÑа canvas конÑекÑÑ Ð¸Ð¼ÐµÐ½ÑемÑй как "webgl". ÐÑли Ð´Ð°Ð½Ð½Ð°Ñ Ð¿Ð¾Ð¿ÑÑка завеÑÑаеÑÑÑ Ð½ÐµÑдаÑно, Ð¼Ñ Ð¿ÑÑаемÑÑ Ð¿Ð¾Ð»ÑÑиÑÑ ÐºÐ¾Ð½ÑекÑÑ, именÑемÑй как "experimental-webgl". ÐÑли Ð´Ð°Ð½Ð½Ð°Ñ Ð¿Ð¾Ð¿ÑÑка Ñакже завеÑÑаеÑÑÑ Ð½ÐµÑдаÑно, Ð¼Ñ Ð¾ÑобÑажаем окно Ñ Ð¿ÑедÑпÑеждением, позволÑÑÑим полÑзоваÑÐµÐ»Ñ Ð¿Ð¾Ð½ÑÑÑ, ÑÑо его бÑаÑÐ·ÐµÑ Ð½Ðµ поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ WebGL. ÐÑо вÑÑ, ÑÑо необÑ
одимо ÑделаÑÑ. Ðа данном ÑÑапе Ð¼Ñ Ð±Ñдем имеÑÑ Ð² пеÑеменной gl
либо знаÑение null (ознаÑаÑÑее, ÑÑо конÑекÑÑ WebGL не доÑÑÑпен), либо ÑÑÑÐ»ÐºÑ Ð½Ð° конÑекÑÑ WebGL в коÑоÑом, Ð¼Ñ Ð±Ñдем пÑоизводиÑÑ Ð¾ÑÑиÑовкÑ.
ÐÑимеÑание: ÐонÑекÑÑ, именÑемÑй как "experimental-webgl" - ÑÑо вÑеменное Ð¸Ð¼Ñ Ð´Ð»Ñ ÐºÐ¾Ð½ÑекÑÑа, иÑполÑзÑемое на вÑÐµÐ¼Ñ Ð¿ÑоÑеÑÑа ÑазÑабоÑки ÑпеÑиÑикаÑии. ÐоÑле Ñого, как ÑпеÑиÑикаÑÐ¸Ñ Ð±ÑÐ´ÐµÑ Ð¿Ð¾Ð»Ð½Ð¾ÑÑÑÑ ÑазÑабоÑана бÑÐ´ÐµÑ Ð¸ÑполÑзоваÑÑÑÑ ÑолÑко Ð¸Ð¼Ñ ÐºÐ¾Ð½ÑекÑÑа "webgl".
Ðа данном ÑÑапе ÑÑого кода доÑÑаÑоÑно, ÑÑÐ¾Ð±Ñ ÑÑпеÑно иниÑиализиÑоваÑÑ ÐºÐ¾Ð½ÑекÑÑ WebGL, и Ð²Ñ ÑвидиÑе пÑÑÑой ÑÑÑнÑй блок, гоÑовÑй к Ð·Ð°Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ ÐºÐ¾Ð½ÑенÑом.
ÐÑли Ð²Ð°Ñ Ð±ÑаÑÐ·ÐµÑ Ð¿Ð¾Ð´Ð´ÐµÑÐ¶Ð¸Ð²Ð°ÐµÑ WebGL, Ñо Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе поÑмоÑÑеÑÑ ÑезÑлÑÑÐ°Ñ Ð²ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¿ÑиведÑнного вÑÑе кода, ÑÑлкнÑв по ÑÑой ÑÑÑлке.
Ðзменение ÑазмеÑа конÑекÑÑа WebGLÐовÑй конÑекÑÑ WebGL бÑÐ´ÐµÑ Ð¸Ð¼ÐµÑÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑ Ð·Ð°Ð´Ð°Ð½Ð¸Ñ ÑазмеÑов облаÑÑи оÑобÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð² Ð¼Ð¾Ð¼ÐµÐ½Ñ Ð¿Ð¾Ð»ÑÑÐµÐ½Ð¸Ñ ÐºÐ¾Ð½ÑекÑÑа пÑÑÑм Ð·Ð°Ð´Ð°Ð½Ð¸Ñ Ð²ÑÑоÑÑ Ð¸ ÑиÑÐ¸Ð½Ñ ÑлеменÑа canvas, без иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ CSS. РедакÑиÑование ÑÑÐ¸Ð»Ñ ÑлеменÑа canvas бÑÐ´ÐµÑ Ð¸Ð·Ð¼ÐµÐ½ÑÑÑ ÐµÐ³Ð¾ оÑобÑажаемÑй ÑазмеÑ, без Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ ÑазмеÑов облаÑÑи оÑÑиÑовки. РедакÑиÑование аÑÑибÑÑов ÑиÑÐ¸Ð½Ñ Ð¸ вÑÑоÑÑ ÑлеменÑа canvas поÑле ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ ÐºÐ¾Ð½ÑекÑÑа не бÑÐ´ÐµÑ Ñакже изменÑÑÑ ÑиÑло пикÑелей Ð´Ð»Ñ Ð¾ÑÑиÑовки. ЧÑÐ¾Ð±Ñ Ð¸Ð·Ð¼ÐµÐ½Ð¸ÑÑ ÑÐ°Ð·Ð¼ÐµÑ Ð¾Ð±Ð»Ð°ÑÑи оÑÑиÑовки, Ñ ÐºÐ¾ÑоÑой WebGL пÑÐ¾Ð¸Ð·Ð²Ð¾Ð´Ð¸Ñ ÑабоÑÑ, напÑимеÑ, когда полÑзоваÑÐµÐ»Ñ Ð¸Ð·Ð¼ÐµÐ½ÑÐµÑ ÑÐ°Ð·Ð¼ÐµÑ Ð¾ÐºÐ½Ð° на веÑÑ ÑкÑан или когда вам необÑ
одимо менÑÑÑ Ð½Ð°ÑÑÑойки гÑаÑики в Ñамом пÑиложении, вам необÑ
одимо вÑзваÑÑ ÐºÐ¾Ð½ÑекÑÑнÑÑ ÑÑнкÑÐ¸Ñ WebGL viewport()
, ÑÑÐ¾Ð±Ñ Ð¿Ð¾Ð´ÑвеÑдиÑÑ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ.
ЧÑÐ¾Ð±Ñ Ð¸Ð·Ð¼ÐµÐ½Ð¸ÑÑ ÑÐ°Ð·Ð¼ÐµÑ Ð¾Ð±Ð»Ð°ÑÑи оÑÑиÑовки конÑекÑÑа WebGL Ñ Ð¿ÐµÑеменнÑми gl
и canvas
, иÑполÑзÑÑÑимиÑÑ Ð² пÑимеÑе вÑÑе:
gl.viewport(0, 0, canvas.width, canvas.height);
ÐÐ»ÐµÐ¼ÐµÐ½Ñ canvas бÑÐ´ÐµÑ Ð¸Ð·Ð¼ÐµÐ½ÑÑÑ ÑазмеÑ, в ÑлÑÑае, еÑли его оÑÑиÑоваÑÑ Ñ Ð´ÑÑгими ÑазмеÑами облаÑÑи оÑÑиÑовки, Ñем Ñе, ÑÑо ÑÐºÐ°Ð·Ð°Ð½Ñ Ð² его ÑÑилÑÑ CSS, ÑоглаÑно коÑоÑÑм он Ð·Ð°Ð½Ð¸Ð¼Ð°ÐµÑ Ð¼ÐµÑÑо на ÑкÑане. Ðзменение ÑазмеÑа Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ CSS наиболее полезно Ð´Ð»Ñ ÑÐ¾Ñ ÑÐ°Ð½ÐµÐ½Ð¸Ñ ÑеÑÑÑÑов, оÑÑиÑовÑÐ²Ð°Ñ Ñ Ð½Ð¸Ð·ÐºÐ¸Ð¼ ÑазÑеÑением и позволÑÑ Ð±ÑаÑзеÑÑ ÑаÑÑÑгиваÑÑ Ð¿Ð¾Ð»ÑÑеннÑй ÑезÑлÑÑаÑ; ÑжимаÑÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ пÑи иÑполÑзовании ÑÑÑекÑа избÑÑоÑной вÑбоÑки ÑÐ³Ð»Ð°Ð¶Ð¸Ð²Ð°Ð½Ð¸Ñ ( super sample antialiasing - SSAA) (пÑÐ¸Ð²Ð¾Ð´Ð¸Ñ Ðº менее пÑиемлемÑм ÑезÑлÑÑаÑам и ÑеÑÑÑзнÑм поÑеÑÑм пÑоизводиÑелÑноÑÑи). РболÑÑинÑÑве ÑлÑÑаев лÑÑÑе полагаÑÑÑÑ Ð½Ð° множеÑÑвеннÑÑ Ð²ÑбоÑÐºÑ ÑÐ³Ð»Ð°Ð¶Ð¸Ð²Ð°Ð½Ð¸Ñ (MSAA) и на ÑеализаÑÐ¸Ñ Ð°Ð»Ð³Ð¾ÑиÑмов ÑилÑÑÑаÑии ÑекÑÑÑÑ, коÑоÑÑе поддеÑживаÑÑÑÑ Ð±ÑаÑзеÑом полÑзоваÑелÑ, Ñем делаÑÑ Ñо же Ñамое поÑÑедÑÑвом гÑÑбой ÑÐ¸Ð»Ñ Ð¸ надеÑÑÑÑÑ, ÑÑо алгоÑиÑм маÑÑÑабиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¸Ð·Ð¾Ð±Ñажений, иÑполÑзÑемÑй бÑаÑзеÑом, вÑдаÑÑ ÐºÑаÑивÑй ÑезÑлÑÑаÑ.
СмоÑÑиÑе ÑакжеRetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4