From 1140e54ccfc9e828ffe62f9384c91dcd9dcfe8cf Mon Sep 17 00:00:00 2001
From: greggman
Date: Wed, 15 Jan 2025 04:50:34 +0000
Subject: [PATCH] =?UTF-8?q?Deploying=20to=20gh-pages=20from=20=20@=20ca702?=
=?UTF-8?q?ba92756f5a1fc25785a24dcd61bf8a42533=20=F0=9F=9A=80?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
atom.xml | 602 +++++++++---------
contributors.js | 2 +-
webgl/lessons/atom.xml | 602 +++++++++---------
webgl/lessons/de/atom.xml | 10 +-
webgl/lessons/ja/atom.xml | 38 +-
webgl/lessons/ja/webgl-how-it-works.html | 45 +-
webgl/lessons/ja/webgl1-to-webgl2.html | 81 +--
webgl/lessons/ko/atom.xml | 250 ++++----
webgl/lessons/ko/webgl-2d-drawimage.html | 19 +-
webgl/lessons/ko/webgl-2d-vs-3d-library.html | 30 +-
webgl/lessons/ko/webgl-3d-orthographic.html | 29 +-
webgl/lessons/ko/webgl-how-it-works.html | 45 +-
.../lessons/ko/webgl-less-code-more-fun.html | 64 +-
.../ko/webgl-planar-projection-mapping.html | 41 +-
webgl/lessons/ko/webgl1-to-webgl2.html | 87 +--
webgl/lessons/pt-br/atom.xml | 74 +--
.../lessons/pt-br/webgl-2d-vs-3d-library.html | 30 +-
webgl/lessons/pt-br/webgl1-to-webgl2.html | 61 +-
webgl/lessons/webgl-2d-drawimage.html | 19 +-
webgl/lessons/webgl-2d-vs-3d-library.html | 30 +-
webgl/lessons/webgl-less-code-more-fun.html | 64 +-
webgl/lessons/webgl-load-obj-w-mtl.html | 15 +-
.../webgl-planar-projection-mapping.html | 41 +-
webgl/lessons/webgl1-to-webgl2.html | 81 +--
webgl/lessons/zh_cn/atom.xml | 222 +++----
webgl/lessons/zh_cn/webgl-2d-drawimage.html | 20 +-
.../zh_cn/webgl-3d-geometry-lathe.html | 40 +-
.../lessons/zh_cn/webgl-3d-orthographic.html | 26 +-
webgl/lessons/zh_cn/webgl-how-it-works.html | 28 +-
.../zh_cn/webgl-less-code-more-fun.html | 56 +-
webgl/lessons/zh_cn/webgl-load-obj-w-mtl.html | 11 +-
.../webgl-planar-projection-mapping.html | 22 +-
webgl/lessons/zh_cn/webgl1-to-webgl2.html | 81 +--
33 files changed, 1453 insertions(+), 1413 deletions(-)
diff --git a/atom.xml b/atom.xml
index 53d9d479..316ac38d 100644
--- a/atom.xml
+++ b/atom.xml
@@ -2,7 +2,7 @@
WebGL2 Fundamentals
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://github.com/jpmonette/feed
WebGL2Fundamentals Contributors
@@ -15,1650 +15,1650 @@
https://webgl2fundamentals.org/webgl/lessons/webgl-2-textures.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-2d-drawimage.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-2d-matrices.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-2d-matrix-stack.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-2d-rotation.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-2d-scale.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-2d-translation.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-2d-vs-3d-library.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-3d-camera.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-3d-geometry-lathe.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-3d-lighting-directional.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-3d-lighting-normal-mapping.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-3d-lighting-point.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-3d-lighting-spot.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-3d-orthographic.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-3d-perspective-correct-texturemapping.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-3d-perspective.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-3d-textures.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-and-alpha.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-animation.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-anti-patterns.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-attributes.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-boilerplate.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-cors-permission.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-cross-platform-issues.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-cube-maps.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-data-textures.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-drawing-multiple-things.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-drawing-without-data.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-environment-maps.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-fog.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-framebuffers.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-fundamentals.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-getting-webgl2.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-gpgpu.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-how-it-works.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-image-processing-continued.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-image-processing.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-indexed-vertices.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-instanced-drawing.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-less-code-more-fun.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-load-obj-w-mtl.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-load-obj.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-matrix-naming.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-matrix-vs-math.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-multiple-views.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-picking.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-planar-projection-mapping.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-points-lines-triangles.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-precision-issues.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-pulling-vertices.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-a-simple-way-to-show-the-load-on-the-gpu-s-vertex-and-fragment-processing-.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-accessing-textures-by-pixel-coordinate-in-webgl2.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-apply-a-displacement-map-and-specular-map.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-can-anyone-explain-what-this-glsl-fragment-shader-is-doing-.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-can-i-mute-the-warning-about-vertex-attrib-0-being-disabled-.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-create-image-warping-effect-in-webgl.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-creating-a-smudge-liquify-effect.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-determine-min-max-values-for-the-entire-image.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-don-t-blend-a-polygon-that-crosses-itself.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-drawing-2d-image-with-depth-map-to-achieve-pseudo-3d-effect.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-drawing-a-heightmap.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-drawing-layers-with-different-points.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-drawing-many-different-models-in-a-single-draw-call.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-drawing-textured-sprites-with-instanced-drawing.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-efficient-particle-system-in-javascript---webgl-.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-emulating-palette-based-graphics-in-webgl.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-fps-like-camera-movement-with-basic-matrix-transformations.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-get-the-size-of-a-point-for-collision-checking.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-glsl-shader-to-support-coloring-and-texturing.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-how-can-i-compute-for-500-points-which-of-1000-line-segments-is-nearest-to-each-point-.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-how-can-i-create-a-16bit-historgram-of-16bit-data.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-how-can-i-get-all-the-uniforms-and-uniformblocks.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-how-can-i-move-the-perspective-vanishing-point-from-the-center-of-the-canvas-.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-how-to-achieve-moving-line-with-trail-effects.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-how-to-bind-an-array-of-textures-to-a-webgl-shader-uniform-.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-how-to-blend-colors-across-2-triangles.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-how-to-control-the-color-between-vertices.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-how-to-create-a-torus.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-how-to-detect-clipped-triangles-in-the-framgment-shader.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-how-to-determine-the-average-brightness-in-a-scene-.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-how-to-draw-correctly-textured-trapezoid-polygons.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-how-to-fade-the-drawing-buffer.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-how-to-get-audio-data-into-a-shader.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:30.595Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-how-to-get-code-completion-for-webgl-in-visual-studio-code.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-how-to-get-pixelize-effect-in-webgl-.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-how-to-get-the-3d-coordinates-of-a-mouse-click.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-how-to-implement-zoom-from-mouse-in-2d-webgl.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-how-to-import-a-heightmap-in-webgl.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-how-to-load-images-in-the-background-with-no-jank.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-how-to-make-a-smudge-brush-tool.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-how-to-make-webgl-canvas-transparent.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-how-to-optimize-rendering-a-ui.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-how-to-prevent-texture-bleeding-with-a-texture-atlas.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-how-to-process-particle-positions.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-how-to-read-a-single-component-with-readpixels.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-how-to-render-large-scale-images-like-32000x32000.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-how-to-simulate-a-3d-texture-in-webgl.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-how-to-support-both-webgl-and-webgl2.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-how-to-tell-if-an-image-has-an-alpha-channel.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-how-to-use-a-2d-sprite-s-transparency-as-a-mask.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-how-to-use-texture--and-color-also-in-webgl-.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-how-to-use-textures-as-data.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-how-to-use-the-stencil-buffer.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-how-to-write-a-web-based-music-visualizer.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-i-get-invalid-type-error-when-calling-readpixels.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-is-it-possible-to-measure-rendering-time-in-webgl-using-gl-finish---.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-is-there-the-notion-of-a-generalized-vertex-and-fragment-shader-.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-optimize-drawing-lots-of-large-images.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-passing-in-per-sprite-alpha-values-when-batching.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-pure-webgl-dashed-line.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-recording-fps-in-webgl.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-rendering-slowly-over-time.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-setting-the-values-of-a-struct-array-from-js-to-glsl.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-show-a-night-view-vs-a-day-view-on-a-3d-earth-sphere.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-sorting-and-optimizing-instanced-rendering.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-tex-image-texture_2d-level-0-is-incurring-lazy-initialization.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-the-fastest-way-to-draw-many-circles.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-webgl-2d-tilemaps.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-webgl-droste-effect.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-what-is-the-local-origin-of-a-3d-model-.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-when-to-choose-highp--mediump--lowp-in-shaders.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-working-around-gl_pointsize-limitations-webgl.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-zooming-to-and-stopping-at-object-in-a-scene-in-webgl.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-readpixels.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-references.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-render-to-texture.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-resizing-the-canvas.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-scene-graph.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-setup-and-installation.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-shaders-and-glsl.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-shadertoy.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-shadows-continued.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-shadows.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-skinning.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-skybox.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-smallest-programs.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-sprites.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-state-diagram.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-text-canvas2d.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-text-glyphs.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-text-html.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-text-texture.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-texture-units.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-tips.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-visualizing-the-camera.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl1-to-webgl2-fundamentals.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl1-to-webgl2.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl2-whats-new.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
\ No newline at end of file
diff --git a/contributors.js b/contributors.js
index 1fda43ce..a9877c1d 100644
--- a/contributors.js
+++ b/contributors.js
@@ -1,2 +1,2 @@
-const contributors = [{"login":"greggman","id":234804,"node_id":"MDQ6VXNlcjIzNDgwNA==","avatar_url":"https://avatars.githubusercontent.com/u/234804?v=4","gravatar_id":"","url":"https://api.github.com/users/greggman","html_url":"https://github.com/greggman","followers_url":"https://api.github.com/users/greggman/followers","following_url":"https://api.github.com/users/greggman/following{/other_user}","gists_url":"https://api.github.com/users/greggman/gists{/gist_id}","starred_url":"https://api.github.com/users/greggman/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/greggman/subscriptions","organizations_url":"https://api.github.com/users/greggman/orgs","repos_url":"https://api.github.com/users/greggman/repos","events_url":"https://api.github.com/users/greggman/events{/privacy}","received_events_url":"https://api.github.com/users/greggman/received_events","type":"User","user_view_type":"public","site_admin":false,"contributions":1318},{"login":"diskhkme","id":7402686,"node_id":"MDQ6VXNlcjc0MDI2ODY=","avatar_url":"https://avatars.githubusercontent.com/u/7402686?v=4","gravatar_id":"","url":"https://api.github.com/users/diskhkme","html_url":"https://github.com/diskhkme","followers_url":"https://api.github.com/users/diskhkme/followers","following_url":"https://api.github.com/users/diskhkme/following{/other_user}","gists_url":"https://api.github.com/users/diskhkme/gists{/gist_id}","starred_url":"https://api.github.com/users/diskhkme/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/diskhkme/subscriptions","organizations_url":"https://api.github.com/users/diskhkme/orgs","repos_url":"https://api.github.com/users/diskhkme/repos","events_url":"https://api.github.com/users/diskhkme/events{/privacy}","received_events_url":"https://api.github.com/users/diskhkme/received_events","type":"User","user_view_type":"public","site_admin":false,"contributions":70},{"login":"jeongsd","id":7903426,"node_id":"MDQ6VXNlcjc5MDM0MjY=","avatar_url":"https://avatars.githubusercontent.com/u/7903426?v=4","gravatar_id":"","url":"https://api.github.com/users/jeongsd","html_url":"https://github.com/jeongsd","followers_url":"https://api.github.com/users/jeongsd/followers","following_url":"https://api.github.com/users/jeongsd/following{/other_user}","gists_url":"https://api.github.com/users/jeongsd/gists{/gist_id}","starred_url":"https://api.github.com/users/jeongsd/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jeongsd/subscriptions","organizations_url":"https://api.github.com/users/jeongsd/orgs","repos_url":"https://api.github.com/users/jeongsd/repos","events_url":"https://api.github.com/users/jeongsd/events{/privacy}","received_events_url":"https://api.github.com/users/jeongsd/received_events","type":"User","user_view_type":"public","site_admin":false,"contributions":37},{"login":"ihwf","id":17941662,"node_id":"MDQ6VXNlcjE3OTQxNjYy","avatar_url":"https://avatars.githubusercontent.com/u/17941662?v=4","gravatar_id":"","url":"https://api.github.com/users/ihwf","html_url":"https://github.com/ihwf","followers_url":"https://api.github.com/users/ihwf/followers","following_url":"https://api.github.com/users/ihwf/following{/other_user}","gists_url":"https://api.github.com/users/ihwf/gists{/gist_id}","starred_url":"https://api.github.com/users/ihwf/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ihwf/subscriptions","organizations_url":"https://api.github.com/users/ihwf/orgs","repos_url":"https://api.github.com/users/ihwf/repos","events_url":"https://api.github.com/users/ihwf/events{/privacy}","received_events_url":"https://api.github.com/users/ihwf/received_events","type":"User","user_view_type":"public","site_admin":false,"contributions":20},{"login":"joonas-yoon","id":9527681,"node_id":"MDQ6VXNlcjk1Mjc2ODE=","avatar_url":"https://avatars.githubusercontent.com/u/9527681?v=4","gravatar_id":"","url":"https://api.github.com/users/joonas-yoon","html_url":"https://github.com/joonas-yoon","followers_url":"https://api.github.com/users/joonas-yoon/followers","following_url":"https://api.github.com/users/joonas-yoon/following{/other_user}","gists_url":"https://api.github.com/users/joonas-yoon/gists{/gist_id}","starred_url":"https://api.github.com/users/joonas-yoon/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/joonas-yoon/subscriptions","organizations_url":"https://api.github.com/users/joonas-yoon/orgs","repos_url":"https://api.github.com/users/joonas-yoon/repos","events_url":"https://api.github.com/users/joonas-yoon/events{/privacy}","received_events_url":"https://api.github.com/users/joonas-yoon/received_events","type":"User","user_view_type":"public","site_admin":false,"contributions":18},{"login":"daniel-alvesg","id":28873153,"node_id":"MDQ6VXNlcjI4ODczMTUz","avatar_url":"https://avatars.githubusercontent.com/u/28873153?v=4","gravatar_id":"","url":"https://api.github.com/users/daniel-alvesg","html_url":"https://github.com/daniel-alvesg","followers_url":"https://api.github.com/users/daniel-alvesg/followers","following_url":"https://api.github.com/users/daniel-alvesg/following{/other_user}","gists_url":"https://api.github.com/users/daniel-alvesg/gists{/gist_id}","starred_url":"https://api.github.com/users/daniel-alvesg/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/daniel-alvesg/subscriptions","organizations_url":"https://api.github.com/users/daniel-alvesg/orgs","repos_url":"https://api.github.com/users/daniel-alvesg/repos","events_url":"https://api.github.com/users/daniel-alvesg/events{/privacy}","received_events_url":"https://api.github.com/users/daniel-alvesg/received_events","type":"User","user_view_type":"public","site_admin":false,"contributions":14},{"login":"vinci-mz","id":13175283,"node_id":"MDQ6VXNlcjEzMTc1Mjgz","avatar_url":"https://avatars.githubusercontent.com/u/13175283?v=4","gravatar_id":"","url":"https://api.github.com/users/vinci-mz","html_url":"https://github.com/vinci-mz","followers_url":"https://api.github.com/users/vinci-mz/followers","following_url":"https://api.github.com/users/vinci-mz/following{/other_user}","gists_url":"https://api.github.com/users/vinci-mz/gists{/gist_id}","starred_url":"https://api.github.com/users/vinci-mz/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/vinci-mz/subscriptions","organizations_url":"https://api.github.com/users/vinci-mz/orgs","repos_url":"https://api.github.com/users/vinci-mz/repos","events_url":"https://api.github.com/users/vinci-mz/events{/privacy}","received_events_url":"https://api.github.com/users/vinci-mz/received_events","type":"User","user_view_type":"public","site_admin":false,"contributions":12},{"login":"naotaro0123","id":3956770,"node_id":"MDQ6VXNlcjM5NTY3NzA=","avatar_url":"https://avatars.githubusercontent.com/u/3956770?v=4","gravatar_id":"","url":"https://api.github.com/users/naotaro0123","html_url":"https://github.com/naotaro0123","followers_url":"https://api.github.com/users/naotaro0123/followers","following_url":"https://api.github.com/users/naotaro0123/following{/other_user}","gists_url":"https://api.github.com/users/naotaro0123/gists{/gist_id}","starred_url":"https://api.github.com/users/naotaro0123/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/naotaro0123/subscriptions","organizations_url":"https://api.github.com/users/naotaro0123/orgs","repos_url":"https://api.github.com/users/naotaro0123/repos","events_url":"https://api.github.com/users/naotaro0123/events{/privacy}","received_events_url":"https://api.github.com/users/naotaro0123/received_events","type":"User","user_view_type":"public","site_admin":false,"contributions":11},{"login":"davcri","id":6860637,"node_id":"MDQ6VXNlcjY4NjA2Mzc=","avatar_url":"https://avatars.githubusercontent.com/u/6860637?v=4","gravatar_id":"","url":"https://api.github.com/users/davcri","html_url":"https://github.com/davcri","followers_url":"https://api.github.com/users/davcri/followers","following_url":"https://api.github.com/users/davcri/following{/other_user}","gists_url":"https://api.github.com/users/davcri/gists{/gist_id}","starred_url":"https://api.github.com/users/davcri/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/davcri/subscriptions","organizations_url":"https://api.github.com/users/davcri/orgs","repos_url":"https://api.github.com/users/davcri/repos","events_url":"https://api.github.com/users/davcri/events{/privacy}","received_events_url":"https://api.github.com/users/davcri/received_events","type":"User","user_view_type":"public","site_admin":false,"contributions":5},{"login":"Kaesebrot84","id":13865115,"node_id":"MDQ6VXNlcjEzODY1MTE1","avatar_url":"https://avatars.githubusercontent.com/u/13865115?v=4","gravatar_id":"","url":"https://api.github.com/users/Kaesebrot84","html_url":"https://github.com/Kaesebrot84","followers_url":"https://api.github.com/users/Kaesebrot84/followers","following_url":"https://api.github.com/users/Kaesebrot84/following{/other_user}","gists_url":"https://api.github.com/users/Kaesebrot84/gists{/gist_id}","starred_url":"https://api.github.com/users/Kaesebrot84/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Kaesebrot84/subscriptions","organizations_url":"https://api.github.com/users/Kaesebrot84/orgs","repos_url":"https://api.github.com/users/Kaesebrot84/repos","events_url":"https://api.github.com/users/Kaesebrot84/events{/privacy}","received_events_url":"https://api.github.com/users/Kaesebrot84/received_events","type":"User","user_view_type":"public","site_admin":false,"contributions":4},{"login":"jiebai","id":5625498,"node_id":"MDQ6VXNlcjU2MjU0OTg=","avatar_url":"https://avatars.githubusercontent.com/u/5625498?v=4","gravatar_id":"","url":"https://api.github.com/users/jiebai","html_url":"https://github.com/jiebai","followers_url":"https://api.github.com/users/jiebai/followers","following_url":"https://api.github.com/users/jiebai/following{/other_user}","gists_url":"https://api.github.com/users/jiebai/gists{/gist_id}","starred_url":"https://api.github.com/users/jiebai/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jiebai/subscriptions","organizations_url":"https://api.github.com/users/jiebai/orgs","repos_url":"https://api.github.com/users/jiebai/repos","events_url":"https://api.github.com/users/jiebai/events{/privacy}","received_events_url":"https://api.github.com/users/jiebai/received_events","type":"User","user_view_type":"public","site_admin":false,"contributions":4},{"login":"yunsii","id":18096089,"node_id":"MDQ6VXNlcjE4MDk2MDg5","avatar_url":"https://avatars.githubusercontent.com/u/18096089?v=4","gravatar_id":"","url":"https://api.github.com/users/yunsii","html_url":"https://github.com/yunsii","followers_url":"https://api.github.com/users/yunsii/followers","following_url":"https://api.github.com/users/yunsii/following{/other_user}","gists_url":"https://api.github.com/users/yunsii/gists{/gist_id}","starred_url":"https://api.github.com/users/yunsii/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/yunsii/subscriptions","organizations_url":"https://api.github.com/users/yunsii/orgs","repos_url":"https://api.github.com/users/yunsii/repos","events_url":"https://api.github.com/users/yunsii/events{/privacy}","received_events_url":"https://api.github.com/users/yunsii/received_events","type":"User","user_view_type":"public","site_admin":false,"contributions":4},{"login":"wpp","id":942021,"node_id":"MDQ6VXNlcjk0MjAyMQ==","avatar_url":"https://avatars.githubusercontent.com/u/942021?v=4","gravatar_id":"","url":"https://api.github.com/users/wpp","html_url":"https://github.com/wpp","followers_url":"https://api.github.com/users/wpp/followers","following_url":"https://api.github.com/users/wpp/following{/other_user}","gists_url":"https://api.github.com/users/wpp/gists{/gist_id}","starred_url":"https://api.github.com/users/wpp/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/wpp/subscriptions","organizations_url":"https://api.github.com/users/wpp/orgs","repos_url":"https://api.github.com/users/wpp/repos","events_url":"https://api.github.com/users/wpp/events{/privacy}","received_events_url":"https://api.github.com/users/wpp/received_events","type":"User","user_view_type":"public","site_admin":false,"contributions":4},{"login":"afilahkle","id":90985041,"node_id":"MDQ6VXNlcjkwOTg1MDQx","avatar_url":"https://avatars.githubusercontent.com/u/90985041?v=4","gravatar_id":"","url":"https://api.github.com/users/afilahkle","html_url":"https://github.com/afilahkle","followers_url":"https://api.github.com/users/afilahkle/followers","following_url":"https://api.github.com/users/afilahkle/following{/other_user}","gists_url":"https://api.github.com/users/afilahkle/gists{/gist_id}","starred_url":"https://api.github.com/users/afilahkle/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/afilahkle/subscriptions","organizations_url":"https://api.github.com/users/afilahkle/orgs","repos_url":"https://api.github.com/users/afilahkle/repos","events_url":"https://api.github.com/users/afilahkle/events{/privacy}","received_events_url":"https://api.github.com/users/afilahkle/received_events","type":"User","user_view_type":"public","site_admin":false,"contributions":4},{"login":"MaxDesiatov","id":112310,"node_id":"MDQ6VXNlcjExMjMxMA==","avatar_url":"https://avatars.githubusercontent.com/u/112310?v=4","gravatar_id":"","url":"https://api.github.com/users/MaxDesiatov","html_url":"https://github.com/MaxDesiatov","followers_url":"https://api.github.com/users/MaxDesiatov/followers","following_url":"https://api.github.com/users/MaxDesiatov/following{/other_user}","gists_url":"https://api.github.com/users/MaxDesiatov/gists{/gist_id}","starred_url":"https://api.github.com/users/MaxDesiatov/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/MaxDesiatov/subscriptions","organizations_url":"https://api.github.com/users/MaxDesiatov/orgs","repos_url":"https://api.github.com/users/MaxDesiatov/repos","events_url":"https://api.github.com/users/MaxDesiatov/events{/privacy}","received_events_url":"https://api.github.com/users/MaxDesiatov/received_events","type":"User","user_view_type":"public","site_admin":false,"contributions":4},{"login":"KY246","id":62805908,"node_id":"MDQ6VXNlcjYyODA1OTA4","avatar_url":"https://avatars.githubusercontent.com/u/62805908?v=4","gravatar_id":"","url":"https://api.github.com/users/KY246","html_url":"https://github.com/KY246","followers_url":"https://api.github.com/users/KY246/followers","following_url":"https://api.github.com/users/KY246/following{/other_user}","gists_url":"https://api.github.com/users/KY246/gists{/gist_id}","starred_url":"https://api.github.com/users/KY246/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/KY246/subscriptions","organizations_url":"https://api.github.com/users/KY246/orgs","repos_url":"https://api.github.com/users/KY246/repos","events_url":"https://api.github.com/users/KY246/events{/privacy}","received_events_url":"https://api.github.com/users/KY246/received_events","type":"User","user_view_type":"public","site_admin":false,"contributions":4},{"login":"adkelley","id":5614766,"node_id":"MDQ6VXNlcjU2MTQ3NjY=","avatar_url":"https://avatars.githubusercontent.com/u/5614766?v=4","gravatar_id":"","url":"https://api.github.com/users/adkelley","html_url":"https://github.com/adkelley","followers_url":"https://api.github.com/users/adkelley/followers","following_url":"https://api.github.com/users/adkelley/following{/other_user}","gists_url":"https://api.github.com/users/adkelley/gists{/gist_id}","starred_url":"https://api.github.com/users/adkelley/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/adkelley/subscriptions","organizations_url":"https://api.github.com/users/adkelley/orgs","repos_url":"https://api.github.com/users/adkelley/repos","events_url":"https://api.github.com/users/adkelley/events{/privacy}","received_events_url":"https://api.github.com/users/adkelley/received_events","type":"User","user_view_type":"public","site_admin":false,"contributions":4},{"login":"06wj","id":800043,"node_id":"MDQ6VXNlcjgwMDA0Mw==","avatar_url":"https://avatars.githubusercontent.com/u/800043?v=4","gravatar_id":"","url":"https://api.github.com/users/06wj","html_url":"https://github.com/06wj","followers_url":"https://api.github.com/users/06wj/followers","following_url":"https://api.github.com/users/06wj/following{/other_user}","gists_url":"https://api.github.com/users/06wj/gists{/gist_id}","starred_url":"https://api.github.com/users/06wj/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/06wj/subscriptions","organizations_url":"https://api.github.com/users/06wj/orgs","repos_url":"https://api.github.com/users/06wj/repos","events_url":"https://api.github.com/users/06wj/events{/privacy}","received_events_url":"https://api.github.com/users/06wj/received_events","type":"User","user_view_type":"public","site_admin":false,"contributions":3},{"login":"Astrak","id":10037511,"node_id":"MDQ6VXNlcjEwMDM3NTEx","avatar_url":"https://avatars.githubusercontent.com/u/10037511?v=4","gravatar_id":"","url":"https://api.github.com/users/Astrak","html_url":"https://github.com/Astrak","followers_url":"https://api.github.com/users/Astrak/followers","following_url":"https://api.github.com/users/Astrak/following{/other_user}","gists_url":"https://api.github.com/users/Astrak/gists{/gist_id}","starred_url":"https://api.github.com/users/Astrak/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Astrak/subscriptions","organizations_url":"https://api.github.com/users/Astrak/orgs","repos_url":"https://api.github.com/users/Astrak/repos","events_url":"https://api.github.com/users/Astrak/events{/privacy}","received_events_url":"https://api.github.com/users/Astrak/received_events","type":"User","user_view_type":"public","site_admin":false,"contributions":3},{"login":"Kurtil","id":22523482,"node_id":"MDQ6VXNlcjIyNTIzNDgy","avatar_url":"https://avatars.githubusercontent.com/u/22523482?v=4","gravatar_id":"","url":"https://api.github.com/users/Kurtil","html_url":"https://github.com/Kurtil","followers_url":"https://api.github.com/users/Kurtil/followers","following_url":"https://api.github.com/users/Kurtil/following{/other_user}","gists_url":"https://api.github.com/users/Kurtil/gists{/gist_id}","starred_url":"https://api.github.com/users/Kurtil/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Kurtil/subscriptions","organizations_url":"https://api.github.com/users/Kurtil/orgs","repos_url":"https://api.github.com/users/Kurtil/repos","events_url":"https://api.github.com/users/Kurtil/events{/privacy}","received_events_url":"https://api.github.com/users/Kurtil/received_events","type":"User","user_view_type":"public","site_admin":false,"contributions":3},{"login":"zackurben","id":2689122,"node_id":"MDQ6VXNlcjI2ODkxMjI=","avatar_url":"https://avatars.githubusercontent.com/u/2689122?v=4","gravatar_id":"","url":"https://api.github.com/users/zackurben","html_url":"https://github.com/zackurben","followers_url":"https://api.github.com/users/zackurben/followers","following_url":"https://api.github.com/users/zackurben/following{/other_user}","gists_url":"https://api.github.com/users/zackurben/gists{/gist_id}","starred_url":"https://api.github.com/users/zackurben/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/zackurben/subscriptions","organizations_url":"https://api.github.com/users/zackurben/orgs","repos_url":"https://api.github.com/users/zackurben/repos","events_url":"https://api.github.com/users/zackurben/events{/privacy}","received_events_url":"https://api.github.com/users/zackurben/received_events","type":"User","user_view_type":"public","site_admin":false,"contributions":3},{"login":"billytrend","id":6671020,"node_id":"MDQ6VXNlcjY2NzEwMjA=","avatar_url":"https://avatars.githubusercontent.com/u/6671020?v=4","gravatar_id":"","url":"https://api.github.com/users/billytrend","html_url":"https://github.com/billytrend","followers_url":"https://api.github.com/users/billytrend/followers","following_url":"https://api.github.com/users/billytrend/following{/other_user}","gists_url":"https://api.github.com/users/billytrend/gists{/gist_id}","starred_url":"https://api.github.com/users/billytrend/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/billytrend/subscriptions","organizations_url":"https://api.github.com/users/billytrend/orgs","repos_url":"https://api.github.com/users/billytrend/repos","events_url":"https://api.github.com/users/billytrend/events{/privacy}","received_events_url":"https://api.github.com/users/billytrend/received_events","type":"User","user_view_type":"public","site_admin":false,"contributions":3},{"login":"Shubidumdu","id":54790378,"node_id":"MDQ6VXNlcjU0NzkwMzc4","avatar_url":"https://avatars.githubusercontent.com/u/54790378?v=4","gravatar_id":"","url":"https://api.github.com/users/Shubidumdu","html_url":"https://github.com/Shubidumdu","followers_url":"https://api.github.com/users/Shubidumdu/followers","following_url":"https://api.github.com/users/Shubidumdu/following{/other_user}","gists_url":"https://api.github.com/users/Shubidumdu/gists{/gist_id}","starred_url":"https://api.github.com/users/Shubidumdu/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Shubidumdu/subscriptions","organizations_url":"https://api.github.com/users/Shubidumdu/orgs","repos_url":"https://api.github.com/users/Shubidumdu/repos","events_url":"https://api.github.com/users/Shubidumdu/events{/privacy}","received_events_url":"https://api.github.com/users/Shubidumdu/received_events","type":"User","user_view_type":"public","site_admin":false,"contributions":3},{"login":"lazygyu","id":1005952,"node_id":"MDQ6VXNlcjEwMDU5NTI=","avatar_url":"https://avatars.githubusercontent.com/u/1005952?v=4","gravatar_id":"","url":"https://api.github.com/users/lazygyu","html_url":"https://github.com/lazygyu","followers_url":"https://api.github.com/users/lazygyu/followers","following_url":"https://api.github.com/users/lazygyu/following{/other_user}","gists_url":"https://api.github.com/users/lazygyu/gists{/gist_id}","starred_url":"https://api.github.com/users/lazygyu/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/lazygyu/subscriptions","organizations_url":"https://api.github.com/users/lazygyu/orgs","repos_url":"https://api.github.com/users/lazygyu/repos","events_url":"https://api.github.com/users/lazygyu/events{/privacy}","received_events_url":"https://api.github.com/users/lazygyu/received_events","type":"User","user_view_type":"public","site_admin":false,"contributions":2},{"login":"alicialics","id":31378877,"node_id":"MDQ6VXNlcjMxMzc4ODc3","avatar_url":"https://avatars.githubusercontent.com/u/31378877?v=4","gravatar_id":"","url":"https://api.github.com/users/alicialics","html_url":"https://github.com/alicialics","followers_url":"https://api.github.com/users/alicialics/followers","following_url":"https://api.github.com/users/alicialics/following{/other_user}","gists_url":"https://api.github.com/users/alicialics/gists{/gist_id}","starred_url":"https://api.github.com/users/alicialics/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/alicialics/subscriptions","organizations_url":"https://api.github.com/users/alicialics/orgs","repos_url":"https://api.github.com/users/alicialics/repos","events_url":"https://api.github.com/users/alicialics/events{/privacy}","received_events_url":"https://api.github.com/users/alicialics/received_events","type":"User","user_view_type":"public","site_admin":false,"contributions":2},{"login":"grovesNL","id":2113872,"node_id":"MDQ6VXNlcjIxMTM4NzI=","avatar_url":"https://avatars.githubusercontent.com/u/2113872?v=4","gravatar_id":"","url":"https://api.github.com/users/grovesNL","html_url":"https://github.com/grovesNL","followers_url":"https://api.github.com/users/grovesNL/followers","following_url":"https://api.github.com/users/grovesNL/following{/other_user}","gists_url":"https://api.github.com/users/grovesNL/gists{/gist_id}","starred_url":"https://api.github.com/users/grovesNL/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/grovesNL/subscriptions","organizations_url":"https://api.github.com/users/grovesNL/orgs","repos_url":"https://api.github.com/users/grovesNL/repos","events_url":"https://api.github.com/users/grovesNL/events{/privacy}","received_events_url":"https://api.github.com/users/grovesNL/received_events","type":"User","user_view_type":"public","site_admin":false,"contributions":2},{"login":"cdry","id":20787516,"node_id":"MDQ6VXNlcjIwNzg3NTE2","avatar_url":"https://avatars.githubusercontent.com/u/20787516?v=4","gravatar_id":"","url":"https://api.github.com/users/cdry","html_url":"https://github.com/cdry","followers_url":"https://api.github.com/users/cdry/followers","following_url":"https://api.github.com/users/cdry/following{/other_user}","gists_url":"https://api.github.com/users/cdry/gists{/gist_id}","starred_url":"https://api.github.com/users/cdry/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cdry/subscriptions","organizations_url":"https://api.github.com/users/cdry/orgs","repos_url":"https://api.github.com/users/cdry/repos","events_url":"https://api.github.com/users/cdry/events{/privacy}","received_events_url":"https://api.github.com/users/cdry/received_events","type":"User","user_view_type":"public","site_admin":false,"contributions":2},{"login":"ahaoboy","id":19884146,"node_id":"MDQ6VXNlcjE5ODg0MTQ2","avatar_url":"https://avatars.githubusercontent.com/u/19884146?v=4","gravatar_id":"","url":"https://api.github.com/users/ahaoboy","html_url":"https://github.com/ahaoboy","followers_url":"https://api.github.com/users/ahaoboy/followers","following_url":"https://api.github.com/users/ahaoboy/following{/other_user}","gists_url":"https://api.github.com/users/ahaoboy/gists{/gist_id}","starred_url":"https://api.github.com/users/ahaoboy/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ahaoboy/subscriptions","organizations_url":"https://api.github.com/users/ahaoboy/orgs","repos_url":"https://api.github.com/users/ahaoboy/repos","events_url":"https://api.github.com/users/ahaoboy/events{/privacy}","received_events_url":"https://api.github.com/users/ahaoboy/received_events","type":"User","user_view_type":"public","site_admin":false,"contributions":2},{"login":"dcrystalj","id":1460727,"node_id":"MDQ6VXNlcjE0NjA3Mjc=","avatar_url":"https://avatars.githubusercontent.com/u/1460727?v=4","gravatar_id":"","url":"https://api.github.com/users/dcrystalj","html_url":"https://github.com/dcrystalj","followers_url":"https://api.github.com/users/dcrystalj/followers","following_url":"https://api.github.com/users/dcrystalj/following{/other_user}","gists_url":"https://api.github.com/users/dcrystalj/gists{/gist_id}","starred_url":"https://api.github.com/users/dcrystalj/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dcrystalj/subscriptions","organizations_url":"https://api.github.com/users/dcrystalj/orgs","repos_url":"https://api.github.com/users/dcrystalj/repos","events_url":"https://api.github.com/users/dcrystalj/events{/privacy}","received_events_url":"https://api.github.com/users/dcrystalj/received_events","type":"User","user_view_type":"public","site_admin":false,"contributions":2},{"login":"mattbilson","id":243331,"node_id":"MDQ6VXNlcjI0MzMzMQ==","avatar_url":"https://avatars.githubusercontent.com/u/243331?v=4","gravatar_id":"","url":"https://api.github.com/users/mattbilson","html_url":"https://github.com/mattbilson","followers_url":"https://api.github.com/users/mattbilson/followers","following_url":"https://api.github.com/users/mattbilson/following{/other_user}","gists_url":"https://api.github.com/users/mattbilson/gists{/gist_id}","starred_url":"https://api.github.com/users/mattbilson/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mattbilson/subscriptions","organizations_url":"https://api.github.com/users/mattbilson/orgs","repos_url":"https://api.github.com/users/mattbilson/repos","events_url":"https://api.github.com/users/mattbilson/events{/privacy}","received_events_url":"https://api.github.com/users/mattbilson/received_events","type":"User","user_view_type":"public","site_admin":false,"contributions":2}];
+const contributors = [{"login":"greggman","id":234804,"node_id":"MDQ6VXNlcjIzNDgwNA==","avatar_url":"https://avatars.githubusercontent.com/u/234804?v=4","gravatar_id":"","url":"https://api.github.com/users/greggman","html_url":"https://github.com/greggman","followers_url":"https://api.github.com/users/greggman/followers","following_url":"https://api.github.com/users/greggman/following{/other_user}","gists_url":"https://api.github.com/users/greggman/gists{/gist_id}","starred_url":"https://api.github.com/users/greggman/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/greggman/subscriptions","organizations_url":"https://api.github.com/users/greggman/orgs","repos_url":"https://api.github.com/users/greggman/repos","events_url":"https://api.github.com/users/greggman/events{/privacy}","received_events_url":"https://api.github.com/users/greggman/received_events","type":"User","user_view_type":"public","site_admin":false,"contributions":1319},{"login":"diskhkme","id":7402686,"node_id":"MDQ6VXNlcjc0MDI2ODY=","avatar_url":"https://avatars.githubusercontent.com/u/7402686?v=4","gravatar_id":"","url":"https://api.github.com/users/diskhkme","html_url":"https://github.com/diskhkme","followers_url":"https://api.github.com/users/diskhkme/followers","following_url":"https://api.github.com/users/diskhkme/following{/other_user}","gists_url":"https://api.github.com/users/diskhkme/gists{/gist_id}","starred_url":"https://api.github.com/users/diskhkme/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/diskhkme/subscriptions","organizations_url":"https://api.github.com/users/diskhkme/orgs","repos_url":"https://api.github.com/users/diskhkme/repos","events_url":"https://api.github.com/users/diskhkme/events{/privacy}","received_events_url":"https://api.github.com/users/diskhkme/received_events","type":"User","user_view_type":"public","site_admin":false,"contributions":70},{"login":"jeongsd","id":7903426,"node_id":"MDQ6VXNlcjc5MDM0MjY=","avatar_url":"https://avatars.githubusercontent.com/u/7903426?v=4","gravatar_id":"","url":"https://api.github.com/users/jeongsd","html_url":"https://github.com/jeongsd","followers_url":"https://api.github.com/users/jeongsd/followers","following_url":"https://api.github.com/users/jeongsd/following{/other_user}","gists_url":"https://api.github.com/users/jeongsd/gists{/gist_id}","starred_url":"https://api.github.com/users/jeongsd/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jeongsd/subscriptions","organizations_url":"https://api.github.com/users/jeongsd/orgs","repos_url":"https://api.github.com/users/jeongsd/repos","events_url":"https://api.github.com/users/jeongsd/events{/privacy}","received_events_url":"https://api.github.com/users/jeongsd/received_events","type":"User","user_view_type":"public","site_admin":false,"contributions":37},{"login":"ihwf","id":17941662,"node_id":"MDQ6VXNlcjE3OTQxNjYy","avatar_url":"https://avatars.githubusercontent.com/u/17941662?v=4","gravatar_id":"","url":"https://api.github.com/users/ihwf","html_url":"https://github.com/ihwf","followers_url":"https://api.github.com/users/ihwf/followers","following_url":"https://api.github.com/users/ihwf/following{/other_user}","gists_url":"https://api.github.com/users/ihwf/gists{/gist_id}","starred_url":"https://api.github.com/users/ihwf/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ihwf/subscriptions","organizations_url":"https://api.github.com/users/ihwf/orgs","repos_url":"https://api.github.com/users/ihwf/repos","events_url":"https://api.github.com/users/ihwf/events{/privacy}","received_events_url":"https://api.github.com/users/ihwf/received_events","type":"User","user_view_type":"public","site_admin":false,"contributions":20},{"login":"joonas-yoon","id":9527681,"node_id":"MDQ6VXNlcjk1Mjc2ODE=","avatar_url":"https://avatars.githubusercontent.com/u/9527681?v=4","gravatar_id":"","url":"https://api.github.com/users/joonas-yoon","html_url":"https://github.com/joonas-yoon","followers_url":"https://api.github.com/users/joonas-yoon/followers","following_url":"https://api.github.com/users/joonas-yoon/following{/other_user}","gists_url":"https://api.github.com/users/joonas-yoon/gists{/gist_id}","starred_url":"https://api.github.com/users/joonas-yoon/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/joonas-yoon/subscriptions","organizations_url":"https://api.github.com/users/joonas-yoon/orgs","repos_url":"https://api.github.com/users/joonas-yoon/repos","events_url":"https://api.github.com/users/joonas-yoon/events{/privacy}","received_events_url":"https://api.github.com/users/joonas-yoon/received_events","type":"User","user_view_type":"public","site_admin":false,"contributions":18},{"login":"daniel-alvesg","id":28873153,"node_id":"MDQ6VXNlcjI4ODczMTUz","avatar_url":"https://avatars.githubusercontent.com/u/28873153?v=4","gravatar_id":"","url":"https://api.github.com/users/daniel-alvesg","html_url":"https://github.com/daniel-alvesg","followers_url":"https://api.github.com/users/daniel-alvesg/followers","following_url":"https://api.github.com/users/daniel-alvesg/following{/other_user}","gists_url":"https://api.github.com/users/daniel-alvesg/gists{/gist_id}","starred_url":"https://api.github.com/users/daniel-alvesg/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/daniel-alvesg/subscriptions","organizations_url":"https://api.github.com/users/daniel-alvesg/orgs","repos_url":"https://api.github.com/users/daniel-alvesg/repos","events_url":"https://api.github.com/users/daniel-alvesg/events{/privacy}","received_events_url":"https://api.github.com/users/daniel-alvesg/received_events","type":"User","user_view_type":"public","site_admin":false,"contributions":14},{"login":"vinci-mz","id":13175283,"node_id":"MDQ6VXNlcjEzMTc1Mjgz","avatar_url":"https://avatars.githubusercontent.com/u/13175283?v=4","gravatar_id":"","url":"https://api.github.com/users/vinci-mz","html_url":"https://github.com/vinci-mz","followers_url":"https://api.github.com/users/vinci-mz/followers","following_url":"https://api.github.com/users/vinci-mz/following{/other_user}","gists_url":"https://api.github.com/users/vinci-mz/gists{/gist_id}","starred_url":"https://api.github.com/users/vinci-mz/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/vinci-mz/subscriptions","organizations_url":"https://api.github.com/users/vinci-mz/orgs","repos_url":"https://api.github.com/users/vinci-mz/repos","events_url":"https://api.github.com/users/vinci-mz/events{/privacy}","received_events_url":"https://api.github.com/users/vinci-mz/received_events","type":"User","user_view_type":"public","site_admin":false,"contributions":12},{"login":"naotaro0123","id":3956770,"node_id":"MDQ6VXNlcjM5NTY3NzA=","avatar_url":"https://avatars.githubusercontent.com/u/3956770?v=4","gravatar_id":"","url":"https://api.github.com/users/naotaro0123","html_url":"https://github.com/naotaro0123","followers_url":"https://api.github.com/users/naotaro0123/followers","following_url":"https://api.github.com/users/naotaro0123/following{/other_user}","gists_url":"https://api.github.com/users/naotaro0123/gists{/gist_id}","starred_url":"https://api.github.com/users/naotaro0123/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/naotaro0123/subscriptions","organizations_url":"https://api.github.com/users/naotaro0123/orgs","repos_url":"https://api.github.com/users/naotaro0123/repos","events_url":"https://api.github.com/users/naotaro0123/events{/privacy}","received_events_url":"https://api.github.com/users/naotaro0123/received_events","type":"User","user_view_type":"public","site_admin":false,"contributions":11},{"login":"davcri","id":6860637,"node_id":"MDQ6VXNlcjY4NjA2Mzc=","avatar_url":"https://avatars.githubusercontent.com/u/6860637?v=4","gravatar_id":"","url":"https://api.github.com/users/davcri","html_url":"https://github.com/davcri","followers_url":"https://api.github.com/users/davcri/followers","following_url":"https://api.github.com/users/davcri/following{/other_user}","gists_url":"https://api.github.com/users/davcri/gists{/gist_id}","starred_url":"https://api.github.com/users/davcri/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/davcri/subscriptions","organizations_url":"https://api.github.com/users/davcri/orgs","repos_url":"https://api.github.com/users/davcri/repos","events_url":"https://api.github.com/users/davcri/events{/privacy}","received_events_url":"https://api.github.com/users/davcri/received_events","type":"User","user_view_type":"public","site_admin":false,"contributions":5},{"login":"Kaesebrot84","id":13865115,"node_id":"MDQ6VXNlcjEzODY1MTE1","avatar_url":"https://avatars.githubusercontent.com/u/13865115?v=4","gravatar_id":"","url":"https://api.github.com/users/Kaesebrot84","html_url":"https://github.com/Kaesebrot84","followers_url":"https://api.github.com/users/Kaesebrot84/followers","following_url":"https://api.github.com/users/Kaesebrot84/following{/other_user}","gists_url":"https://api.github.com/users/Kaesebrot84/gists{/gist_id}","starred_url":"https://api.github.com/users/Kaesebrot84/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Kaesebrot84/subscriptions","organizations_url":"https://api.github.com/users/Kaesebrot84/orgs","repos_url":"https://api.github.com/users/Kaesebrot84/repos","events_url":"https://api.github.com/users/Kaesebrot84/events{/privacy}","received_events_url":"https://api.github.com/users/Kaesebrot84/received_events","type":"User","user_view_type":"public","site_admin":false,"contributions":4},{"login":"jiebai","id":5625498,"node_id":"MDQ6VXNlcjU2MjU0OTg=","avatar_url":"https://avatars.githubusercontent.com/u/5625498?v=4","gravatar_id":"","url":"https://api.github.com/users/jiebai","html_url":"https://github.com/jiebai","followers_url":"https://api.github.com/users/jiebai/followers","following_url":"https://api.github.com/users/jiebai/following{/other_user}","gists_url":"https://api.github.com/users/jiebai/gists{/gist_id}","starred_url":"https://api.github.com/users/jiebai/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jiebai/subscriptions","organizations_url":"https://api.github.com/users/jiebai/orgs","repos_url":"https://api.github.com/users/jiebai/repos","events_url":"https://api.github.com/users/jiebai/events{/privacy}","received_events_url":"https://api.github.com/users/jiebai/received_events","type":"User","user_view_type":"public","site_admin":false,"contributions":4},{"login":"yunsii","id":18096089,"node_id":"MDQ6VXNlcjE4MDk2MDg5","avatar_url":"https://avatars.githubusercontent.com/u/18096089?v=4","gravatar_id":"","url":"https://api.github.com/users/yunsii","html_url":"https://github.com/yunsii","followers_url":"https://api.github.com/users/yunsii/followers","following_url":"https://api.github.com/users/yunsii/following{/other_user}","gists_url":"https://api.github.com/users/yunsii/gists{/gist_id}","starred_url":"https://api.github.com/users/yunsii/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/yunsii/subscriptions","organizations_url":"https://api.github.com/users/yunsii/orgs","repos_url":"https://api.github.com/users/yunsii/repos","events_url":"https://api.github.com/users/yunsii/events{/privacy}","received_events_url":"https://api.github.com/users/yunsii/received_events","type":"User","user_view_type":"public","site_admin":false,"contributions":4},{"login":"wpp","id":942021,"node_id":"MDQ6VXNlcjk0MjAyMQ==","avatar_url":"https://avatars.githubusercontent.com/u/942021?v=4","gravatar_id":"","url":"https://api.github.com/users/wpp","html_url":"https://github.com/wpp","followers_url":"https://api.github.com/users/wpp/followers","following_url":"https://api.github.com/users/wpp/following{/other_user}","gists_url":"https://api.github.com/users/wpp/gists{/gist_id}","starred_url":"https://api.github.com/users/wpp/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/wpp/subscriptions","organizations_url":"https://api.github.com/users/wpp/orgs","repos_url":"https://api.github.com/users/wpp/repos","events_url":"https://api.github.com/users/wpp/events{/privacy}","received_events_url":"https://api.github.com/users/wpp/received_events","type":"User","user_view_type":"public","site_admin":false,"contributions":4},{"login":"afilahkle","id":90985041,"node_id":"MDQ6VXNlcjkwOTg1MDQx","avatar_url":"https://avatars.githubusercontent.com/u/90985041?v=4","gravatar_id":"","url":"https://api.github.com/users/afilahkle","html_url":"https://github.com/afilahkle","followers_url":"https://api.github.com/users/afilahkle/followers","following_url":"https://api.github.com/users/afilahkle/following{/other_user}","gists_url":"https://api.github.com/users/afilahkle/gists{/gist_id}","starred_url":"https://api.github.com/users/afilahkle/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/afilahkle/subscriptions","organizations_url":"https://api.github.com/users/afilahkle/orgs","repos_url":"https://api.github.com/users/afilahkle/repos","events_url":"https://api.github.com/users/afilahkle/events{/privacy}","received_events_url":"https://api.github.com/users/afilahkle/received_events","type":"User","user_view_type":"public","site_admin":false,"contributions":4},{"login":"MaxDesiatov","id":112310,"node_id":"MDQ6VXNlcjExMjMxMA==","avatar_url":"https://avatars.githubusercontent.com/u/112310?v=4","gravatar_id":"","url":"https://api.github.com/users/MaxDesiatov","html_url":"https://github.com/MaxDesiatov","followers_url":"https://api.github.com/users/MaxDesiatov/followers","following_url":"https://api.github.com/users/MaxDesiatov/following{/other_user}","gists_url":"https://api.github.com/users/MaxDesiatov/gists{/gist_id}","starred_url":"https://api.github.com/users/MaxDesiatov/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/MaxDesiatov/subscriptions","organizations_url":"https://api.github.com/users/MaxDesiatov/orgs","repos_url":"https://api.github.com/users/MaxDesiatov/repos","events_url":"https://api.github.com/users/MaxDesiatov/events{/privacy}","received_events_url":"https://api.github.com/users/MaxDesiatov/received_events","type":"User","user_view_type":"public","site_admin":false,"contributions":4},{"login":"KY246","id":62805908,"node_id":"MDQ6VXNlcjYyODA1OTA4","avatar_url":"https://avatars.githubusercontent.com/u/62805908?v=4","gravatar_id":"","url":"https://api.github.com/users/KY246","html_url":"https://github.com/KY246","followers_url":"https://api.github.com/users/KY246/followers","following_url":"https://api.github.com/users/KY246/following{/other_user}","gists_url":"https://api.github.com/users/KY246/gists{/gist_id}","starred_url":"https://api.github.com/users/KY246/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/KY246/subscriptions","organizations_url":"https://api.github.com/users/KY246/orgs","repos_url":"https://api.github.com/users/KY246/repos","events_url":"https://api.github.com/users/KY246/events{/privacy}","received_events_url":"https://api.github.com/users/KY246/received_events","type":"User","user_view_type":"public","site_admin":false,"contributions":4},{"login":"adkelley","id":5614766,"node_id":"MDQ6VXNlcjU2MTQ3NjY=","avatar_url":"https://avatars.githubusercontent.com/u/5614766?v=4","gravatar_id":"","url":"https://api.github.com/users/adkelley","html_url":"https://github.com/adkelley","followers_url":"https://api.github.com/users/adkelley/followers","following_url":"https://api.github.com/users/adkelley/following{/other_user}","gists_url":"https://api.github.com/users/adkelley/gists{/gist_id}","starred_url":"https://api.github.com/users/adkelley/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/adkelley/subscriptions","organizations_url":"https://api.github.com/users/adkelley/orgs","repos_url":"https://api.github.com/users/adkelley/repos","events_url":"https://api.github.com/users/adkelley/events{/privacy}","received_events_url":"https://api.github.com/users/adkelley/received_events","type":"User","user_view_type":"public","site_admin":false,"contributions":4},{"login":"06wj","id":800043,"node_id":"MDQ6VXNlcjgwMDA0Mw==","avatar_url":"https://avatars.githubusercontent.com/u/800043?v=4","gravatar_id":"","url":"https://api.github.com/users/06wj","html_url":"https://github.com/06wj","followers_url":"https://api.github.com/users/06wj/followers","following_url":"https://api.github.com/users/06wj/following{/other_user}","gists_url":"https://api.github.com/users/06wj/gists{/gist_id}","starred_url":"https://api.github.com/users/06wj/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/06wj/subscriptions","organizations_url":"https://api.github.com/users/06wj/orgs","repos_url":"https://api.github.com/users/06wj/repos","events_url":"https://api.github.com/users/06wj/events{/privacy}","received_events_url":"https://api.github.com/users/06wj/received_events","type":"User","user_view_type":"public","site_admin":false,"contributions":3},{"login":"Astrak","id":10037511,"node_id":"MDQ6VXNlcjEwMDM3NTEx","avatar_url":"https://avatars.githubusercontent.com/u/10037511?v=4","gravatar_id":"","url":"https://api.github.com/users/Astrak","html_url":"https://github.com/Astrak","followers_url":"https://api.github.com/users/Astrak/followers","following_url":"https://api.github.com/users/Astrak/following{/other_user}","gists_url":"https://api.github.com/users/Astrak/gists{/gist_id}","starred_url":"https://api.github.com/users/Astrak/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Astrak/subscriptions","organizations_url":"https://api.github.com/users/Astrak/orgs","repos_url":"https://api.github.com/users/Astrak/repos","events_url":"https://api.github.com/users/Astrak/events{/privacy}","received_events_url":"https://api.github.com/users/Astrak/received_events","type":"User","user_view_type":"public","site_admin":false,"contributions":3},{"login":"Kurtil","id":22523482,"node_id":"MDQ6VXNlcjIyNTIzNDgy","avatar_url":"https://avatars.githubusercontent.com/u/22523482?v=4","gravatar_id":"","url":"https://api.github.com/users/Kurtil","html_url":"https://github.com/Kurtil","followers_url":"https://api.github.com/users/Kurtil/followers","following_url":"https://api.github.com/users/Kurtil/following{/other_user}","gists_url":"https://api.github.com/users/Kurtil/gists{/gist_id}","starred_url":"https://api.github.com/users/Kurtil/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Kurtil/subscriptions","organizations_url":"https://api.github.com/users/Kurtil/orgs","repos_url":"https://api.github.com/users/Kurtil/repos","events_url":"https://api.github.com/users/Kurtil/events{/privacy}","received_events_url":"https://api.github.com/users/Kurtil/received_events","type":"User","user_view_type":"public","site_admin":false,"contributions":3},{"login":"zackurben","id":2689122,"node_id":"MDQ6VXNlcjI2ODkxMjI=","avatar_url":"https://avatars.githubusercontent.com/u/2689122?v=4","gravatar_id":"","url":"https://api.github.com/users/zackurben","html_url":"https://github.com/zackurben","followers_url":"https://api.github.com/users/zackurben/followers","following_url":"https://api.github.com/users/zackurben/following{/other_user}","gists_url":"https://api.github.com/users/zackurben/gists{/gist_id}","starred_url":"https://api.github.com/users/zackurben/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/zackurben/subscriptions","organizations_url":"https://api.github.com/users/zackurben/orgs","repos_url":"https://api.github.com/users/zackurben/repos","events_url":"https://api.github.com/users/zackurben/events{/privacy}","received_events_url":"https://api.github.com/users/zackurben/received_events","type":"User","user_view_type":"public","site_admin":false,"contributions":3},{"login":"billytrend","id":6671020,"node_id":"MDQ6VXNlcjY2NzEwMjA=","avatar_url":"https://avatars.githubusercontent.com/u/6671020?v=4","gravatar_id":"","url":"https://api.github.com/users/billytrend","html_url":"https://github.com/billytrend","followers_url":"https://api.github.com/users/billytrend/followers","following_url":"https://api.github.com/users/billytrend/following{/other_user}","gists_url":"https://api.github.com/users/billytrend/gists{/gist_id}","starred_url":"https://api.github.com/users/billytrend/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/billytrend/subscriptions","organizations_url":"https://api.github.com/users/billytrend/orgs","repos_url":"https://api.github.com/users/billytrend/repos","events_url":"https://api.github.com/users/billytrend/events{/privacy}","received_events_url":"https://api.github.com/users/billytrend/received_events","type":"User","user_view_type":"public","site_admin":false,"contributions":3},{"login":"Shubidumdu","id":54790378,"node_id":"MDQ6VXNlcjU0NzkwMzc4","avatar_url":"https://avatars.githubusercontent.com/u/54790378?v=4","gravatar_id":"","url":"https://api.github.com/users/Shubidumdu","html_url":"https://github.com/Shubidumdu","followers_url":"https://api.github.com/users/Shubidumdu/followers","following_url":"https://api.github.com/users/Shubidumdu/following{/other_user}","gists_url":"https://api.github.com/users/Shubidumdu/gists{/gist_id}","starred_url":"https://api.github.com/users/Shubidumdu/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Shubidumdu/subscriptions","organizations_url":"https://api.github.com/users/Shubidumdu/orgs","repos_url":"https://api.github.com/users/Shubidumdu/repos","events_url":"https://api.github.com/users/Shubidumdu/events{/privacy}","received_events_url":"https://api.github.com/users/Shubidumdu/received_events","type":"User","user_view_type":"public","site_admin":false,"contributions":3},{"login":"lazygyu","id":1005952,"node_id":"MDQ6VXNlcjEwMDU5NTI=","avatar_url":"https://avatars.githubusercontent.com/u/1005952?v=4","gravatar_id":"","url":"https://api.github.com/users/lazygyu","html_url":"https://github.com/lazygyu","followers_url":"https://api.github.com/users/lazygyu/followers","following_url":"https://api.github.com/users/lazygyu/following{/other_user}","gists_url":"https://api.github.com/users/lazygyu/gists{/gist_id}","starred_url":"https://api.github.com/users/lazygyu/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/lazygyu/subscriptions","organizations_url":"https://api.github.com/users/lazygyu/orgs","repos_url":"https://api.github.com/users/lazygyu/repos","events_url":"https://api.github.com/users/lazygyu/events{/privacy}","received_events_url":"https://api.github.com/users/lazygyu/received_events","type":"User","user_view_type":"public","site_admin":false,"contributions":2},{"login":"alicialics","id":31378877,"node_id":"MDQ6VXNlcjMxMzc4ODc3","avatar_url":"https://avatars.githubusercontent.com/u/31378877?v=4","gravatar_id":"","url":"https://api.github.com/users/alicialics","html_url":"https://github.com/alicialics","followers_url":"https://api.github.com/users/alicialics/followers","following_url":"https://api.github.com/users/alicialics/following{/other_user}","gists_url":"https://api.github.com/users/alicialics/gists{/gist_id}","starred_url":"https://api.github.com/users/alicialics/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/alicialics/subscriptions","organizations_url":"https://api.github.com/users/alicialics/orgs","repos_url":"https://api.github.com/users/alicialics/repos","events_url":"https://api.github.com/users/alicialics/events{/privacy}","received_events_url":"https://api.github.com/users/alicialics/received_events","type":"User","user_view_type":"public","site_admin":false,"contributions":2},{"login":"grovesNL","id":2113872,"node_id":"MDQ6VXNlcjIxMTM4NzI=","avatar_url":"https://avatars.githubusercontent.com/u/2113872?v=4","gravatar_id":"","url":"https://api.github.com/users/grovesNL","html_url":"https://github.com/grovesNL","followers_url":"https://api.github.com/users/grovesNL/followers","following_url":"https://api.github.com/users/grovesNL/following{/other_user}","gists_url":"https://api.github.com/users/grovesNL/gists{/gist_id}","starred_url":"https://api.github.com/users/grovesNL/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/grovesNL/subscriptions","organizations_url":"https://api.github.com/users/grovesNL/orgs","repos_url":"https://api.github.com/users/grovesNL/repos","events_url":"https://api.github.com/users/grovesNL/events{/privacy}","received_events_url":"https://api.github.com/users/grovesNL/received_events","type":"User","user_view_type":"public","site_admin":false,"contributions":2},{"login":"cdry","id":20787516,"node_id":"MDQ6VXNlcjIwNzg3NTE2","avatar_url":"https://avatars.githubusercontent.com/u/20787516?v=4","gravatar_id":"","url":"https://api.github.com/users/cdry","html_url":"https://github.com/cdry","followers_url":"https://api.github.com/users/cdry/followers","following_url":"https://api.github.com/users/cdry/following{/other_user}","gists_url":"https://api.github.com/users/cdry/gists{/gist_id}","starred_url":"https://api.github.com/users/cdry/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cdry/subscriptions","organizations_url":"https://api.github.com/users/cdry/orgs","repos_url":"https://api.github.com/users/cdry/repos","events_url":"https://api.github.com/users/cdry/events{/privacy}","received_events_url":"https://api.github.com/users/cdry/received_events","type":"User","user_view_type":"public","site_admin":false,"contributions":2},{"login":"ahaoboy","id":19884146,"node_id":"MDQ6VXNlcjE5ODg0MTQ2","avatar_url":"https://avatars.githubusercontent.com/u/19884146?v=4","gravatar_id":"","url":"https://api.github.com/users/ahaoboy","html_url":"https://github.com/ahaoboy","followers_url":"https://api.github.com/users/ahaoboy/followers","following_url":"https://api.github.com/users/ahaoboy/following{/other_user}","gists_url":"https://api.github.com/users/ahaoboy/gists{/gist_id}","starred_url":"https://api.github.com/users/ahaoboy/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ahaoboy/subscriptions","organizations_url":"https://api.github.com/users/ahaoboy/orgs","repos_url":"https://api.github.com/users/ahaoboy/repos","events_url":"https://api.github.com/users/ahaoboy/events{/privacy}","received_events_url":"https://api.github.com/users/ahaoboy/received_events","type":"User","user_view_type":"public","site_admin":false,"contributions":2},{"login":"dcrystalj","id":1460727,"node_id":"MDQ6VXNlcjE0NjA3Mjc=","avatar_url":"https://avatars.githubusercontent.com/u/1460727?v=4","gravatar_id":"","url":"https://api.github.com/users/dcrystalj","html_url":"https://github.com/dcrystalj","followers_url":"https://api.github.com/users/dcrystalj/followers","following_url":"https://api.github.com/users/dcrystalj/following{/other_user}","gists_url":"https://api.github.com/users/dcrystalj/gists{/gist_id}","starred_url":"https://api.github.com/users/dcrystalj/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dcrystalj/subscriptions","organizations_url":"https://api.github.com/users/dcrystalj/orgs","repos_url":"https://api.github.com/users/dcrystalj/repos","events_url":"https://api.github.com/users/dcrystalj/events{/privacy}","received_events_url":"https://api.github.com/users/dcrystalj/received_events","type":"User","user_view_type":"public","site_admin":false,"contributions":2},{"login":"mattbilson","id":243331,"node_id":"MDQ6VXNlcjI0MzMzMQ==","avatar_url":"https://avatars.githubusercontent.com/u/243331?v=4","gravatar_id":"","url":"https://api.github.com/users/mattbilson","html_url":"https://github.com/mattbilson","followers_url":"https://api.github.com/users/mattbilson/followers","following_url":"https://api.github.com/users/mattbilson/following{/other_user}","gists_url":"https://api.github.com/users/mattbilson/gists{/gist_id}","starred_url":"https://api.github.com/users/mattbilson/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mattbilson/subscriptions","organizations_url":"https://api.github.com/users/mattbilson/orgs","repos_url":"https://api.github.com/users/mattbilson/repos","events_url":"https://api.github.com/users/mattbilson/events{/privacy}","received_events_url":"https://api.github.com/users/mattbilson/received_events","type":"User","user_view_type":"public","site_admin":false,"contributions":2}];
diff --git a/webgl/lessons/atom.xml b/webgl/lessons/atom.xml
index 53d9d479..316ac38d 100644
--- a/webgl/lessons/atom.xml
+++ b/webgl/lessons/atom.xml
@@ -2,7 +2,7 @@
WebGL2 Fundamentals
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://github.com/jpmonette/feed
WebGL2Fundamentals Contributors
@@ -15,1650 +15,1650 @@
https://webgl2fundamentals.org/webgl/lessons/webgl-2-textures.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-2d-drawimage.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-2d-matrices.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-2d-matrix-stack.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-2d-rotation.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-2d-scale.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-2d-translation.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-2d-vs-3d-library.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-3d-camera.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-3d-geometry-lathe.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-3d-lighting-directional.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-3d-lighting-normal-mapping.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-3d-lighting-point.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-3d-lighting-spot.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-3d-orthographic.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-3d-perspective-correct-texturemapping.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-3d-perspective.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-3d-textures.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-and-alpha.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-animation.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-anti-patterns.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-attributes.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-boilerplate.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-cors-permission.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-cross-platform-issues.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-cube-maps.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-data-textures.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-drawing-multiple-things.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-drawing-without-data.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-environment-maps.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-fog.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-framebuffers.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-fundamentals.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-getting-webgl2.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-gpgpu.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-how-it-works.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-image-processing-continued.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-image-processing.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-indexed-vertices.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-instanced-drawing.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-less-code-more-fun.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-load-obj-w-mtl.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-load-obj.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-matrix-naming.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-matrix-vs-math.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-multiple-views.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-picking.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-planar-projection-mapping.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-points-lines-triangles.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-precision-issues.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-pulling-vertices.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-a-simple-way-to-show-the-load-on-the-gpu-s-vertex-and-fragment-processing-.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-accessing-textures-by-pixel-coordinate-in-webgl2.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-apply-a-displacement-map-and-specular-map.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-can-anyone-explain-what-this-glsl-fragment-shader-is-doing-.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-can-i-mute-the-warning-about-vertex-attrib-0-being-disabled-.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-create-image-warping-effect-in-webgl.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-creating-a-smudge-liquify-effect.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-determine-min-max-values-for-the-entire-image.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-don-t-blend-a-polygon-that-crosses-itself.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-drawing-2d-image-with-depth-map-to-achieve-pseudo-3d-effect.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-drawing-a-heightmap.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-drawing-layers-with-different-points.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-drawing-many-different-models-in-a-single-draw-call.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-drawing-textured-sprites-with-instanced-drawing.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-efficient-particle-system-in-javascript---webgl-.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-emulating-palette-based-graphics-in-webgl.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-fps-like-camera-movement-with-basic-matrix-transformations.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-get-the-size-of-a-point-for-collision-checking.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-glsl-shader-to-support-coloring-and-texturing.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-how-can-i-compute-for-500-points-which-of-1000-line-segments-is-nearest-to-each-point-.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-how-can-i-create-a-16bit-historgram-of-16bit-data.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-how-can-i-get-all-the-uniforms-and-uniformblocks.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-how-can-i-move-the-perspective-vanishing-point-from-the-center-of-the-canvas-.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-how-to-achieve-moving-line-with-trail-effects.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-how-to-bind-an-array-of-textures-to-a-webgl-shader-uniform-.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-how-to-blend-colors-across-2-triangles.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-how-to-control-the-color-between-vertices.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-how-to-create-a-torus.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-how-to-detect-clipped-triangles-in-the-framgment-shader.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-how-to-determine-the-average-brightness-in-a-scene-.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-how-to-draw-correctly-textured-trapezoid-polygons.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-how-to-fade-the-drawing-buffer.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-how-to-get-audio-data-into-a-shader.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:30.595Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-how-to-get-code-completion-for-webgl-in-visual-studio-code.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-how-to-get-pixelize-effect-in-webgl-.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-how-to-get-the-3d-coordinates-of-a-mouse-click.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-how-to-implement-zoom-from-mouse-in-2d-webgl.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-how-to-import-a-heightmap-in-webgl.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-how-to-load-images-in-the-background-with-no-jank.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-how-to-make-a-smudge-brush-tool.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-how-to-make-webgl-canvas-transparent.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-how-to-optimize-rendering-a-ui.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-how-to-prevent-texture-bleeding-with-a-texture-atlas.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-how-to-process-particle-positions.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-how-to-read-a-single-component-with-readpixels.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-how-to-render-large-scale-images-like-32000x32000.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-how-to-simulate-a-3d-texture-in-webgl.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-how-to-support-both-webgl-and-webgl2.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-how-to-tell-if-an-image-has-an-alpha-channel.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-how-to-use-a-2d-sprite-s-transparency-as-a-mask.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-how-to-use-texture--and-color-also-in-webgl-.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-how-to-use-textures-as-data.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-how-to-use-the-stencil-buffer.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-how-to-write-a-web-based-music-visualizer.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-i-get-invalid-type-error-when-calling-readpixels.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-is-it-possible-to-measure-rendering-time-in-webgl-using-gl-finish---.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-is-there-the-notion-of-a-generalized-vertex-and-fragment-shader-.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-optimize-drawing-lots-of-large-images.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-passing-in-per-sprite-alpha-values-when-batching.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-pure-webgl-dashed-line.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-recording-fps-in-webgl.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-rendering-slowly-over-time.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-setting-the-values-of-a-struct-array-from-js-to-glsl.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-show-a-night-view-vs-a-day-view-on-a-3d-earth-sphere.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-sorting-and-optimizing-instanced-rendering.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-tex-image-texture_2d-level-0-is-incurring-lazy-initialization.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-the-fastest-way-to-draw-many-circles.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-webgl-2d-tilemaps.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-webgl-droste-effect.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-what-is-the-local-origin-of-a-3d-model-.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-when-to-choose-highp--mediump--lowp-in-shaders.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-working-around-gl_pointsize-limitations-webgl.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna-zooming-to-and-stopping-at-object-in-a-scene-in-webgl.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-qna.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-readpixels.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-references.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-render-to-texture.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-resizing-the-canvas.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-scene-graph.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-setup-and-installation.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-shaders-and-glsl.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-shadertoy.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-shadows-continued.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-shadows.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-skinning.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-skybox.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-smallest-programs.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-sprites.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-state-diagram.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-text-canvas2d.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-text-glyphs.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-text-html.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-text-texture.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-texture-units.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-tips.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl-visualizing-the-camera.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl1-to-webgl2-fundamentals.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl1-to-webgl2.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/webgl2-whats-new.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
\ No newline at end of file
diff --git a/webgl/lessons/de/atom.xml b/webgl/lessons/de/atom.xml
index 4262ef1e..87673807 100644
--- a/webgl/lessons/de/atom.xml
+++ b/webgl/lessons/de/atom.xml
@@ -2,7 +2,7 @@
Grundlagen WebGL2
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://github.com/jpmonette/feed
WebGL2Fundamentals Contributors
@@ -15,22 +15,22 @@
https://webgl2fundamentals.org/webgl/lessons/de/webgl-getting-webgl2.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/de/webgl1-to-webgl2-fundamentals.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
\ No newline at end of file
diff --git a/webgl/lessons/ja/atom.xml b/webgl/lessons/ja/atom.xml
index 767275a1..c2338bea 100644
--- a/webgl/lessons/ja/atom.xml
+++ b/webgl/lessons/ja/atom.xml
@@ -2,7 +2,7 @@
WebGL2の基本
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://github.com/jpmonette/feed
WebGL2Fundamentals Contributors
@@ -15,99 +15,99 @@
https://webgl2fundamentals.org/webgl/lessons/ja/webgl-fundamentals.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/ja/webgl-getting-webgl2.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/ja/webgl-how-it-works.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/ja/webgl-image-processing-continued.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/ja/webgl-image-processing.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/ja/webgl-shaders-and-glsl.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/ja/webgl1-to-webgl2-fundamentals.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/ja/webgl1-to-webgl2.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/ja/webgl2-whats-new.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
\ No newline at end of file
diff --git a/webgl/lessons/ja/webgl-how-it-works.html b/webgl/lessons/ja/webgl-how-it-works.html
index f7c2c871..bef4f3be 100644
--- a/webgl/lessons/ja/webgl-how-it-works.html
+++ b/webgl/lessons/ja/webgl-how-it-works.html
@@ -542,11 +542,11 @@ バ
実際にコーディングしてみましょう。データの取り出し方を指定する部分は以下のコードになります。
- var size = 4;
-* var type = gl.UNSIGNED_BYTE;
-* var normalize = true;
- var stride = 0;
- var offset = 0;
+ var size = 4;
+* var type = gl.UNSIGNED_BYTE;
+* var normalize = true;
+ var stride = 0;
+ var offset = 0;
gl.vertexAttribPointer(colorLocation, size, type, normalize, stride, offset);
バッファを色で塗りつぶす時は次のようにします。
@@ -555,24 +555,25 @@ バ
// that make the rectangle.
function setColors(gl) {
// Pick 2 random colors.
- var r1 = Math.random() * 256; // 0 to 255.99999
- var b1 = Math.random() * 256; // these values
- var g1 = Math.random() * 256; // will be truncated
- var r2 = Math.random() * 256; // when stored in the
- var b2 = Math.random() * 256; // Uint8Array
- var g2 = Math.random() * 256;
- gl.bufferData(
-gl.ARRAY_BUFFER,
-new Uint8Array( // Uint8Array
-[ r1, b1, g1, 255,
-r1, b1, g1, 255,
-r1, b1, g1, 255,
-r2, b2, g2, 255,
-r2, b2, g2, 255,
-r2, b2, g2, 255]),
-gl.STATIC_DRAW);
+ var r1 = Math.random() * 256; // 0 to 255.99999
+ var b1 = Math.random() * 256; // these values
+ var g1 = Math.random() * 256; // will be truncated
+ var r2 = Math.random() * 256; // when stored in the
+ var b2 = Math.random() * 256; // Uint8Array
+ var g2 = Math.random() * 256;
+
+ gl.bufferData(
+ gl.ARRAY_BUFFER,
+ new Uint8Array( // Uint8Array
+ [ r1, b1, g1, 255,
+ r1, b1, g1, 255,
+ r1, b1, g1, 255,
+ r2, b2, g2, 255,
+ r2, b2, g2, 255,
+ r2, b2, g2, 255]),
+ gl.STATIC_DRAW);
}
-
+
実行結果はこのようになります。
diff --git a/webgl/lessons/ja/webgl1-to-webgl2.html b/webgl/lessons/ja/webgl1-to-webgl2.html
index 108ab2cb..5862438c 100644
--- a/webgl/lessons/ja/webgl1-to-webgl2.html
+++ b/webgl/lessons/ja/webgl1-to-webgl2.html
@@ -541,48 +541,49 @@ WebGL1の拡張機能をWebGL2のように見せる
1つの回避策は、初期化時にWebGL1の拡張機能をWebGLコンテキストにコピーする事です。そうすると残りのコードをそのままにできます。以下が例です。
-const gl = someCanvas.getContext("webgl");
-const haveVAOs = getAndApplyExtension(gl, "OES_vertex_array_object");
-function getAndApplyExtension(gl, name) {
-const ext = gl.getExtension(name);
-if (!ext) {
-return null;
-}
-const fnSuffix = name.split("")[0];
-const enumSuffix = ' ’ + fnSuffix;
-for (const key in ext) {
-const value = ext[key];
-const isFunc = typeof (value) === ‘function’;
-const suffix = isFunc ? fnSuffix : enumSuffix;
-let name = key;
-// examples of where this is not true are WEBGL_compressed_texture_s3tc
-// and WEBGL_compressed_texture_pvrtc
-if (key.endsWith(suffix)) {
-name = key.substring(0, key.length - suffix.length);
-}
-if (gl[name] !== undefined) {
-if (!isFunc && gl[name] !== value) {
-console.warn(“conflict:”, name, gl[name], value, key);
-}
-} else {
-if (isFunc) {
-gl[name] = function(origFn) {
-return function() {
-return origFn.apply(ext, arguments);
-};
-}(value);
-} else {
-gl[name] = value;
-}
-}
-}
-return ext;
+const gl = someCanvas.getContext("webgl");
+const haveVAOs = getAndApplyExtension(gl, "OES_vertex_array_object");
+
+function getAndApplyExtension(gl, name) {
+ const ext = gl.getExtension(name);
+ if (!ext) {
+ return null;
+ }
+ const fnSuffix = name.split("_")[0];
+ const enumSuffix = '_' + fnSuffix;
+ for (const key in ext) {
+ const value = ext[key];
+ const isFunc = typeof (value) === 'function';
+ const suffix = isFunc ? fnSuffix : enumSuffix;
+ let name = key;
+ // examples of where this is not true are WEBGL_compressed_texture_s3tc
+ // and WEBGL_compressed_texture_pvrtc
+ if (key.endsWith(suffix)) {
+ name = key.substring(0, key.length - suffix.length);
+ }
+ if (gl[name] !== undefined) {
+ if (!isFunc && gl[name] !== value) {
+ console.warn("conflict:", name, gl[name], value, key);
+ }
+ } else {
+ if (isFunc) {
+ gl[name] = function(origFn) {
+ return function() {
+ return origFn.apply(ext, arguments);
+ };
+ }(value);
+ } else {
+ gl[name] = value;
+ }
+ }
+ }
+ return ext;
}
-
+
コードが両方で同じように動作するようになりました。例:
if (haveVAOs) {
- var someVAO = gl.createVertexArray();
+ var someVAO = gl.createVertexArray();
...
} else {
... do whatever for no VAOs.
@@ -592,9 +593,9 @@ WebGL1の拡張機能をWebGL2のように見せる
if (haveVAOs) {
if (isWebGL2)
- someVAO = gl.createVertexArray();
+ someVAO = gl.createVertexArray();
} else {
- someVAO = vaoExt.createVertexArrayOES();
+ someVAO = vaoExt.createVertexArrayOES();
}
...
} else {
diff --git a/webgl/lessons/ko/atom.xml b/webgl/lessons/ko/atom.xml
index 2540bd7d..f5d5baa2 100644
--- a/webgl/lessons/ko/atom.xml
+++ b/webgl/lessons/ko/atom.xml
@@ -2,7 +2,7 @@
WebGL2 기초
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://github.com/jpmonette/feed
WebGL2Fundamentals Contributors
@@ -15,682 +15,682 @@
https://webgl2fundamentals.org/webgl/lessons/ko/webgl-2-textures.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/ko/webgl-2d-drawimage.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/ko/webgl-2d-matrices.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/ko/webgl-2d-matrix-stack.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/ko/webgl-2d-rotation.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/ko/webgl-2d-scale.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/ko/webgl-2d-translation.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/ko/webgl-2d-vs-3d-library.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/ko/webgl-3d-camera.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/ko/webgl-3d-lighting-directional.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/ko/webgl-3d-lighting-point.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/ko/webgl-3d-lighting-spot.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/ko/webgl-3d-orthographic.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/ko/webgl-3d-perspective-correct-texturemapping.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/ko/webgl-3d-perspective.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/ko/webgl-3d-textures.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/ko/webgl-and-alpha.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/ko/webgl-animation.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/ko/webgl-anti-patterns.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/ko/webgl-attributes.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/ko/webgl-boilerplate.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/ko/webgl-cors-permission.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/ko/webgl-cross-platform-issues.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/ko/webgl-cube-maps.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/ko/webgl-data-textures.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/ko/webgl-drawing-multiple-things.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/ko/webgl-environment-maps.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/ko/webgl-framebuffers.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/ko/webgl-fundamentals.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/ko/webgl-getting-webgl2.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/ko/webgl-gpgpu.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/ko/webgl-how-it-works.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/ko/webgl-image-processing-continued.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/ko/webgl-image-processing.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/ko/webgl-indexed-vertices.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/ko/webgl-instanced-drawing.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/ko/webgl-less-code-more-fun.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/ko/webgl-load-obj.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/ko/webgl-matrix-naming.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/ko/webgl-matrix-vs-math.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/ko/webgl-planar-projection-mapping.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/ko/webgl-points-lines-triangles.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/ko/webgl-precision-issues.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/ko/webgl-qna.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/ko/webgl-readpixels.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/ko/webgl-references.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/ko/webgl-render-to-texture.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/ko/webgl-resizing-the-canvas.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/ko/webgl-scene-graph.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/ko/webgl-setup-and-installation.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/ko/webgl-shaders-and-glsl.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/ko/webgl-shadows.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/ko/webgl-skybox.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/ko/webgl-sprites.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/ko/webgl-text-canvas2d.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/ko/webgl-text-html.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/ko/webgl-text-texture.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/ko/webgl-texture-units.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/ko/webgl-tips.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/ko/webgl1-to-webgl2-fundamentals.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/ko/webgl1-to-webgl2.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/ko/webgl2-whats-new.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
\ No newline at end of file
diff --git a/webgl/lessons/ko/webgl-2d-drawimage.html b/webgl/lessons/ko/webgl-2d-drawimage.html
index f2568dbb..3125f950 100644
--- a/webgl/lessons/ko/webgl-2d-drawimage.html
+++ b/webgl/lessons/ko/webgl-2d-drawimage.html
@@ -698,16 +698,17 @@ 사소한 최적화
#version 300 es
in vec4 a_position;
-in vec2 a_texcoord;
-uniform mat4 u_matrix;
-uniform mat4 u_textureMatrix;
-out vec2 v_texcoord;
-void main() {
-gl_Position = u_matrix * a_position;
-
-v_texcoord = (u_textureMatrix * a_position).xy;
+
+uniform mat4 u_matrix;
+uniform mat4 u_textureMatrix;
+
+out vec2 v_texcoord;
+
+void main() {
+ gl_Position = u_matrix * a_position;
+* v_texcoord = (u_textureMatrix * a_position).xy;
}
-
-
+
이제 텍스쳐 좌표를 설정하는 코드를 삭제해도 됩니다. 삭제하더라도 이전과 완전히 동일하게 동작할 것입니다.
diff --git a/webgl/lessons/ko/webgl-2d-vs-3d-library.html b/webgl/lessons/ko/webgl-2d-vs-3d-library.html
index d43c019f..911d2f27 100644
--- a/webgl/lessons/ko/webgl-2d-vs-3d-library.html
+++ b/webgl/lessons/ko/webgl-2d-vs-3d-library.html
@@ -256,21 +256,21 @@ WebGL2 - 래스터라이징 vs 3D 라이브러리
three.js를 사용하는 경우 코드는 아래와 같습니다.
// 설정
- renderer = new THREE.WebGLRenderer({canvas: document.querySelector("#canvas")});
+ renderer = new THREE.WebGLRenderer({canvas: document.querySelector("#canvas")});
c.appendChild(renderer.domElement);
// 카메라를 생성하고 설정
- camera = new THREE.PerspectiveCamera(70, 1, 1, 1000);
- camera.position.z = 400;
+ camera = new THREE.PerspectiveCamera(70, 1, 1, 1000);
+ camera.position.z = 400;
// 장면 생성
- scene = new THREE.Scene();
+ scene = new THREE.Scene();
// 육면체 생성
- var geometry = new THREE.BoxGeometry(200, 200, 200);
+ var geometry = new THREE.BoxGeometry(200, 200, 200);
// 머티리얼 생성
- var material = new THREE.MeshPhongMaterial({
+ var material = new THREE.MeshPhongMaterial({
ambient: 0x555555,
color: 0x555555,
specular: 0xffffff,
@@ -279,15 +279,15 @@ WebGL2 - 래스터라이징 vs 3D 라이브러리
});
// geometry와 머티리얼로 메쉬 생성
- mesh = new THREE.Mesh(geometry, material);
+ mesh = new THREE.Mesh(geometry, material);
scene.add(mesh);
// 2개의 조명 생성
- light1 = new THREE.PointLight(0xff0040, 2, 0);
+ light1 = new THREE.PointLight(0xff0040, 2, 0);
light1.position.set(200, 100, 300);
scene.add(light1);
- light2 = new THREE.PointLight(0x0040ff, 2, 0);
+ light2 = new THREE.PointLight(0x0040ff, 2, 0);
light2.position.set(-200, 100, 300);
scene.add(light2);
@@ -316,10 +316,10 @@ WebGL2 - 래스터라이징 vs 3D 라이브러리
// 조명 2개 정의
glEnable(GL_LIGHT0);
glEnable(GL_LIGHT1);
- float light0_position[] = { 200, 100, 300, };
- float light1_position[] = { -200, 100, 300, };
- float light0_color[] = { 1, 0, 0.25, 1, };
- float light1_color[] = { 0, 0.25, 1, 1, };
+ float light0_position[] = { 200, 100, 300, };
+ float light1_position[] = { -200, 100, 300, };
+ float light0_color[] = { 1, 0, 0.25, 1, };
+ float light1_color[] = { 0, 0.25, 1, 1, };
glLightfv(GL_LIGHT0, GL_DIFFUSE, light0_color);
glLightfv(GL_LIGHT1, GL_DIFFUSE, light1_color);
glLightfv(GL_LIGHT0, GL_POSITION, light0_position);
@@ -327,12 +327,12 @@ WebGL2 - 래스터라이징 vs 3D 라이브러리
...
// 육면체 그리기
- static int count = 0;
+ static int count = 0;
++count;
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
- double angle = count * 0.1;
+ double angle = count * 0.1;
glTranslatef(0, 0, -400);
glRotatef(angle, 0, 1, 0);
diff --git a/webgl/lessons/ko/webgl-3d-orthographic.html b/webgl/lessons/ko/webgl-3d-orthographic.html
index 3a75c404..849b8a91 100644
--- a/webgl/lessons/ko/webgl-3d-orthographic.html
+++ b/webgl/lessons/ko/webgl-3d-orthographic.html
@@ -801,23 +801,24 @@ attribute는 vec4인데 왜 gl.vertexAttribPointer의 size는 3인가요?둘 다 'vec4'지만, 우리가 버퍼에서 데이터를 가져오는 방법을 WebGL에 알려줄 때에는 아래와 같이 정의하였습니다.
// attribute에게 positionBuffer (ARRAY_BUFFER)로부터 데이터를 가져오는 법을 알려줍니다.
-var size = 3; // iteration마다 3 개의 component
-var type = gl.FLOAT; // 데이터는 32bit floats
-var normalize = false; // 데이터를 정규화하지 않음
-var stride = 0; // 0 = 각 iteration마다 다음 위치값을 얻기 위해 size * sizeof(type) 만큼 앞으로 이동
-var offset = 0; // 버퍼의 맨 앞부분부터 시작
+var size = 3; // iteration마다 3 개의 component
+var type = gl.FLOAT; // 데이터는 32bit floats
+var normalize = false; // 데이터를 정규화하지 않음
+var stride = 0; // 0 = 각 iteration마다 다음 위치값을 얻기 위해 size * sizeof(type) 만큼 앞으로 이동
+var offset = 0; // 버퍼의 맨 앞부분부터 시작
gl.vertexAttribPointer(
positionAttributeLocation, size, type, normalize, stride, offset);
-…
-// attribute에게 colorBuffer (ARRAY_BUFFER)로부터 데이터를 가져오는 법을 알려줍니다.
-var size = 3; // iteration마다 3개의 component
-var type = gl.UNSIGNED_BYTE; // 데이터는 8bit unsigned bytes
-var normalize = true; // 0-255 범위에서 0.0-1.0 범위로 변환
-var stride = 0; // 0 = 각 iteration마다 다음 색상값을 얻기 위해 size * sizeof(type) 만큼 앞으로 이동
-var offset = 0; // 버퍼의 맨 앞부분부터 시작
+
+...
+// attribute에게 colorBuffer (ARRAY_BUFFER)로부터 데이터를 가져오는 법을 알려줍니다.
+var size = 3; // iteration마다 3개의 component
+var type = gl.UNSIGNED_BYTE; // 데이터는 8bit unsigned bytes
+var normalize = true; // 0-255 범위에서 0.0-1.0 범위로 변환
+var stride = 0; // 0 = 각 iteration마다 다음 색상값을 얻기 위해 size * sizeof(type) 만큼 앞으로 이동
+var offset = 0; // 버퍼의 맨 앞부분부터 시작
gl.vertexAttribPointer(
-colorAttributeLocation, size, type, normalize, stride, offset);
-
+ colorAttributeLocation, size, type, normalize, stride, offset);
+
위에 써있는 '3'들은 버퍼에서 iteration마다, attribute마다 3개의 값을 가져오라는 뜻입니다.
이래도 되는 이유는 WebGL의 정점 쉐이더는 입력하지 않는 값에 대해 기본값을 사용하기 때문입니다.
diff --git a/webgl/lessons/ko/webgl-how-it-works.html b/webgl/lessons/ko/webgl-how-it-works.html
index 2df0a22f..0f7714ba 100644
--- a/webgl/lessons/ko/webgl-how-it-works.html
+++ b/webgl/lessons/ko/webgl-how-it-works.html
@@ -488,11 +488,11 @@
WebGL2 작동 원리
이를 위해 코드를 변경해 보겠습니다. WebGL에게 우리가 사용할 색상을 가져오는 방법을 알려줄 때,
- var size = 4;
-* var type = gl.UNSIGNED_BYTE;
-* var normalize = true;
- var stride = 0;
- var offset = 0;
+ var size = 4;
+* var type = gl.UNSIGNED_BYTE;
+* var normalize = true;
+ var stride = 0;
+ var offset = 0;
gl.vertexAttribPointer(colorLocation, size, type, normalize, stride, offset);
그 다음 버퍼를 사용할 색상으로 채울때 입니다.
@@ -500,24 +500,25 @@ WebGL2 작동 원리
// 사각형을 구성하는 두 개의 삼각형의 색상으로 버퍼를 채움
function setColors(gl) {
// 2 개의 랜덤 색상 선택
- var r1 = Math.random() * 256; // 0 에서 255.99999 사이의 값.
- var b1 = Math.random() * 256; // 이 값들은
- var g1 = Math.random() * 256; // Uint8Array에 저장될 때
- var r2 = Math.random() * 256; // 절단이 발생함
- var b2 = Math.random() * 256;
- var g2 = Math.random() * 256;
-gl.bufferData(
-gl.ARRAY_BUFFER,
-new Uint8Array( // Uint8Array
-[ r1, b1, g1, 255,
-r1, b1, g1, 255,
-r1, b1, g1, 255,
-r2, b2, g2, 255,
-r2, b2, g2, 255,
-r2, b2, g2, 255]),
-gl.STATIC_DRAW);
+ var r1 = Math.random() * 256; // 0 에서 255.99999 사이의 값.
+ var b1 = Math.random() * 256; // 이 값들은
+ var g1 = Math.random() * 256; // Uint8Array에 저장될 때
+ var r2 = Math.random() * 256; // 절단이 발생함
+ var b2 = Math.random() * 256;
+ var g2 = Math.random() * 256;
+
+ gl.bufferData(
+ gl.ARRAY_BUFFER,
+ new Uint8Array( // Uint8Array
+ [ r1, b1, g1, 255,
+ r1, b1, g1, 255,
+ r1, b1, g1, 255,
+ r2, b2, g2, 255,
+ r2, b2, g2, 255,
+ r2, b2, g2, 255]),
+ gl.STATIC_DRAW);
}
-
+
아래는 결과 예제입니다.
diff --git a/webgl/lessons/ko/webgl-less-code-more-fun.html b/webgl/lessons/ko/webgl-less-code-more-fun.html
index 171495c8..bb0ab2a3 100644
--- a/webgl/lessons/ko/webgl-less-code-more-fun.html
+++ b/webgl/lessons/ko/webgl-less-code-more-fun.html
@@ -657,10 +657,11 @@ setter들을 직접 호출해서 사용해도 되나요?
// 초기화 시점에
-var uniformSetters = twgl.createUniformSetters(program);
-// 그리는 시점에
+var uniformSetters = twgl.createUniformSetters(program);
+
+// 그리는 시점에
uniformSetters.u_ambient([1, 0, 0, 1]); // ambient color를 빨간색으로 설정.
-
+
이렇게 하는것이 좋지 않은 이유는 GLSL 프로그램을 작성할 때 셰이더를 변경하는 경우가 종종 생긴다는 겁니다. 주로 디버깅 목적으로요.
예를들어 프로그램을 사용했더니 화면에 아무것도 보이지 않는다고 합시다.
저같은 경우 이렇게 아무것도 나타나지 않을때 때 제일 먼저 하는 작업은 셰이더를 단순화 하는 것입니다.
@@ -669,41 +670,44 @@
setter들을 직접 호출해서 사용해도 되나요?
#version 300 es
precision highp float;
-in vec4 v_position;
+
+in vec4 v_position;
in vec2 v_texCoord;
in vec3 v_normal;
in vec3 v_surfaceToLight;
-in vec3 v_surfaceToView;
-uniform vec4 u_lightColor;
+in vec3 v_surfaceToView;
+
+uniform vec4 u_lightColor;
uniform vec4 u_ambient;
uniform sampler2D u_diffuse;
uniform vec4 u_specular;
uniform float u_shininess;
-uniform float u_specularFactor;
-out vec4 outColor;
-vec4 lit(float l ,float h, float m) {
-return vec4(1.0,
-max(l, 0.0),
-(l > 0.0) ? pow(max(0.0, h), m) : 0.0,
-1.0);
-}
-void main() {
-vec4 diffuseColor = texture2D(u_diffuse, v_texCoord);
-vec3 a_normal = normalize(v_normal);
-vec3 surfaceToLight = normalize(v_surfaceToLight);
-vec3 surfaceToView = normalize(v_surfaceToView);
-vec3 halfVector = normalize(surfaceToLight + surfaceToView);
-vec4 litR = lit(dot(a_normal, surfaceToLight),
-dot(a_normal, halfVector), u_shininess);
-vec4 outColor = vec4((
-u_lightColor * (diffuseColor * litR.y + diffuseColor * u_ambient +
-u_specular * litR.z * u_specularFactor)).rgb,
-diffuseColor.a);
-
-outColor = vec4(0,1,0,1); // <!— 단순한 초록색으로
+uniform float u_specularFactor;
+
+out vec4 outColor;
+
+vec4 lit(float l ,float h, float m) {
+ return vec4(1.0,
+ max(l, 0.0),
+ (l > 0.0) ? pow(max(0.0, h), m) : 0.0,
+ 1.0);
}
-
-
+
+void main() {
+ vec4 diffuseColor = texture2D(u_diffuse, v_texCoord);
+ vec3 a_normal = normalize(v_normal);
+ vec3 surfaceToLight = normalize(v_surfaceToLight);
+ vec3 surfaceToView = normalize(v_surfaceToView);
+ vec3 halfVector = normalize(surfaceToLight + surfaceToView);
+ vec4 litR = lit(dot(a_normal, surfaceToLight),
+ dot(a_normal, halfVector), u_shininess);
+ vec4 outColor = vec4((
+ u_lightColor * (diffuseColor * litR.y + diffuseColor * u_ambient +
+ u_specular * litR.z * u_specularFactor)).rgb,
+ diffuseColor.a);
+* outColor = vec4(0,1,0,1); // <!--- 단순한 초록색으로
+}
+
outColor
를 단색으로 설정하는 라인을 추가한 것에 주목하세요.
대부분의 드라이버는 위쪽 라인의 코드들이 최종 결과에 영향을 주지 않는다는 것을 알아냅니다.
그래서 모든 uniform들을 최적화합니다. 프로그램을 다시 실행하여 twgl.createUniformSetters
를 호출하면 u_ambient
를 위한 setter를 생성하지 못하고 위 코드에서 uniformSetters.u_ambient()
를 호출하는 부분이 실패하면서 아래와 같은 메시지가 나타납니다.
diff --git a/webgl/lessons/ko/webgl-planar-projection-mapping.html b/webgl/lessons/ko/webgl-planar-projection-mapping.html
index a8f76c5a..e74c2e8a 100644
--- a/webgl/lessons/ko/webgl-planar-projection-mapping.html
+++ b/webgl/lessons/ko/webgl-planar-projection-mapping.html
@@ -908,17 +908,18 @@
WebGL2 평면 및 원근 투영 매핑
조건부 텍스처 참조
위의 프래그먼트 셰이더에서는 항상 두 개의 텍스처를 모두 읽게 됩니다.
- vec4 projectedTexColor = texture(u_projectedTexture, projectedTexcoord.xy);
- vec4 texColor = texture(u_texture, v_texcoord) * u_colorMult;
-float projectedAmount = inRange ? 1.0 : 0.0;
-gl_FragColor = mix(texColor, projectedTexColor, projectedAmount);
-
+ vec4 projectedTexColor = texture(u_projectedTexture, projectedTexcoord.xy);
+ vec4 texColor = texture(u_texture, v_texcoord) * u_colorMult;
+
+ float projectedAmount = inRange ? 1.0 : 0.0;
+ gl_FragColor = mix(texColor, projectedTexColor, projectedAmount);
+
왜 아래와 같이 하지 않았을까요?
if (inRange) {
- gl_FragColor = texture(u_projectedTexture, projectedTexcoord.xy);
+ gl_FragColor = texture(u_projectedTexture, projectedTexcoord.xy);
} else {
- gl_FragColor = texture(u_texture, v_texcoord) * u_colorMult;
+ gl_FragColor = texture(u_texture, v_texcoord) * u_colorMult;
}
GLSL ES 3.0 명세의 Section 8.8 에 따르면
@@ -934,20 +935,22 @@ Texture Lookup Functions
결과를 조건부로 사용할 수는 있습니다.
예를 들어 아래와 같이 작성하거나
- vec4 projectedTexColor = texture(u_projectedTexture, projectedTexcoord.xy);
- vec4 texColor = texture(u_texture, v_texcoord) * u_colorMult;
-if (inRange) {
-gl_FragColor = projectedTexColor;
-} else {
-gl_FragColor = texColor;
-}
-
+ vec4 projectedTexColor = texture(u_projectedTexture, projectedTexcoord.xy);
+ vec4 texColor = texture(u_texture, v_texcoord) * u_colorMult;
+
+ if (inRange) {
+ gl_FragColor = projectedTexColor;
+ } else {
+ gl_FragColor = texColor;
+ }
+
아래와 같이 작성할 수 있습니다.
- vec4 projectedTexColor = texture(u_projectedTexture, projectedTexcoord.xy);
- vec4 texColor = texture(u_texture, v_texcoord) * u_colorMult;
-gl_FragColor = inRange ? projectedTexColor : texColor;
-
+ vec4 projectedTexColor = texture(u_projectedTexture, projectedTexcoord.xy);
+ vec4 texColor = texture(u_texture, v_texcoord) * u_colorMult;
+
+ gl_FragColor = inRange ? projectedTexColor : texColor;
+
하지만 텍스처 접근 자체를 조건부로 만들 수는 없습니다.
어떤 GPU에서는 작동될 수 있지만 모든 GPU에서 작동이 보장되지는 않습니다.
diff --git a/webgl/lessons/ko/webgl1-to-webgl2.html b/webgl/lessons/ko/webgl1-to-webgl2.html
index 9bca775e..68ebdfc6 100644
--- a/webgl/lessons/ko/webgl1-to-webgl2.html
+++ b/webgl/lessons/ko/webgl1-to-webgl2.html
@@ -542,11 +542,11 @@
Vertex Array Objects
WebGL1 extension을 WebGL2처럼 만들기
WebGL1의 extension에 있던 함수들은, WebGL2에서는 extension 없이 사용할 수 있습니다. 예를 들면, WebGL1에서는 아래와 같았지만
-var ext = gl.getExtension("OES_vertex_array_object");
+var ext = gl.getExtension("OES_vertex_array_object");
if (!ext) {
- // tell user they don't have the required extension or work around it
+ // tell user they don't have the required extension or work around it
} else {
- var someVAO = ext.createVertexArrayOES();
+ var someVAO = ext.createVertexArrayOES();
}
@@ -560,48 +560,49 @@
WebGL1 extension을 WebGL2처럼 만들기
한 가지 해결 방법은, 초기화할 때 WebGL1 extension을 WebGL context에 복사하는 것입니다.
그렇게 하면 나머지 코드는 그대로입니다. 예시:
-const gl = someCanvas.getContext("webgl");
-const haveVAOs = getAndApplyExtension(gl, "OES_vertex_array_object");
-function getAndApplyExtension(gl, name) {
-const ext = gl.getExtension(name);
-if (!ext) {
-return null;
-}
-const fnSuffix = name.split("")[0];
-const enumSuffix = ' ’ + fnSuffix;
-for (const key in ext) {
-const value = ext[key];
-const isFunc = typeof (value) === ‘function’;
-const suffix = isFunc ? fnSuffix : enumSuffix;
-let name = key;
-// examples of where this is not true are WEBGL_compressed_texture_s3tc
-// and WEBGL_compressed_texture_pvrtc
-if (key.endsWith(suffix)) {
-name = key.substring(0, key.length - suffix.length);
-}
-if (gl[name] !== undefined) {
-if (!isFunc && gl[name] !== value) {
-console.warn(“conflict:”, name, gl[name], value, key);
-}
-} else {
-if (isFunc) {
-gl[name] = function(origFn) {
-return function() {
-return origFn.apply(ext, arguments);
-};
-}(value);
-} else {
-gl[name] = value;
-}
-}
-}
-return ext;
+const gl = someCanvas.getContext("webgl");
+const haveVAOs = getAndApplyExtension(gl, "OES_vertex_array_object");
+
+function getAndApplyExtension(gl, name) {
+ const ext = gl.getExtension(name);
+ if (!ext) {
+ return null;
+ }
+ const fnSuffix = name.split("_")[0];
+ const enumSuffix = '_' + fnSuffix;
+ for (const key in ext) {
+ const value = ext[key];
+ const isFunc = typeof (value) === 'function';
+ const suffix = isFunc ? fnSuffix : enumSuffix;
+ let name = key;
+ // examples of where this is not true are WEBGL_compressed_texture_s3tc
+ // and WEBGL_compressed_texture_pvrtc
+ if (key.endsWith(suffix)) {
+ name = key.substring(0, key.length - suffix.length);
+ }
+ if (gl[name] !== undefined) {
+ if (!isFunc && gl[name] !== value) {
+ console.warn("conflict:", name, gl[name], value, key);
+ }
+ } else {
+ if (isFunc) {
+ gl[name] = function(origFn) {
+ return function() {
+ return origFn.apply(ext, arguments);
+ };
+ }(value);
+ } else {
+ gl[name] = value;
+ }
+ }
+ }
+ return ext;
}
-
+
이제 이 코드는 WebGL1과 WebGL2 에서 대부분 똑같이 동작할 겁니다. 예시:
if (haveVAOs) {
- var someVAO = gl.createVertexArray();
+ var someVAO = gl.createVertexArray();
...
} else {
... do whatever for no VAOs.
@@ -611,9 +612,9 @@ WebGL1 extension을 WebGL2처럼 만들기
if (haveVAOs) {
if (isWebGL2)
- someVAO = gl.createVertexArray();
+ someVAO = gl.createVertexArray();
} else {
- someVAO = vaoExt.createVertexArrayOES();
+ someVAO = vaoExt.createVertexArrayOES();
}
...
} else {
diff --git a/webgl/lessons/pt-br/atom.xml b/webgl/lessons/pt-br/atom.xml
index 58bbd024..7618f689 100644
--- a/webgl/lessons/pt-br/atom.xml
+++ b/webgl/lessons/pt-br/atom.xml
@@ -2,7 +2,7 @@
Fundamentos da WebGL2
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://github.com/jpmonette/feed
WebGL2Fundamentals Contributors
@@ -15,198 +15,198 @@
https://webgl2fundamentals.org/webgl/lessons/pt-br/webgl-2d-rotation.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/pt-br/webgl-2d-scale.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/pt-br/webgl-2d-translation.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/pt-br/webgl-2d-vs-3d-library.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/pt-br/webgl-and-alpha.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/pt-br/webgl-animation.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/pt-br/webgl-cors-permission.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/pt-br/webgl-fundamentals.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/pt-br/webgl-getting-webgl2.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/pt-br/webgl-image-processing-continued.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/pt-br/webgl-image-processing.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/pt-br/webgl-matrix-naming.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/pt-br/webgl-setup-and-installation.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/pt-br/webgl-text-canvas2d.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/pt-br/webgl-text-html.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/pt-br/webgl1-to-webgl2-fundamentals.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/pt-br/webgl1-to-webgl2.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/pt-br/webgl2-whats-new.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
\ No newline at end of file
diff --git a/webgl/lessons/pt-br/webgl-2d-vs-3d-library.html b/webgl/lessons/pt-br/webgl-2d-vs-3d-library.html
index 34ec1469..7c2d90f8 100644
--- a/webgl/lessons/pt-br/webgl-2d-vs-3d-library.html
+++ b/webgl/lessons/pt-br/webgl-2d-vs-3d-library.html
@@ -262,21 +262,21 @@ WebGL2 - Rasterização vs Bibliotecas 3D
Aqui está o código em three.js para fazer isso
// Setup.
- renderer = new THREE.WebGLRenderer({canvas: document.querySelector("#canvas")});
+ renderer = new THREE.WebGLRenderer({canvas: document.querySelector("#canvas")});
c.appendChild(renderer.domElement);
// Make and setup a camera.
- camera = new THREE.PerspectiveCamera(70, 1, 1, 1000);
- camera.position.z = 400;
+ camera = new THREE.PerspectiveCamera(70, 1, 1, 1000);
+ camera.position.z = 400;
// Make a scene
- scene = new THREE.Scene();
+ scene = new THREE.Scene();
// Make a cube.
- var geometry = new THREE.BoxGeometry(200, 200, 200);
+ var geometry = new THREE.BoxGeometry(200, 200, 200);
// Make a material
- var material = new THREE.MeshPhongMaterial({
+ var material = new THREE.MeshPhongMaterial({
ambient: 0x555555,
color: 0x555555,
specular: 0xffffff,
@@ -285,15 +285,15 @@ WebGL2 - Rasterização vs Bibliotecas 3D
});
// Create a mesh based on the geometry and material
- mesh = new THREE.Mesh(geometry, material);
+ mesh = new THREE.Mesh(geometry, material);
scene.add(mesh);
// Add 2 lights.
- light1 = new THREE.PointLight(0xff0040, 2, 0);
+ light1 = new THREE.PointLight(0xff0040, 2, 0);
light1.position.set(200, 100, 300);
scene.add(light1);
- light2 = new THREE.PointLight(0x0040ff, 2, 0);
+ light2 = new THREE.PointLight(0x0040ff, 2, 0);
light2.position.set(-200, 100, 300);
scene.add(light2);
@@ -322,10 +322,10 @@ WebGL2 - Rasterização vs Bibliotecas 3D
// Setup 2 lights
glEnable(GL_LIGHT0);
glEnable(GL_LIGHT1);
- float light0_position[] = { 200, 100, 300, };
- float light1_position[] = { -200, 100, 300, };
- float light0_color[] = { 1, 0, 0.25, 1, };
- float light1_color[] = { 0, 0.25, 1, 1, };
+ float light0_position[] = { 200, 100, 300, };
+ float light1_position[] = { -200, 100, 300, };
+ float light0_color[] = { 1, 0, 0.25, 1, };
+ float light1_color[] = { 0, 0.25, 1, 1, };
glLightfv(GL_LIGHT0, GL_DIFFUSE, light0_color);
glLightfv(GL_LIGHT1, GL_DIFFUSE, light1_color);
glLightfv(GL_LIGHT0, GL_POSITION, light0_position);
@@ -333,12 +333,12 @@ WebGL2 - Rasterização vs Bibliotecas 3D
...
// Draw a cube.
- static int count = 0;
+ static int count = 0;
++count;
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
- double angle = count * 0.1;
+ double angle = count * 0.1;
glTranslatef(0, 0, -400);
glRotatef(angle, 0, 1, 0);
diff --git a/webgl/lessons/pt-br/webgl1-to-webgl2.html b/webgl/lessons/pt-br/webgl1-to-webgl2.html
index 72c531af..b0b38213 100644
--- a/webgl/lessons/pt-br/webgl1-to-webgl2.html
+++ b/webgl/lessons/pt-br/webgl1-to-webgl2.html
@@ -526,52 +526,53 @@ Fazendo as extensões WebGL1 parecer WebGL2
As funções que estavam em extensões no WebGL1 estão agora no contexto principal
no WebGL2. Por exemplo, no WebGL
-var ext = gl.getExtension("OES_vertex_array_object");
+var ext = gl.getExtension("OES_vertex_array_object");
if (!ext) {
// Diga ao usuário que ele não têm a extensão necessária ou trabalhar em torno dela
} else {
- var someVAO = ext.createVertexArrayOES();
+ var someVAO = ext.createVertexArrayOES();
}
vs em webgl2
-var someVAO = gl.createVertexArray();
+var someVAO = gl.createVertexArray();
Acomo você pode ver se você deseja que seu código seja executado tanto no WebGL1 quanto no WebGL2,
que pode apresentar alguns desafios.
Uma solução seria copiar extensões WebGL1 ao contexto WebGL em tempo de inicialização.
Dessa forma, o resto do seu código pode permanecer o mesmo. Exemplo:
-var gl = someCanvas.getContext("webgl");
-var haveVAOs = getAndApplyExtension(gl, "OES_vertex_array_object"));
-function getAndApplyExtension(gl, name) {
-var ext = gl.getExtension(name);
-if (!ext) {
-return false;
-}
-var suffix = name.split("")[0];
-var prefix = suffix = ' ‘;
-var suffixRE = new RegExp(suffix + ‘$’);
-var prefixRE = new RegExp(’^’ + prefix);
-for (var key in ext) {
-var val = ext[key];
-if (typeof(val) === ‘function’) {
-// remover sufixo (ex: bindVertexArrayOES -> bindVertexArray)
-var unsuffixedKey = key.replace(suffixRE, ‘’);
-if (key.substing)
-gl[unprefixedKey] = ext[key].bind(ext);
-} else {
-var unprefixedKey = key.replace(prefixRE, ‘’);
-gl[unprefixedKey] = ext[key];
-}
-}
-
+var gl = someCanvas.getContext("webgl");
+var haveVAOs = getAndApplyExtension(gl, "OES_vertex_array_object"));
+
+function getAndApplyExtension(gl, name) {
+ var ext = gl.getExtension(name);
+ if (!ext) {
+ return false;
+ }
+ var suffix = name.split("_")[0];
+ var prefix = suffix = '_';
+ var suffixRE = new RegExp(suffix + '$');
+ var prefixRE = new RegExp('^' + prefix);
+ for (var key in ext) {
+ var val = ext[key];
+ if (typeof(val) === 'function') {
+ // remover sufixo (ex: bindVertexArrayOES -> bindVertexArray)
+ var unsuffixedKey = key.replace(suffixRE, '');
+ if (key.substing)
+ gl[unprefixedKey] = ext[key].bind(ext);
+ } else {
+ var unprefixedKey = key.replace(prefixRE, '');
+ gl[unprefixedKey] = ext[key];
+ }
+ }
+
Agora, seu código pode funcionar da mesma forma em ambos. Exemplo:
if (haveVAOs) {
- var someVAO = gl.createVertexArray();
+ var someVAO = gl.createVertexArray();
...
} else {
... do whatever for no VAOs.
@@ -581,9 +582,9 @@ Fazendo as extensões WebGL1 parecer WebGL2
if (haveVAOs) {
if (isWebGL2)
- someVAO = gl.createVertexArray();
+ someVAO = gl.createVertexArray();
} else {
- someVAO = vaoExt.createVertexArrayOES();
+ someVAO = vaoExt.createVertexArrayOES();
}
...
} else {
diff --git a/webgl/lessons/webgl-2d-drawimage.html b/webgl/lessons/webgl-2d-drawimage.html
index 86648c5e..1875ae87 100644
--- a/webgl/lessons/webgl-2d-drawimage.html
+++ b/webgl/lessons/webgl-2d-drawimage.html
@@ -697,16 +697,17 @@ A minor optimization
#version 300 es
in vec4 a_position;
-in vec2 a_texcoord;
-uniform mat4 u_matrix;
-uniform mat4 u_textureMatrix;
-out vec2 v_texcoord;
-void main() {
-gl_Position = u_matrix * a_position;
-
-v_texcoord = (u_textureMatrix * a_position).xy;
+
+uniform mat4 u_matrix;
+uniform mat4 u_textureMatrix;
+
+out vec2 v_texcoord;
+
+void main() {
+ gl_Position = u_matrix * a_position;
+* v_texcoord = (u_textureMatrix * a_position).xy;
}
-
-
+
We can now remove the code that setup the texture coordinates and it will
work just the same as before.
diff --git a/webgl/lessons/webgl-2d-vs-3d-library.html b/webgl/lessons/webgl-2d-vs-3d-library.html
index c90f5d8a..4129b439 100644
--- a/webgl/lessons/webgl-2d-vs-3d-library.html
+++ b/webgl/lessons/webgl-2d-vs-3d-library.html
@@ -262,21 +262,21 @@
WebGL2 - Rasterization vs 3D libraries
Here’s the code in three.js to display this
// Setup.
- renderer = new THREE.WebGLRenderer({canvas: document.querySelector("#canvas")});
+ renderer = new THREE.WebGLRenderer({canvas: document.querySelector("#canvas")});
c.appendChild(renderer.domElement);
// Make and setup a camera.
- camera = new THREE.PerspectiveCamera(70, 1, 1, 1000);
- camera.position.z = 400;
+ camera = new THREE.PerspectiveCamera(70, 1, 1, 1000);
+ camera.position.z = 400;
// Make a scene
- scene = new THREE.Scene();
+ scene = new THREE.Scene();
// Make a cube.
- var geometry = new THREE.BoxGeometry(200, 200, 200);
+ var geometry = new THREE.BoxGeometry(200, 200, 200);
// Make a material
- var material = new THREE.MeshPhongMaterial({
+ var material = new THREE.MeshPhongMaterial({
ambient: 0x555555,
color: 0x555555,
specular: 0xffffff,
@@ -285,15 +285,15 @@ WebGL2 - Rasterization vs 3D libraries
});
// Create a mesh based on the geometry and material
- mesh = new THREE.Mesh(geometry, material);
+ mesh = new THREE.Mesh(geometry, material);
scene.add(mesh);
// Add 2 lights.
- light1 = new THREE.PointLight(0xff0040, 2, 0);
+ light1 = new THREE.PointLight(0xff0040, 2, 0);
light1.position.set(200, 100, 300);
scene.add(light1);
- light2 = new THREE.PointLight(0x0040ff, 2, 0);
+ light2 = new THREE.PointLight(0x0040ff, 2, 0);
light2.position.set(-200, 100, 300);
scene.add(light2);
@@ -322,10 +322,10 @@
WebGL2 - Rasterization vs 3D libraries
// Setup 2 lights
glEnable(GL_LIGHT0);
glEnable(GL_LIGHT1);
- float light0_position[] = { 200, 100, 300, };
- float light1_position[] = { -200, 100, 300, };
- float light0_color[] = { 1, 0, 0.25, 1, };
- float light1_color[] = { 0, 0.25, 1, 1, };
+ float light0_position[] = { 200, 100, 300, };
+ float light1_position[] = { -200, 100, 300, };
+ float light0_color[] = { 1, 0, 0.25, 1, };
+ float light1_color[] = { 0, 0.25, 1, 1, };
glLightfv(GL_LIGHT0, GL_DIFFUSE, light0_color);
glLightfv(GL_LIGHT1, GL_DIFFUSE, light1_color);
glLightfv(GL_LIGHT0, GL_POSITION, light0_position);
@@ -333,12 +333,12 @@
WebGL2 - Rasterization vs 3D libraries
...
// Draw a cube.
- static int count = 0;
+ static int count = 0;
++count;
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
- double angle = count * 0.1;
+ double angle = count * 0.1;
glTranslatef(0, 0, -400);
glRotatef(angle, 0, 1, 0);
diff --git a/webgl/lessons/webgl-less-code-more-fun.html b/webgl/lessons/webgl-less-code-more-fun.html
index d66ad7d1..90fc24ab 100644
--- a/webgl/lessons/webgl-less-code-more-fun.html
+++ b/webgl/lessons/webgl-less-code-more-fun.html
@@ -657,10 +657,11 @@
Can we use the setters directly?
// At initialization time
-var uniformSetters = twgl.createUniformSetters(program);
-// At draw time
+var uniformSetters = twgl.createUniformSetters(program);
+
+// At draw time
uniformSetters.u_ambient([1, 0, 0, 1]); // set the ambient color to red.
-
+
The reason this is not a good idea is because when you're working with GLSL you might
modify the shaders from time to time, often to debug. Let's say we were not seeing
anything on the screen in our program. One of the first things I do when nothing
@@ -669,41 +670,44 @@
Can we use the setters directly?
#version 300 es
precision highp float;
-in vec4 v_position;
+
+in vec4 v_position;
in vec2 v_texCoord;
in vec3 v_normal;
in vec3 v_surfaceToLight;
-in vec3 v_surfaceToView;
-uniform vec4 u_lightColor;
+in vec3 v_surfaceToView;
+
+uniform vec4 u_lightColor;
uniform vec4 u_ambient;
uniform sampler2D u_diffuse;
uniform vec4 u_specular;
uniform float u_shininess;
-uniform float u_specularFactor;
-out vec4 outColor;
-vec4 lit(float l ,float h, float m) {
-return vec4(1.0,
-max(l, 0.0),
-(l > 0.0) ? pow(max(0.0, h), m) : 0.0,
-1.0);
-}
-void main() {
-vec4 diffuseColor = texture2D(u_diffuse, v_texCoord);
-vec3 a_normal = normalize(v_normal);
-vec3 surfaceToLight = normalize(v_surfaceToLight);
-vec3 surfaceToView = normalize(v_surfaceToView);
-vec3 halfVector = normalize(surfaceToLight + surfaceToView);
-vec4 litR = lit(dot(a_normal, surfaceToLight),
-dot(a_normal, halfVector), u_shininess);
-vec4 outColor = vec4((
-u_lightColor * (diffuseColor * litR.y + diffuseColor * u_ambient +
-u_specular * litR.z * u_specularFactor)).rgb,
-diffuseColor.a);
-
-outColor = vec4(0,1,0,1); // <!— just green
+uniform float u_specularFactor;
+
+out vec4 outColor;
+
+vec4 lit(float l ,float h, float m) {
+ return vec4(1.0,
+ max(l, 0.0),
+ (l > 0.0) ? pow(max(0.0, h), m) : 0.0,
+ 1.0);
}
-
-
+
+void main() {
+ vec4 diffuseColor = texture2D(u_diffuse, v_texCoord);
+ vec3 a_normal = normalize(v_normal);
+ vec3 surfaceToLight = normalize(v_surfaceToLight);
+ vec3 surfaceToView = normalize(v_surfaceToView);
+ vec3 halfVector = normalize(surfaceToLight + surfaceToView);
+ vec4 litR = lit(dot(a_normal, surfaceToLight),
+ dot(a_normal, halfVector), u_shininess);
+ vec4 outColor = vec4((
+ u_lightColor * (diffuseColor * litR.y + diffuseColor * u_ambient +
+ u_specular * litR.z * u_specularFactor)).rgb,
+ diffuseColor.a);
+* outColor = vec4(0,1,0,1); // <!--- just green
+}
+
Notice I just added a line that sets outColor
to a constant color.
Most drivers will see that none of the previous lines in the file actually contribute
to the result. As such they'll optimize out all of our uniforms. The next time we run the program
diff --git a/webgl/lessons/webgl-load-obj-w-mtl.html b/webgl/lessons/webgl-load-obj-w-mtl.html
index 2b1a2c45..d6d7105c 100644
--- a/webgl/lessons/webgl-load-obj-w-mtl.html
+++ b/webgl/lessons/webgl-load-obj-w-mtl.html
@@ -1019,13 +1019,14 @@
Avoid conditionals in shaders where possible
uniform bool hasDiffuseMap;
uniform vec4 diffuse;
uniform sampler2D diffuseMap
-
…
-vec4 effectiveDiffuse = diffuse;
-if (hasDiffuseMap) {
-effectiveDiffuse *= texture2D(diffuseMap, texcoord);
-}
-…
-
+
+...
+ vec4 effectiveDiffuse = diffuse;
+ if (hasDiffuseMap) {
+ effectiveDiffuse *= texture2D(diffuseMap, texcoord);
+ }
+...
+
Conditionals like that are generally discouraged because depending on the
GPU/driver they are often not very performant.
Either do like we did above and try to make the code have no conditionals. We used
diff --git a/webgl/lessons/webgl-planar-projection-mapping.html b/webgl/lessons/webgl-planar-projection-mapping.html
index 17725ea0..8affe10c 100644
--- a/webgl/lessons/webgl-planar-projection-mapping.html
+++ b/webgl/lessons/webgl-planar-projection-mapping.html
@@ -958,17 +958,18 @@
Conditional Texture References
In the fragment shader above we get read both textures
in all cases.
- vec4 projectedTexColor = texture(u_projectedTexture, projectedTexcoord.xy);
- vec4 texColor = texture(u_texture, v_texcoord) * u_colorMult;
-float projectedAmount = inRange ? 1.0 : 0.0;
-gl_FragColor = mix(texColor, projectedTexColor, projectedAmount);
-
+ vec4 projectedTexColor = texture(u_projectedTexture, projectedTexcoord.xy);
+ vec4 texColor = texture(u_texture, v_texcoord) * u_colorMult;
+
+ float projectedAmount = inRange ? 1.0 : 0.0;
+ gl_FragColor = mix(texColor, projectedTexColor, projectedAmount);
+
Why didn't we do something like this?
if (inRange) {
- gl_FragColor = texture(u_projectedTexture, projectedTexcoord.xy);
+ gl_FragColor = texture(u_projectedTexture, projectedTexcoord.xy);
} else {
- gl_FragColor = texture(u_texture, v_texcoord) * u_colorMult;
+ gl_FragColor = texture(u_texture, v_texcoord) * u_colorMult;
}
From the GLSL ES 3.0 spec Section 8.8
@@ -982,20 +983,22 @@
Texture Lookup Functions
In other words, if we are going to use textures we must always access them. We can use the results
conditionally. For example we could have written this:
- vec4 projectedTexColor = texture(u_projectedTexture, projectedTexcoord.xy);
- vec4 texColor = texture(u_texture, v_texcoord) * u_colorMult;
-if (inRange) {
-gl_FragColor = projectedTexColor;
-} else {
-gl_FragColor = texColor;
-}
-
+ vec4 projectedTexColor = texture(u_projectedTexture, projectedTexcoord.xy);
+ vec4 texColor = texture(u_texture, v_texcoord) * u_colorMult;
+
+ if (inRange) {
+ gl_FragColor = projectedTexColor;
+ } else {
+ gl_FragColor = texColor;
+ }
+
or this
- vec4 projectedTexColor = texture(u_projectedTexture, projectedTexcoord.xy);
- vec4 texColor = texture(u_texture, v_texcoord) * u_colorMult;
-gl_FragColor = inRange ? projectedTexColor : texColor;
-
+ vec4 projectedTexColor = texture(u_projectedTexture, projectedTexcoord.xy);
+ vec4 texColor = texture(u_texture, v_texcoord) * u_colorMult;
+
+ gl_FragColor = inRange ? projectedTexColor : texColor;
+
But we can't access the textures themselves conditionally. It might work on your GPU but it won't
work on all GPUs.
In any case it's important to know.
diff --git a/webgl/lessons/webgl1-to-webgl2.html b/webgl/lessons/webgl1-to-webgl2.html
index ee769b4c..8375d272 100644
--- a/webgl/lessons/webgl1-to-webgl2.html
+++ b/webgl/lessons/webgl1-to-webgl2.html
@@ -576,48 +576,49 @@
Making WebGL1 extensions look like WebGL2
One workaround would be to copy WebGL1 extensions to the WebGL context at init time.
That way the rest of your code can stay the same. Example:
-const gl = someCanvas.getContext("webgl");
-const haveVAOs = getAndApplyExtension(gl, "OES_vertex_array_object");
-function getAndApplyExtension(gl, name) {
-const ext = gl.getExtension(name);
-if (!ext) {
-return null;
-}
-const fnSuffix = name.split("")[0];
-const enumSuffix = ' ’ + fnSuffix;
-for (const key in ext) {
-const value = ext[key];
-const isFunc = typeof (value) === ‘function’;
-const suffix = isFunc ? fnSuffix : enumSuffix;
-let name = key;
-// examples of where this is not true are WEBGL_compressed_texture_s3tc
-// and WEBGL_compressed_texture_pvrtc
-if (key.endsWith(suffix)) {
-name = key.substring(0, key.length - suffix.length);
-}
-if (gl[name] !== undefined) {
-if (!isFunc && gl[name] !== value) {
-console.warn(“conflict:”, name, gl[name], value, key);
-}
-} else {
-if (isFunc) {
-gl[name] = function(origFn) {
-return function() {
-return origFn.apply(ext, arguments);
-};
-}(value);
-} else {
-gl[name] = value;
-}
-}
-}
-return ext;
+const gl = someCanvas.getContext("webgl");
+const haveVAOs = getAndApplyExtension(gl, "OES_vertex_array_object");
+
+function getAndApplyExtension(gl, name) {
+ const ext = gl.getExtension(name);
+ if (!ext) {
+ return null;
+ }
+ const fnSuffix = name.split("_")[0];
+ const enumSuffix = '_' + fnSuffix;
+ for (const key in ext) {
+ const value = ext[key];
+ const isFunc = typeof (value) === 'function';
+ const suffix = isFunc ? fnSuffix : enumSuffix;
+ let name = key;
+ // examples of where this is not true are WEBGL_compressed_texture_s3tc
+ // and WEBGL_compressed_texture_pvrtc
+ if (key.endsWith(suffix)) {
+ name = key.substring(0, key.length - suffix.length);
+ }
+ if (gl[name] !== undefined) {
+ if (!isFunc && gl[name] !== value) {
+ console.warn("conflict:", name, gl[name], value, key);
+ }
+ } else {
+ if (isFunc) {
+ gl[name] = function(origFn) {
+ return function() {
+ return origFn.apply(ext, arguments);
+ };
+ }(value);
+ } else {
+ gl[name] = value;
+ }
+ }
+ }
+ return ext;
}
-
+
Now your code can mostly just work the same on both. Example:
if (haveVAOs) {
- var someVAO = gl.createVertexArray();
+ var someVAO = gl.createVertexArray();
...
} else {
... do whatever for no VAOs.
@@ -627,9 +628,9 @@ Making WebGL1 extensions look like WebGL2
if (haveVAOs) {
if (isWebGL2)
- someVAO = gl.createVertexArray();
+ someVAO = gl.createVertexArray();
} else {
- someVAO = vaoExt.createVertexArrayOES();
+ someVAO = vaoExt.createVertexArrayOES();
}
...
} else {
diff --git a/webgl/lessons/zh_cn/atom.xml b/webgl/lessons/zh_cn/atom.xml
index 5316de47..dc21e840 100644
--- a/webgl/lessons/zh_cn/atom.xml
+++ b/webgl/lessons/zh_cn/atom.xml
@@ -2,7 +2,7 @@
WebGL2 理论基础
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://github.com/jpmonette/feed
WebGL2Fundamentals Contributors
@@ -15,605 +15,605 @@
https://webgl2fundamentals.org/webgl/lessons/zh_cn/webgl-2-textures.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/zh_cn/webgl-2d-drawimage.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/zh_cn/webgl-2d-matrices.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/zh_cn/webgl-2d-matrix-stack.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/zh_cn/webgl-2d-rotation.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/zh_cn/webgl-2d-scale.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/zh_cn/webgl-2d-translation.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/zh_cn/webgl-3d-camera.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/zh_cn/webgl-3d-geometry-lathe.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/zh_cn/webgl-3d-lighting-directional.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/zh_cn/webgl-3d-lighting-point.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/zh_cn/webgl-3d-lighting-spot.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/zh_cn/webgl-3d-orthographic.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/zh_cn/webgl-3d-perspective-correct-texturemapping.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/zh_cn/webgl-3d-perspective.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/zh_cn/webgl-3d-textures.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/zh_cn/webgl-boilerplate.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/zh_cn/webgl-cors-permission.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/zh_cn/webgl-cube-maps.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/zh_cn/webgl-data-textures.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/zh_cn/webgl-drawing-multiple-things.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/zh_cn/webgl-environment-maps.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/zh_cn/webgl-fog.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/zh_cn/webgl-fundamentals.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/zh_cn/webgl-getting-webgl2.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/zh_cn/webgl-how-it-works.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/zh_cn/webgl-image-processing-continued.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/zh_cn/webgl-image-processing.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/zh_cn/webgl-indexed-vertices.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/zh_cn/webgl-instanced-drawing.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/zh_cn/webgl-less-code-more-fun.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/zh_cn/webgl-load-obj-w-mtl.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/zh_cn/webgl-load-obj.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/zh_cn/webgl-matrix-naming.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/zh_cn/webgl-picking.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/zh_cn/webgl-planar-projection-mapping.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/zh_cn/webgl-render-to-texture.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/zh_cn/webgl-resizing-the-canvas.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/zh_cn/webgl-scene-graph.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/zh_cn/webgl-setup-and-installation.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/zh_cn/webgl-shaders-and-glsl.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/zh_cn/webgl-shadows-continued.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/zh_cn/webgl-shadows.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/zh_cn/webgl-skinning.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/zh_cn/webgl-skybox.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/zh_cn/webgl-smallest-programs.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/zh_cn/webgl-sprites.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/zh_cn/webgl-state-diagram.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/zh_cn/webgl-text-canvas2d.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/zh_cn/webgl-text-glyphs.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/zh_cn/webgl-text-html.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/zh_cn/webgl-text-texture.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/zh_cn/webgl1-to-webgl2-fundamentals.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/zh_cn/webgl1-to-webgl2.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
https://webgl2fundamentals.org/webgl/lessons/zh_cn/webgl2-whats-new.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
WebGL2Fundamentals Contributors
https://webgl2fundamentals.org/contributors.html
- 2025-01-15T04:14:30.000Z
+ 2025-01-15T04:49:01.000Z
\ No newline at end of file
diff --git a/webgl/lessons/zh_cn/webgl-2d-drawimage.html b/webgl/lessons/zh_cn/webgl-2d-drawimage.html
index 0d1350dc..79e0e477 100644
--- a/webgl/lessons/zh_cn/webgl-2d-drawimage.html
+++ b/webgl/lessons/zh_cn/webgl-2d-drawimage.html
@@ -678,16 +678,18 @@ 一个小优化
#version 300 es
in vec4 a_position;
-in vec2 a_texcoord;
-uniform mat4 u_matrix;
-uniform mat4 u_textureMatrix;
-out vec2 v_texcoord;
-void main() {
-gl_Position = u_matrix * a_position;
-
-v_texcoord = (u_textureMatrix * a_position).xy;
+
+uniform mat4 u_matrix;
+uniform mat4 u_textureMatrix;
+
+out vec2 v_texcoord;
+
+void main() {
+gl_Position = u_matrix \* a_position;
+
+- v_texcoord = (u_textureMatrix \* a_position).xy;
}
-
-
+
现在移除关于纹理坐标设置的代码,得到的结果和之前是相同的。
diff --git a/webgl/lessons/zh_cn/webgl-3d-geometry-lathe.html b/webgl/lessons/zh_cn/webgl-3d-geometry-lathe.html
index 5c692e9c..0fc87cfb 100644
--- a/webgl/lessons/zh_cn/webgl-3d-geometry-lathe.html
+++ b/webgl/lessons/zh_cn/webgl-3d-geometry-lathe.html
@@ -922,22 +922,22 @@
这里的模运算符是做什么的?
起初我想通过提供一个误差范围,检查顶点的距离是否在范围内,如果小于误差范围就认为是同一点。
就像这样。
-const epsilon = 0.0001;
-const tempVerts = [];
+const epsilon = 0.0001;
+const tempVerts = [];
function getVertIndex(position) {
if (tempVerts.length) {
// 找到最近的点
- let closestNdx = 0;
- let closestDistSq = v2.distanceSq(position, tempVerts[0]);
- for (let i = 1; i < tempVerts.length; ++i) {
- let distSq = v2.distanceSq(position, tempVerts[i]);
- if (distSq < closestDistSq) {
- closestDistSq = distSq;
- closestNdx = i;
+ let closestNdx = 0;
+ let closestDistSq = v2.distanceSq(position, tempVerts[0]);
+ for (let i = 1; i < tempVerts.length; ++i) {
+ let distSq = v2.distanceSq(position, tempVerts[i]);
+ if (distSq < closestDistSq) {
+ closestDistSq = distSq;
+ closestNdx = i;
}
}
// 是否在误差范围内
- if (closestDistSq < epsilon) {
+ if (closestDistSq < epsilon) {
// 是就返回那个点
return closestNdx;
}
@@ -973,24 +973,24 @@ 这里的模运算符是做什么的?
使用矩阵运算是不是大材小用了?
当我们旋转点的时候使用这样的代码
-const mat = m4.yRotation(angle);
+const mat = m4.yRotation(angle);
...
-points.forEach((p, ndx) => {
- const tp = m4.transformPoint(mat, [...p, 0]);
+points.forEach((p, ndx) => {
+ const tp = m4.transformPoint(mat, [...p, 0]);
...
使用 4x4 矩阵转换一个任意三维点需要 16 次乘法,12 次加法,和 3 次除法。
我们可以只使用 单位圆形式的旋转运算 。
-const s = Math.sin(angle);
-const c = Math.cos(angle);
+const s = Math.sin(angle);
+const c = Math.cos(angle);
...
-points.forEach((p, ndx) => {
- const x = p[0];
- const y = p[1];
- const z = p[2];
- const tp = [
+points.forEach((p, ndx) => {
+ const x = p[0];
+ const y = p[1];
+ const z = p[2];
+ const tp = [
x * c - z * s,
y,
x * s + z * c,
diff --git a/webgl/lessons/zh_cn/webgl-3d-orthographic.html b/webgl/lessons/zh_cn/webgl-3d-orthographic.html
index becc5c59..94914917 100644
--- a/webgl/lessons/zh_cn/webgl-3d-orthographic.html
+++ b/webgl/lessons/zh_cn/webgl-3d-orthographic.html
@@ -748,24 +748,26 @@ 为什么属性类型是 vec4 但是 gl.vertexAttribPointer 的大小是 3
两个都是 'vec4' 类型,当我们告诉WebGL如何从缓冲中获取数据时使用
// 告诉属性怎么从 positionBuffer (ARRAY_BUFFER) 中读取位置
-var size = 3; // 每次迭代使用 3 个单位的数据
-var type = gl.FLOAT; // 单位数据类型是32位的浮点型
-var normalize = false; // 不需要归一化数据
-var stride = 0; // 0 = 移动距离 * 单位距离长度sizeof(type)
+var size = 3; // 每次迭代使用 3 个单位的数据
+var type = gl.FLOAT; // 单位数据类型是32位的浮点型
+var normalize = false; // 不需要归一化数据
+var stride = 0; // 0 = 移动距离 * 单位距离长度sizeof(type)
// 每次迭代跳多少距离到下一个数据
-var offset = 0; // 从绑定缓冲的起始处开始
+var offset = 0; // 从绑定缓冲的起始处开始
gl.vertexAttribPointer(
positionAttributeLocation, size, type, normalize, stride, offset);
-…
+
+...
// 告诉颜色属性怎么从 colorBuffer (ARRAY_BUFFER) 中读取颜色值
-var size = 3; // 每次迭代使用 3 个单位的数据
-var type = gl.UNSIGNED_BYTE; // 单位数据类型是无符号 8 位整数
-var normalize = true; // 标准化数据 (从 0-255 转换到 0.0-1.0)
-var stride = 0; // 0 = 移动距离 * 单位距离长度 sizeof(type)
+var size = 3; // 每次迭代使用 3 个单位的数据
+var type = gl.UNSIGNED_BYTE; // 单位数据类型是无符号 8 位整数
+var normalize = true; // 标准化数据 (从 0-255 转换到 0.0-1.0)
+var stride = 0; // 0 = 移动距离 \* 单位距离长度 sizeof(type)
// 每次迭代跳多少距离到下一个数据
-var offset = 0; // 从绑定缓冲的起始处开始
+var offset = 0; // 从绑定缓冲的起始处开始
gl.vertexAttribPointer(
-colorAttributeLocation, size, type, normalize, stride, offset);
+colorAttributeLocation, size, type, normalize, stride, offset);
+
这里的 '3' 表示的时每次迭代从缓冲中提取三个值给顶点着色器中的属性。
diff --git a/webgl/lessons/zh_cn/webgl-how-it-works.html b/webgl/lessons/zh_cn/webgl-how-it-works.html
index 10dd3c63..f7783e0a 100644
--- a/webgl/lessons/zh_cn/webgl-how-it-works.html
+++ b/webgl/lessons/zh_cn/webgl-how-it-works.html
@@ -517,11 +517,11 @@
WebGL2 是如何工作的
让我们更改代码以执行此操作。 当我们告诉WebGL如何提取颜色时,我们将使用如下代码:
- var size = 4;
-* var type = gl.UNSIGNED_BYTE;
-* var normalize = true;
- var stride = 0;
- var offset = 0;
+ var size = 4;
+* var type = gl.UNSIGNED_BYTE;
+* var normalize = true;
+ var stride = 0;
+ var offset = 0;
gl.vertexAttribPointer(colorLocation, size, type, normalize, stride, offset);
当我们用颜色填充缓冲区时,我们将使用如下代码:
@@ -530,13 +530,14 @@ WebGL2 是如何工作的
// that make the rectangle.
function setColors(gl) {
// Pick 2 random colors.
- var r1 = Math.random() * 256; // 0 to 255.99999
- var b1 = Math.random() * 256; // these values
- var g1 = Math.random() * 256; // will be truncated
- var r2 = Math.random() * 256; // when stored in the
- var b2 = Math.random() * 256; // Uint8Array
- var g2 = Math.random() * 256;
-gl.bufferData(
+ var r1 = Math.random() * 256; // 0 to 255.99999
+ var b1 = Math.random() * 256; // these values
+ var g1 = Math.random() * 256; // will be truncated
+ var r2 = Math.random() * 256; // when stored in the
+ var b2 = Math.random() * 256; // Uint8Array
+ var g2 = Math.random() * 256;
+
+gl.bufferData(
gl.ARRAY_BUFFER,
new Uint8Array( // Uint8Array
[ r1, b1, g1, 255,
@@ -546,7 +547,8 @@
WebGL2 是如何工作的
r2, b2, g2, 255,
r2, b2, g2, 255]),
gl.STATIC_DRAW);
-}
+}
+
下面是实例演示:
diff --git a/webgl/lessons/zh_cn/webgl-less-code-more-fun.html b/webgl/lessons/zh_cn/webgl-less-code-more-fun.html
index 0e36140f..382571b1 100644
--- a/webgl/lessons/zh_cn/webgl-less-code-more-fun.html
+++ b/webgl/lessons/zh_cn/webgl-less-code-more-fun.html
@@ -642,49 +642,55 @@
我们能直接使用 setter 么?
// 初始化时
-var uniformSetters = twgl.createUniformSetters(program);
-// 绘制时
-uniformSetters.u_ambient([1, 0, 0, 1]); // 设置环境光为红色
+var uniformSetters = twgl.createUniformSetters(program);
+
+// 绘制时
+uniformSetters.u_ambient([1, 0, 0, 1]); // 设置环境光为红色
+
这样做不好的原因就是,在使用GLSL的过程中经常会修改,调试。假设屏幕上什么都没有出现,首先我会简化着色器,例如我会尽可能简化片断着色器。
#version 300 es
precision highp float;
-in vec4 v_position;
+
+in vec4 v_position;
in vec2 v_texCoord;
in vec3 v_normal;
in vec3 v_surfaceToLight;
-in vec3 v_surfaceToView;
-uniform vec4 u_lightColor;
+in vec3 v_surfaceToView;
+
+uniform vec4 u_lightColor;
uniform vec4 u_ambient;
uniform sampler2D u_diffuse;
uniform vec4 u_specular;
uniform float u_shininess;
-uniform float u_specularFactor;
-out vec4 outColor;
-vec4 lit(float l ,float h, float m) {
+uniform float u_specularFactor;
+
+out vec4 outColor;
+
+vec4 lit(float l ,float h, float m) {
return vec4(1.0,
max(l, 0.0),
(l > 0.0) ? pow(max(0.0, h), m) : 0.0,
1.0);
-}
-void main() {
-vec4 diffuseColor = texture2D(udiffuse, v_texCoord);
-vec3 a_normal = normalize(v_normal);
-vec3 surfaceToLight = normalize(v_surfaceToLight);
-vec3 surfaceToView = normalize(v_surfaceToView);
-vec3 halfVector = normalize(surfaceToLight + surfaceToView);
-vec4 litR = lit(dot(a_normal, surfaceToLight),
+}
+
+void main() {
+vec4 diffuseColor = texture2D(u*diffuse, v_texCoord);
+vec3 a_normal = normalize(v_normal);
+vec3 surfaceToLight = normalize(v_surfaceToLight);
+vec3 surfaceToView = normalize(v_surfaceToView);
+vec3 halfVector = normalize(surfaceToLight + surfaceToView);
+vec4 litR = lit(dot(a_normal, surfaceToLight),
dot(a_normal, halfVector), u_shininess);
-vec4 outColor = vec4((
-u_lightColor * (diffuseColor _ litR.y + diffuseColor _ u ambient +
-u_specular * litR.z * u_specularFactor)).rgb,
-diffuseColor.a);
-
-outColor = vec4(0,1,0,1); // <!— just green
+vec4 outColor = vec4((
+u_lightColor * (diffuseColor _ litR.y + diffuseColor _ u*ambient +
+u_specular * litR.z \* u_specularFactor)).rgb,
+diffuseColor.a);
+
+- outColor = vec4(0,1,0,1); // <!--- just green
}
-
-
+
注意到我添加了一行,直接将 outColor
设置为固定颜色。
大多数驱动会发现之前的行没有为结果做贡献,优化后就会把没用的变量移除,
下次我运行程序调用 twgl.createUniformSetters
就不会为u_ambient
创建 setter,所以 uniformSetters.u_ambient()
就会报错。
diff --git a/webgl/lessons/zh_cn/webgl-load-obj-w-mtl.html b/webgl/lessons/zh_cn/webgl-load-obj-w-mtl.html
index c1b1c5c2..c03651f7 100644
--- a/webgl/lessons/zh_cn/webgl-load-obj-w-mtl.html
+++ b/webgl/lessons/zh_cn/webgl-load-obj-w-mtl.html
@@ -997,13 +997,14 @@
尽可能避免在着色器中使用条件语句
uniform bool hasDiffuseMap;
uniform vec4 diffuse;
uniform sampler2D diffuseMap
-
…
-vec4 effectiveDiffuse = diffuse;
+
+...
+vec4 effectiveDiffuse = diffuse;
if (hasDiffuseMap) {
-effectiveDiffuse *= texture2D(diffuseMap, texcoord);
+effectiveDiffuse \*= texture2D(diffuseMap, texcoord);
}
-…
-
+...
+
这样的条件语句一般是不鼓励的,因为依赖于 GPU 或者驱动,它们没有很好的性能。
当没有纹理时我们用一个 1x1 像素的白点纹理,这样就不用考虑条件语句了。
或者,使用不同的着色器。一个带有该特性,一个没有,根据情况选择使用正确的着色器。
diff --git a/webgl/lessons/zh_cn/webgl-planar-projection-mapping.html b/webgl/lessons/zh_cn/webgl-planar-projection-mapping.html
index 184160a4..9fb31af1 100644
--- a/webgl/lessons/zh_cn/webgl-planar-projection-mapping.html
+++ b/webgl/lessons/zh_cn/webgl-planar-projection-mapping.html
@@ -945,20 +945,22 @@
Texture Lookup Functions
换句话说,如果我们要使用纹理,那我们就必须确保总是能够访问到它们。
我们可以在条件语句内使用访问纹理的结果。例如我们可以写成这样:
- vec4 projectedTexColor = texture(u_projectedTexture, projectedTexcoord.xy);
- vec4 texColor = texture(u_texture, v_texcoord) * u_colorMult;
-if (inRange) {
-gl_FragColor = projectedTexColor;
+ vec4 projectedTexColor = texture(u_projectedTexture, projectedTexcoord.xy);
+ vec4 texColor = texture(u_texture, v_texcoord) * u_colorMult;
+
+if (inRange) {
+ gl_FragColor = projectedTexColor;
} else {
-gl_FragColor = texColor;
+ gl_FragColor = texColor;
}
-
+
或者这样
- vec4 projectedTexColor = texture(u_projectedTexture, projectedTexcoord.xy);
- vec4 texColor = texture(u_texture, v_texcoord) * u_colorMult;
-gl_FragColor = inRange ? projectedTexColor : texColor;
-
+ vec4 projectedTexColor = texture(u_projectedTexture, projectedTexcoord.xy);
+ vec4 texColor = texture(u_texture, v_texcoord) * u_colorMult;
+
+gl_FragColor = inRange ? projectedTexColor : texColor;
+
但是我们不能在条件语句内访问纹理本身。这样做在你的 GPU 上可能是可行的,
但并不是在所有的 GPUs 上都能行。
无论如何,重要的是你要知道有这么个东西
diff --git a/webgl/lessons/zh_cn/webgl1-to-webgl2.html b/webgl/lessons/zh_cn/webgl1-to-webgl2.html
index 2ecc1655..6d1c3d8e 100644
--- a/webgl/lessons/zh_cn/webgl1-to-webgl2.html
+++ b/webgl/lessons/zh_cn/webgl1-to-webgl2.html
@@ -487,48 +487,49 @@
让WebGL1扩展看起来像WebGL2
如你所见,如果你希望代码在WebGL1和WebGL2中都能运行,这会带来一些挑战。
一种解决方法是在初始时将WebGL1扩展复制到WebGL上下文。这种方法余下的代码可以保持不变。示例:
-const gl = someCanvas.getContext("webgl");
-const haveVAOs = getAndApplyExtension(gl, "OES_vertex_array_object");
-function getAndApplyExtension(gl, name) {
-const ext = gl.getExtension(name);
-if (!ext) {
-return null;
-}
-const fnSuffix = name.split("")[0];
-const enumSuffix = ' ’ + fnSuffix;
-for (const key in ext) {
-const value = ext[key];
-const isFunc = typeof (value) === ‘function’;
-const suffix = isFunc ? fnSuffix : enumSuffix;
-let name = key;
-// WEBGL_compressed_texture_s3tc
-// 和WEBGL_compressed_texture_pvrtc不是true
-if (key.endsWith(suffix)) {
-name = key.substring(0, key.length - suffix.length);
-}
-if (gl[name] !== undefined) {
-if (!isFunc && gl[name] !== value) {
-console.warn(“conflict:”, name, gl[name], value, key);
-}
-} else {
-if (isFunc) {
-gl[name] = function(origFn) {
-return function() {
-return origFn.apply(ext, arguments);
-};
-}(value);
-} else {
-gl[name] = value;
-}
-}
-}
-return ext;
+const gl = someCanvas.getContext("webgl");
+const haveVAOs = getAndApplyExtension(gl, "OES_vertex_array_object");
+
+function getAndApplyExtension(gl, name) {
+ const ext = gl.getExtension(name);
+ if (!ext) {
+ return null;
+ }
+ const fnSuffix = name.split("_")[0];
+ const enumSuffix = '_' + fnSuffix;
+ for (const key in ext) {
+ const value = ext[key];
+ const isFunc = typeof (value) === 'function';
+ const suffix = isFunc ? fnSuffix : enumSuffix;
+ let name = key;
+ // WEBGL_compressed_texture_s3tc
+ // 和WEBGL_compressed_texture_pvrtc不是true
+ if (key.endsWith(suffix)) {
+ name = key.substring(0, key.length - suffix.length);
+ }
+ if (gl[name] !== undefined) {
+ if (!isFunc && gl[name] !== value) {
+ console.warn("conflict:", name, gl[name], value, key);
+ }
+ } else {
+ if (isFunc) {
+ gl[name] = function(origFn) {
+ return function() {
+ return origFn.apply(ext, arguments);
+ };
+ }(value);
+ } else {
+ gl[name] = value;
+ }
+ }
+ }
+ return ext;
}
-
+
现在你的代码大部分可以同样工作,像这样
if (haveVAOs) {
- var someVAO = gl.createVertexArray();
+ var someVAO = gl.createVertexArray();
...
} else {
... do whatever for no VAOs.
@@ -538,9 +539,9 @@ 让WebGL1扩展看起来像WebGL2
if (haveVAOs) {
if (isWebGL2)
- someVAO = gl.createVertexArray();
+ someVAO = gl.createVertexArray();
} else {
- someVAO = vaoExt.createVertexArrayOES();
+ someVAO = vaoExt.createVertexArrayOES();
}
...
} else {