Fivos Doganis | Presentation licensed under CC BY-SA 4.0 | 2025

3D Web Programming

Fivos DOGANIS

Fivos Doganis | Presentation licensed under CC BY-SA 4.0 | 2025

whoami

linkedin.com/in/fivosdoganis
📧 fivos.doganis@gmail.com
github.com/fdoganis

Fivos Doganis | Presentation licensed under CC BY-SA 4.0 | 2025

University of Hull

  • Master of Science by Research (2001)
    Augmented Reality in Archaeology: Registration Issues
Fivos Doganis | Presentation licensed under CC BY-SA 4.0 | 2025

IRCAD (2002 - 2003)

  • Institut de Recherche contre les Cancers de l'Appareil Digestif
  • Startup
    • Virtual-Surg team
  • Augmented Reality Research Engineer
Fivos Doganis | Presentation licensed under CC BY-SA 4.0 | 2025

Dassault Systèmes (2003+)

  • 3D Visualization Engineer
    • Scenegraph, Materials
    • Geometry, Tessellation
  • Virtual and Augmented Reality (XR) Engineer
  • XR Research Engineer
  • XR Research Manager
Fivos Doganis | Presentation licensed under CC BY-SA 4.0 | 2025

Dassault Systèmes

From Shape to Life

Fivos Doganis | Presentation licensed under CC BY-SA 4.0 | 2025
Fivos Doganis | Presentation licensed under CC BY-SA 4.0 | 2025
Fivos Doganis | Presentation licensed under CC BY-SA 4.0 | 2025
Fivos Doganis | Presentation licensed under CC BY-SA 4.0 | 2025
Fivos Doganis | Presentation licensed under CC BY-SA 4.0 | 2025
Fivos Doganis | Presentation licensed under CC BY-SA 4.0 | 2025
Fivos Doganis | Presentation licensed under CC BY-SA 4.0 | 2025

Course audience

  • Computer Science students learning Computer Graphics, Physics or Machine Learning 🧑‍🎓
    • and who are afraid to ask "what's a GPU?", "what's a shader?"
  • Web designers wishing to add 3D graphics to their sites 🎨
  • Game developers wishing to conquer the Web 👩‍💻
  • Anyone looking for a simple introduction to 3D
    • and who has no clue where to start 🧐

➡️ Feel free to skim through technical sections and use this course as future reference

Fivos Doganis | Presentation licensed under CC BY-SA 4.0 | 2025

Course prerequisites

We'll start from scratch but these should help:

  • Math 🔢
  • Programming 💻
    • JavaScript notions, or any similar language (HTML kept minimal)
  • 3D API 🧊
  • 3D Software (Blender, Unity, Unreal Engine, Godot Engine)
  • Desktop / Laptop + VSCode
Fivos Doganis | Presentation licensed under CC BY-SA 4.0 | 2025

Course contents

  • Demo 🕹️
    • Existing 3D Web Apps
  • Theory 📖
    • A brief history of 3D on the Web
    • Concepts: Architecture, Pipeline, APIs
  • Practice 💻
    • 3D Web Programming
      • WebGL, THREE.js
      • Other APIs
Fivos Doganis | Presentation licensed under CC BY-SA 4.0 | 2025

📅 Planning

  • Day 1 (6 hours)

    • 📖 Theory
    • 💻 WebGL exercises
    • 🍜 Lunch
    • 🎮 THREE.js Theory + full exercise
    • ⚗️ Explore examples + choose a personal project
  • Day 2 (6 hours)

    • 🖊️ Evaluation: Quizz 20 questions / ~20 min ➡️ 20 points max
    • ⭐ Personal project / game jam ➡️ +5 bonus points!
Fivos Doganis | Presentation licensed under CC BY-SA 4.0 | 2025

Project evaluation

  • ⭐ Project can be finished at home 🏠
  • 👤 1 person per project
  • send git repo link by mail (invite if private) with:
    • README
    • LICENSE
    • illustration (image / GIF / mp4)
    • link for live testing
    • source code
Fivos Doganis | Presentation licensed under CC BY-SA 4.0 | 2025

Project evaluation criteria

  • originality 👀
  • interactions 👋
  • physics 💥 / animations 🏃 / sounds 🎶 / eye-candy 🎆
  • GIS 🌍
  • code quality ✨, tricks 😏, performance ⏱️
  • fun 🎉
Fivos Doganis | Presentation licensed under CC BY-SA 4.0 | 2025

Project grading

  • up to 5 bonus points
  • choose features from previous slide
  • for each implemented feature:
    • not done: 0 pt 🥱 💤
    • nice try / buggy: 0.5 pt 🤨 🐛
    • basic / good enough: 1 pt 😐
    • great / polished: 1.5 pts 🙂
    • impressive: 2 pts 🤠 ⭐
Fivos Doganis | Presentation licensed under CC BY-SA 4.0 | 2025

3D Web Apps

  • Games
  • e-Commerce
  • 3D content creation
  • 3D data exploration
  • Interactive art
Fivos Doganis | Presentation licensed under CC BY-SA 4.0 | 2025

Minecraft Classic

Fivos Doganis | Presentation licensed under CC BY-SA 4.0 | 2025

Aviator

Aviator 2

Fivos Doganis | Presentation licensed under CC BY-SA 4.0 | 2025

Heraclos, (Gobelins)

Fivos Doganis | Presentation licensed under CC BY-SA 4.0 | 2025

Blob Opera (Google)

Fivos Doganis | Presentation licensed under CC BY-SA 4.0 | 2025

Apple iPhone Studio

Fivos Doganis | Presentation licensed under CC BY-SA 4.0 | 2025

BMW

Fivos Doganis | Presentation licensed under CC BY-SA 4.0 | 2025

OUIGO

Fivos Doganis | Presentation licensed under CC BY-SA 4.0 | 2025

SculptGL

Fivos Doganis | Presentation licensed under CC BY-SA 4.0 | 2025

3D Sculptor (Dassault Systèmes)

Fivos Doganis | Presentation licensed under CC BY-SA 4.0 | 2025

OnShape (PTC)

Fivos Doganis | Presentation licensed under CC BY-SA 4.0 | 2025

SketchFab (Epic)

Fivos Doganis | Presentation licensed under CC BY-SA 4.0 | 2025

Zygote Body

Fivos Doganis | Presentation licensed under CC BY-SA 4.0 | 2025

Z-Anatomy

Fivos Doganis | Presentation licensed under CC BY-SA 4.0 | 2025

NASA

Fivos Doganis | Presentation licensed under CC BY-SA 4.0 | 2025

iTowns (IGN)

Fivos Doganis | Presentation licensed under CC BY-SA 4.0 | 2025

The Cursed Library

Fivos Doganis | Presentation licensed under CC BY-SA 4.0 | 2025

History

The past, present and future of Web 3D

Fivos Doganis | Presentation licensed under CC BY-SA 4.0 | 2025

"Dis Papy, c'était comment la 3D avant?"

Fivos Doganis | Presentation licensed under CC BY-SA 4.0 | 2025

Prehistory (1983 - 1993)

  • Silicon Graphics (SGI) hardware only
    • IRIX OS
  • IRIS GL (1983)
    • API close to hardware
  • IRIS Inventor (1988)
  • OpenGL 1.0 (1993)
    • Open API, Multi-OS
Fivos Doganis | Presentation licensed under CC BY-SA 4.0 | 2025

Fixed Pipeline (1993 - 2004)

  • 3dfx Glide API (1996)
    • Voodoo: "hardware 3D acceleration" for all
  • Microsoft Direct X API (1997)
    • Windows-only ☹️
  • OpenGL ES (2004)
  • OpenGL 2.0 (2004)
  • Foundation of nVIDIA (1993)

  • NV1 in SEGA Saturn (1994)

  • GeForce 256 (1999)

    • democratizes the GPU: Graphics Processing Unit, Transform & Ligthing
  • GeForce 3 (2001): NV2A in Microsoft's Xbox, programmable shading

Fivos Doganis | Presentation licensed under CC BY-SA 4.0 | 2025

Other players

  • SGI + Nintendo: Project Reality / N64 (1996)
    • SGI ends in 2006 💀

  • Imagination Technologies (PowerVR GPU) + Sega: Dreamcast (1998)

  • Intel i740 (1998) : OS in 3D

  • ATI (AMD) + Nintendo: Gamecube (2001)

Fivos Doganis | Presentation licensed under CC BY-SA 4.0 | 2025

Shaders, Mobile, Web (2004+)

  • OpenGL ES 2.0 (2007)
    • Mobile subset with shaders
  • Canvas 3D (2007), WebGL ancestor
  • WebGL 1.0 (2011) ⭐ 🎉
    • OpenGL ES 2.0 functionality for the Web!
  • OpenGL ES 3.0 (2012), 3.1 (2014): not for Apple 😢
  • WebGL 2.0 (2017)
    • OpenGL ES 3.0 exposed to the Web
Fivos Doganis | Presentation licensed under CC BY-SA 4.0 | 2025

Before WebGL, you couldn’t really do 3D on the web at all.
There was powerful 3D hardware everywhere on both desktops and mobile phones, but the web couldn’t tap into any of it.
There were some plugins, but users had to do an extra installation step that was a huge obstacle to adoption.
All the browser vendors knew that this was a challenge that needed to be resolved, which is why we came together as a Khronos Working Group.

Vladimir Vukićević (WebGL creator, WebVR guru)

Fivos Doganis | Presentation licensed under CC BY-SA 4.0 | 2025
Fivos Doganis | Presentation licensed under CC BY-SA 4.0 | 2025

WebGL architecture: software stack

  • Code: HTML + CSS + JS
    • JS code inside the web page makes WebGL API calls
  • Browser:
    • browser interprets JS code (using JS Engine)
    • turns WebGL calls into OpenGL calls (binding)
  • OS + Driver: converts OpenGL calls to
    • DirectX calls on Windows, Metal on Apple (using ANGLE)
    • OpenGL or OpenGL ES calls on other OSes
  • CPU + GPU: run the hardware accelerated code!
Fivos Doganis | Presentation licensed under CC BY-SA 4.0 | 2025

Binding example: from JS to C++

gl.drawElements(primitiveType, count, indexType, offset);
JSValue JSCanvasRenderingContext3D::glDrawElements(JSC::ExecState* exec, JSC::ArgList const& args)
{
    unsigned mode = args.at(0).toInt32(exec);
    unsigned type = args.at(1).toInt32(exec);
    
    unsigned int count = 0;
    
    // If the third param is not an object, it is a number, which is the count.
    // In this case if there is a 4th param, it is the offset. If there is no
    // 4th param, the offset is 0
    if (!args.at(2).isObject()) {
        count = args.at(2).toInt32(exec);
        unsigned int offset = (args.size() > 3) ? args.at(3).toInt32(exec) : 0;
        impl()->glDrawElements(mode, count, type, (void*) offset);
    } else {
Fivos Doganis | Presentation licensed under CC BY-SA 4.0 | 2025

Impact of stack on performance

  • Interpreted JS code is ~10x slower than native code
    • unless you use WebAssembly ("only" 2x slower than native)
  • On mobile devices, native code is ~10x slower than on desktop
  • Performance tips
    • reduce processing in JS code, let the shaders do the hard work
    • once shaders are compiled and rendering data is on the GPU, the code runs at near native speeds
    • GPU memory is limited: use Draco geometry compression, and Basis GPU texture compression
Fivos Doganis | Presentation licensed under CC BY-SA 4.0 | 2025

Evolution

Fivos Doganis | Presentation licensed under CC BY-SA 4.0 | 2025

The end of an API?

Fivos Doganis | Presentation licensed under CC BY-SA 4.0 | 2025
Fivos Doganis | Presentation licensed under CC BY-SA 4.0 | 2025

Evolution issues

  • New hardware, new needs since 1993
    • mobiles, wearables 📱 ⌚ 🕶️
    • embedded systems, AI, Vision 🚗 🚀
  • API has become more and more complex
    • coding fast and bug-free drivers is hard
    • OpenGL extensions are not universal
    • API subset needed to deprecate old and slow APIs
  • ➡️ New API needed, and it should be
    • low-level, universal, fast and abstract
Fivos Doganis | Presentation licensed under CC BY-SA 4.0 | 2025

But do we really need a new API?

Fivos Doganis | Presentation licensed under CC BY-SA 4.0 | 2025
Fivos Doganis | Presentation licensed under CC BY-SA 4.0 | 2025
Fivos Doganis | Presentation licensed under CC BY-SA 4.0 | 2025

API Fragmentation 💥

  • Proprietary API proliferation ➡️ no portability 😦
    • close to the GPU ➡️ fast
    • new ➡️ "clean"
  • Direct X 12 (Microsoft) : Windows, Xbox
  • Mantle (AMD) transferred to Khronos to become Vulkan
    • new open low-level standard ⭐
  • Metal (Apple)
    • looks like Vulkan, Metal was created first
Fivos Doganis | Presentation licensed under CC BY-SA 4.0 | 2025
Fivos Doganis | Presentation licensed under CC BY-SA 4.0 | 2025

Can we reunite all these new APIs?

Which common subset to use?

Fivos Doganis | Presentation licensed under CC BY-SA 4.0 | 2025
Fivos Doganis | Presentation licensed under CC BY-SA 4.0 | 2025

WebGL Next == WebGPU ?

  • Apple's "WebMetal", API similar to Metal
  • API partially reused and renamed WebGPU
    • temporary name, API still being defined
    • both low-level and object-oriented (no global state!)
    • fast
    • subset for web AND native, despite the "web" in the name
      • a bit like "Vulkan ES" / "Metal ES"
  • Might replace WebCL (Compute Shaders), abandoned 😢
  • Compatible with WebAssembly
Fivos Doganis | Presentation licensed under CC BY-SA 4.0 | 2025
Fivos Doganis | Presentation licensed under CC BY-SA 4.0 | 2025

All this is so confusing, which API should I actually use ⁉️

Well...

Fivos Doganis | Presentation licensed under CC BY-SA 4.0 | 2025

We hope for universal availability of WebGL 2.0 soon. If you need to ship your product today, WebGL 2.0 is the way to go. WebGL will be supported indefinitely. You do not need to worry about it going away.

WebGPU's timeline is discussed in the answer to the previous question. WebXR and WebAR are already working on WebGPU integration.

Khronos WebGL meetup, November 18, 2020

Fivos Doganis | Presentation licensed under CC BY-SA 4.0 | 2025

WebGL 2.0 can now be considered universally available across browsers, operating systems and devices.
As an application author, you can target WebGL 2.0 with confidence.
We encourage you to migrate to WebGL 2.0
It's no longer necessary to maintain a WebGL 1.0 fallback path unless you need to reach absolutely every device.
In particular, older Windows machines and Android devices.

WebGPU standardization continues; conformance testing in high gear
Aiming to reach 1.0 in 2022 Q2 (spec and conformance tests).

Khronos WebGL + WebGPU meetup, January 25, 2022

https://caniuse.com/webgl
Fivos Doganis | Presentation licensed under CC BY-SA 4.0 | 2025

WebGL 1.0 ✅

➡️ available everywhere! 🎉

https://caniuse.com/webgl2 [november 2022]
Fivos Doganis | Presentation licensed under CC BY-SA 4.0 | 2025

WebGL 2.0 ⚠️

➡️ official, you can start coding with it! (check availability)

  • retrocompatibility: WebGL 1.0 works in a WebGL 2.0 context
  • WebGL 1.0 polyfill to support a subset of WebGL 2.0 (⚠️ shaders)
  • you should learn WebGL 1 to understand existing code.
Fivos Doganis | Presentation licensed under CC BY-SA 4.0 | 2025

WebGL 2.0 on iOS

➡️ Test WebGL 2 support here:

Fivos Doganis | Presentation licensed under CC BY-SA 4.0 | 2025

WebGL 2.0 : standardized extensions

    Depth Textures (WEBGL_depth_texture)
    Floating Point Textures (OES_texture_float/OES_texture_float_linear)
    Half Floating Point Textures (OES_texture_half_float/OES_texture_half_float_linear)
    Vertex Array Objects (OES_vertex_array_object)
    Standard Derivatives (OES_standard_derivatives)
    Instanced Drawing (ANGLE_instanced_arrays)
    UNSIGNED_INT indices (OES_element_index_uint)
    Setting gl_FragDepth (EXT_frag_depth)
    Blend Equation MIN/MAX (EXT_blend_minmax)
    Direct texture LOD access (EXT_shader_texture_lod)
    Multiple Draw Buffers (WEBGL_draw_buffers)
    Texture access in vertex shaders

➡️ when WebGL 2.0 is not supported, we can get close to it using WebGL 1.0 + these extensions!

Fivos Doganis | Presentation licensed under CC BY-SA 4.0 | 2025

WebGL 1.0.1 ✅

WebGL 1.0.1 == WebL 1.0 + omnipresent extensions

ANGLE_instanced_arrays
EXT_blend_minmax
OES_element_index_uint
OES_standard_derivatives
OES_vertex_array_object // use it!
WEBGL_debug_renderer_info
WEBGL_lose_context

➡️ always available, use them!

Fivos Doganis | Presentation licensed under CC BY-SA 4.0 | 2025

WebGL 1.0.2 ✅

WebGL 1.0.2 == WebL 1.0.1 + omnipresent extensions (since 2021)

EXT_texture_filter_anisotropic
OES_texture_float
OES_texture_float_linear
OES_texture_half_float
OES_texture_half_float_linear
WEBGL_depth_texture 

➡️ always available, use them!

Fivos Doganis | Presentation licensed under CC BY-SA 4.0 | 2025

WebGL 1.0.3 ⚠️

WebGL 1.0.3 == WebL 1.0.2 + omnipresent extensions (since 2022):

EXT_shader_texture_lod
EXT_sRGB
EXT_frag_depth
WEBGL_draw_buffers 

➡️ check availability before use

Fivos Doganis | Presentation licensed under CC BY-SA 4.0 | 2025

WebGL 2.0 extensions ⚠️

WebGL 2.0 omnipresent extensions since 2022:

EXT_texture_filter_anisotropic
OES_texture_float_linear
WEBGL_debug_renderer_info
WEBGL_lose_context 
EXT_color_buffer_float

➡️ check availability before use

Fivos Doganis | Presentation licensed under CC BY-SA 4.0 | 2025

⚠️ Available != no bugs

#WebGL2 is a rubbish job on #IOS14. On Ipad pro more than half of the conformance tests fail ( 153553 over 260803 - tested here: https://khronos.org/registry/webgl/sdk/tests/webgl-conformance-tests.html). For GPGPU I still use WebGL1 for IOS devices.

@xavierbourry, July 2020

Fivos Doganis | Presentation licensed under CC BY-SA 4.0 | 2025

WebGPU (reminders)

➡️ probably the future Web 3D API, keep an eye on it! 👀

Fivos Doganis | Presentation licensed under CC BY-SA 4.0 | 2025

Conclusion: which API should I use?

  • 1️⃣ Start with WebGL 1.0, many exampled (13-year-old API!)
    • to understand the concepts
      • state machine, pipeline, buffers, shaders
      • see OpenGL course!
    • and how WebGL interacts with a web page
      • see HTML / JavaScript / CSS course
  • 2️⃣ Check new features introduced in WebGL 2.0
  • 3️⃣ Use high-level APIs: THREE.js, Babylon, A-Frame etc.
    • for a smooth transition to WebGPU!
Fivos Doganis | Presentation licensed under CC BY-SA 4.0 | 2025

WebGL

Concepts

Fivos Doganis | Presentation licensed under CC BY-SA 4.0 | 2025

Concepts > Syntax

  • APIs evolve
  • GPUs change too
  • But all modern APIs and GPUs have a lot in common
  • Common, transposable concepts are more important than syntax and APIs

➡️ understand how GPUs work for maximum performance

➡️ transpose your knowledge easily to other APIs, OSes or architectures

Fivos Doganis | Presentation licensed under CC BY-SA 4.0 | 2025

CPU vs GPU

Reminders

There's a freaking supercomputer in your browser,
and nobody seems to have noticed!

Steve Sanderson

Fivos Doganis | Presentation licensed under CC BY-SA 4.0 | 2025
Fivos Doganis | Presentation licensed under CC BY-SA 4.0 | 2025

CPU

www.thebookofshaders.com
Fivos Doganis | Presentation licensed under CC BY-SA 4.0 | 2025

GPU

www.thebookofshaders.com
Fivos Doganis | Presentation licensed under CC BY-SA 4.0 | 2025

Goal

Send as much data as possible to the GPU, for fast processing

  • "upload" (CPU ➡️ GPU) is slow 🐢
    • group data into buffers before transfer
  • GPU processing is very fast
    • using shaders
      • working in parallel
      • simple instructions
      • compiled in native low-level GPU code
Fivos Doganis | Presentation licensed under CC BY-SA 4.0 | 2025
Fivos Doganis | Presentation licensed under CC BY-SA 4.0 | 2025

Constraints

  • Rendering is fast but "download" (CPU ⬅️ GPU) VERY slow 🐌
  • Buffers are not flexible for dynamic data
  • Arrays must be converted to textures (for GPGPU)
    • conversion takes time especially for dynamic data
    • possible loss of accuracy
  • Shaders are complex to write
    • pixels are isolated, processed in parallel, independently
    • instructions are limited
    • optimizing and debugging is not trivial!
Fivos Doganis | Presentation licensed under CC BY-SA 4.0 | 2025

CPU

Fivos Doganis | Presentation licensed under CC BY-SA 4.0 | 2025

OpenGL, is a state machine

Reminders

Fivos Doganis | Presentation licensed under CC BY-SA 4.0 | 2025
Fivos Doganis | Presentation licensed under CC BY-SA 4.0 | 2025

WebGL is a state machine too!

  • data preparation
    • format, type, buffers...
  • global state preparation
    • color, blending...
  • rendering
    • send to GPU for shader processing
Fivos Doganis | Presentation licensed under CC BY-SA 4.0 | 2025

OpenGL Pipeline

Reminders

Fivos Doganis | Presentation licensed under CC BY-SA 4.0 | 2025
Fivos Doganis | Presentation licensed under CC BY-SA 4.0 | 2025

Rasterization

Interactive illustration

WebGL Fundamentals

by
Gregg Tavares (@greggman)
Chrome WebGL implementor

Fivos Doganis | Presentation licensed under CC BY-SA 4.0 | 2025
Fivos Doganis | Presentation licensed under CC BY-SA 4.0 | 2025

Shaders are essential

They allow to unleash the power of the GPU

  • Shader code is fast
    • thousands of specialized cores inside a GPU!
    • once the data and the compiled code have been sent to the GPU, the performance is the same regardless of thelanguage or API
  • Rendering is flexible
    • the rendering pipeline was fixed, not programmable before 2001
    • "rendering" has been hijacked to perform fast parallel physics and machine learning computations on the GPU (GPGPU)
Fivos Doganis | Presentation licensed under CC BY-SA 4.0 | 2025

Shader programming steps

  • the application sends to the GPU:
    • buffers (vertices, normals, connectivity info...) and textures
    • shaders to compile and run
  • vertex shaders are called once per vertex ⭐
  • each primitive (point, line, triangle) is converted to fragments(rasterization)
  • pixel fragment shaders are called once per fragment ⭐
Fivos Doganis | Presentation licensed under CC BY-SA 4.0 | 2025

From the triangle to the pixel

Interactive illustration

Making WebGL Dance

by
Steven Wittens

Fivos Doganis | Presentation licensed under CC BY-SA 4.0 | 2025
Fivos Doganis | Presentation licensed under CC BY-SA 4.0 | 2025

GLSL: Shader Programming Language

  • variable types ⭐

    • uniform: input, sent by the app, constant in the shader code
    • attribute: input of the vertex shader, sent by the app: data of the vertex buffer, varies per vertex
    • varying: output of the vertex shader / input of the fragment shader
  • functions: C language dialect

  • GLSL for WebGL 1.0, cf page 3

  • GLSL pour WebGL 2.0: version OpenGL ES 3.0, cf page 8

Fivos Doganis | Presentation licensed under CC BY-SA 4.0 | 2025

WebGL

Let's code!

Fivos Doganis | Presentation licensed under CC BY-SA 4.0 | 2025

BREAK

30' ⌛

Fivos Doganis | Presentation licensed under CC BY-SA 4.0 | 2025

Appendices

Fivos Doganis | Presentation licensed under CC BY-SA 4.0 | 2025
  • WebGL History

https://web.eecs.umich.edu/~sugih/courses/eecs487/lectures/20-History+ES+WebGL.pdf

  • WebGL 2 Course

https://perso.univ-rennes1.fr/pierre.nerzic/IAI2/IMR2 - Synthèse d'images - CM2.pdf

  • Tools for analyzing, debugging, checking and dumping WebGL

https://github.com/greggman/webgl-helpers#webgl-gl-error-checkjs

https://github.com/orgs/marp-team/discussions/83

https://marpit.marp.app/directives?id=tweak-theme-style

960px preview

![bg](https://ipfs.io/ipfs/QmVv73K78yysLhq5r16ZBUVUQ6mnw8DKfNMrTGxjJs4788)

![bg](https://bafybeifdf6t2elc24tlxggq4r4h7vgyvrkevojokjzu4ekkrxxqrswfqrm.ipfs.infura-ipfs.io/)

![bg](https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/431d55c0-9712-4196-8dd6-85b14088a9f1/moments-of-happiness-lion.gif)

![bg](https://cdn.dribbble.com/users/2813/screenshots/2123957/media/984bf5be1f6853bac7a9b9f110e9cc9a.gif)

:bird: [@fdoganis](https://twitter.com/fdoganis)

<!-- _footer: cover art : "Chill the lion" by Karim Maaloul https://codepen.io/Yakudoo/details/YXxmYR/

<!-- _footer: image de couverture: https://versum.xyz/token/versum/4130

# ![height:110px](https://www.isep.fr/wp-content/themes/isep/img/logo_isep.svg)

![bg right](https://d3i71xaburhd42.cloudfront.net/2f341ad9dcd2a14822db65acd8862f05301b9e2e/3-Figure3-1.png)

![bg right](https://veronikasadventure.com/wp-content/uploads/2024/02/2_acropolis-3d-representations-audio-self-guided-tour-w-ar.jpg)

![bg right](https://d201n44z4ifond.cloudfront.net/wp-content/uploads/sites/6/2019/10/16165332/Screen-Shot-2019-10-15-at-12.56.22-PM.png)

![bg right](https://blogs.3ds.com/perspectives/wp-content/uploads/sites/22/image_o2.jpg)

![bg right](https://www.3ds.com/assets/invest/styles/profile/public/2021-11/virtual-twin-healthcare.jpg.webp?itok=RF1_IOmU)

![bg left:50%](https://events.3ds.com/sites/default/files/styles/playground_experience_medium/public/2019-03/immersive-collaboration-experience-tribe-2-experience-1_0.PNG)

![bg](https://media.wired.com/photos/59267509f3e2356fd80094d1/master/pass/Singapore_Bishan_windsim_HP.jpg)

![bg fit](https://mms.businesswire.com/media/20141112006720/en/441072/4/Dassault_Systemes_Living_Heart_1.jpg)

![bg 110%](http://www.cao.fr/images_cp/plein/6772.jpg)

ENSG

EPITA

# :date: Planning - **Session 1** (2 hours) - :book: **Theory** (25 min) - :computer: **WebGL exercises** (10 min) - :video_game: **THREE.js Theory** + full **exercise** (1h10) - :alembic: Explore examples + choose a personal **project** (15 min) - **Session 2** (4 hours) - :star: **Project kick-off** (must be finished at home :house:) - :busts_in_silhouette: 2 people per project: clear responsibilities (who does what) - ![height:32px](https://upload.wikimedia.org/wikipedia/commons/9/91/Octicons-mark-github.svg) send git repo link: source + live testing

ENSG

- domain specific : healthcare :health_worker: / GIS :earth_africa:

ENSG

EPITA

# Grading system - **20** points maximum - choose features from previous slide - for each implemented **feature**: - not done: **0 pt** :yawning_face: :zzz: - nice try / buggy: **1 pt** :raised_eyebrow: :bug: - basic / good enough: **2 pts** :neutral_face: - great / polished: **3 pts** :slightly_smiling_face: - impressive: **4 pts** :cowboy_hat_face: :star:

ENSG

source: https://web.eecs.umich.edu/~sugih/courses/eecs487/lectures/20-History+ES+WebGL.pdf

![bg right vertical fit](https://steemitimages.com/p/KWcVEiwEzuiBTRjkbQErt6ge69ftc1GVX4fCr3en9K5bs5hCcEWsc6RNrn4oJbz7d748cj3ToFWMzCn4gM)

WebGL stack

<!-- _backgroundColor: #00000d ![bg w:800](https://architosh.com/wp-content/uploads/2017/02/architosh_webGL.jpg) ![bg w:800](https://architosh.com/wp-content/uploads/2017/02/architosh_webGPU.jpg)

--- <!-- _backgroundColor: white <!-- ![bg fit](https://tech.metail.com/wp-content/uploads/2018/05/webgl01.png) <!-- ![bg fit](http://www.unilim.fr/pages_perso/guillaume.gilet/Enseignement/Cours/fig/PipelineGL4.png) ![bg fit](https://cs1230.graphics/labs/lab11/pipeline.png)