<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Feynman's Blog</title><link>https://blog.deltastudio.space/en/</link><description>Recent content on Feynman's Blog</description><generator>Hugo</generator><language>en-US</language><lastBuildDate>Sat, 03 Oct 2026 15:00:00 +0800</lastBuildDate><atom:link href="https://blog.deltastudio.space/en/index.xml" rel="self" type="application/rss+xml"/><item><title>Exploring HTML-in-Canvas: A New Web Frontier</title><link>https://blog.deltastudio.space/en/posts/html-in-canvas-exploration/</link><pubDate>Wed, 02 Sep 2026 10:00:00 +0800</pubDate><guid>https://blog.deltastudio.space/en/posts/html-in-canvas-exploration/</guid><description>&lt;blockquote class="blockquote-regular"&gt;&#10; &lt;p&gt;HTML-in-Canvas is a Web standard proposal incubated at WICG by the Chrome team — turning &lt;code&gt;&amp;lt;canvas&amp;gt;&lt;/code&gt; children from &amp;ldquo;invisible fallback content&amp;rdquo; into &amp;ldquo;layoutable, drawable, interactive offscreen HTML layers.&amp;rdquo; This means DOM becomes a first-class citizen of the GPU rendering pipeline for the first time.&lt;/p&gt;&#10;&#10;&lt;/blockquote&gt;&#10;&lt;p&gt;&lt;img src="https://blog.deltastudio.space/images/2026-09-02_html-in-canvas/beam-color-switch.gif" alt="HTML-in-Canvas lighting demo: adjusting the beam angle and cycling preset colors"&gt;&lt;/p&gt;&#10;&lt;h2 id="01-proposal-background"&gt;01 Proposal Background&lt;/h2&gt;&#10;&lt;h3 id="what-is-it"&gt;What is it?&lt;/h3&gt;&#10;&lt;p&gt;The core problem HTML-in-Canvas solves: &lt;strong&gt;render real HTML elements inside Canvas (2D or WebGL/WebGPU), and those elements are &amp;ldquo;alive&amp;rdquo; — typeable, interactive, accessible.&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>moeru.ai | Elastic Tag &amp; Dot Grid</title><link>https://blog.deltastudio.space/en/posts/moeru-elastic-tag-dot-grid/</link><pubDate>Sat, 01 Aug 2026 10:00:00 +0800</pubDate><guid>https://blog.deltastudio.space/en/posts/moeru-elastic-tag-dot-grid/</guid><description>&lt;blockquote class="blockquote-regular"&gt;&#10; &lt;p&gt;This article clones the two most immersive interactive modules from the &lt;a href="https://moeru.ai/"&gt;moeru.ai&lt;/a&gt; landing page: &lt;strong&gt;dot grid physics interaction&lt;/strong&gt; and &lt;strong&gt;3D tag Verlet elastic rope system&lt;/strong&gt;. It does not cover the variable font pressure animation or GitHub member avatar loading.&lt;/p&gt;&#10;&#10;&lt;/blockquote&gt;&#10;&lt;p&gt;&lt;img src="https://blog.deltastudio.space/images/2026-08-01_moeru-elastic-tag-dot-grid/cover.png" alt="moeru.ai site effect preview"&gt;&lt;/p&gt;&#10;&lt;h2 id="01-overall-architecture--tech-choices"&gt;01 Overall Architecture &amp;amp; Tech Choices&lt;/h2&gt;&#10;&lt;p&gt;The original site is a single-page immersive landing page whose core interactions consist of 4 modules. This article focuses on two of them:&lt;/p&gt;</description></item><item><title>11 | Light Fields, Color and Perception</title><link>https://blog.deltastudio.space/en/posts/games101-light-fields-and-color/</link><pubDate>Sat, 03 Oct 2026 15:00:00 +0800</pubDate><guid>https://blog.deltastudio.space/en/posts/games101-light-fields-and-color/</guid><description>&lt;ul&gt;&#10;&lt;li&gt;Instructor: Lingqi Yan | UCSB&lt;/li&gt;&#10;&lt;li&gt;Bilibili: &lt;a href="https://www.bilibili.com/video/BV1X7411F744"&gt;https://www.bilibili.com/video/BV1X7411F744&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;Lectures covered: &lt;a href="https://sites.cs.ucsb.edu/~lingqi/teaching/resources/GAMES101_Lecture_20.pdf"&gt;Lecture 20&lt;/a&gt; (Light Field / Lumigraph, Color and Perception)&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&#10;&#10;&#10;&#10;&#10;&#10;&#10;&#10;&lt;blockquote class="blockquote-regular"&gt;&#10; &lt;p&gt;Note: these are two topics that step outside geometry. The light field asks how much information a scene actually carries visually; colour asks why that information turns into colour once it enters the human eye. They look unrelated but point at the same conclusion: &lt;strong&gt;the &amp;ldquo;image&amp;rdquo; and the &amp;ldquo;colour&amp;rdquo; we perceive are only low-dimensional projections of the physical world onto human senses&lt;/strong&gt; — the light field squeezes the 7D plenoptic function down to 4D, and colour squeezes an infinite-dimensional spectrum down to 3D. It is precisely because this compression exists that image capture and colour reproduction are possible at all.&lt;/p&gt;</description></item><item><title>12 | Animation and Simulation</title><link>https://blog.deltastudio.space/en/posts/games101-animation-and-simulation/</link><pubDate>Sat, 03 Oct 2026 15:00:00 +0800</pubDate><guid>https://blog.deltastudio.space/en/posts/games101-animation-and-simulation/</guid><description>&lt;ul&gt;&#10;&lt;li&gt;Instructor: Lingqi Yan | UCSB&lt;/li&gt;&#10;&lt;li&gt;Bilibili: &lt;a href="https://www.bilibili.com/video/BV1X7411F744"&gt;https://www.bilibili.com/video/BV1X7411F744&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;Lectures covered: &lt;a href="https://sites.cs.ucsb.edu/~lingqi/teaching/resources/GAMES101_Lecture_21.pdf"&gt;Lecture 21&lt;/a&gt; (Animation 1: Basic Concepts, Mass-Spring Systems, Kinematics, Rigging / Blend Shapes / Motion Capture), &lt;a href="https://sites.cs.ucsb.edu/~lingqi/teaching/resources/GAMES101_Lecture_22.pdf"&gt;Lecture 22&lt;/a&gt; (Animation Cont.: Solving ODEs, Rigid Body and Fluids)&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&#10;&#10;&#10;&#10;&#10;&#10;&#10;&#10;&lt;blockquote class="blockquote-regular"&gt;&#10; &lt;p&gt;Note: the previous eleven posts all dealt with the &amp;ldquo;static&amp;rdquo; problem — a scene sits there, and we care about how to compute and draw it. This one changes the dimension: making the scene move over time. Animation and simulation both look like they &amp;ldquo;generate motion&amp;rdquo;, but they take two fundamentally different routes: &lt;strong&gt;animation describes motion&lt;/strong&gt; (a human supplies keyframes or joint angles and the computer interpolates), while &lt;strong&gt;simulation derives motion&lt;/strong&gt; (a human supplies the laws of physics and the computer integrates). In practice the two roads meet in the same place — both end up solving differential equations numerically, and both can blow up because of discretisation.&lt;/p&gt;</description></item><item><title>10 | Cameras and Lenses</title><link>https://blog.deltastudio.space/en/posts/games101-cameras-and-lenses/</link><pubDate>Sat, 03 Oct 2026 14:00:00 +0800</pubDate><guid>https://blog.deltastudio.space/en/posts/games101-cameras-and-lenses/</guid><description>&lt;ul&gt;&#10;&lt;li&gt;Instructor: Lingqi Yan | UCSB&lt;/li&gt;&#10;&lt;li&gt;Bilibili: &lt;a href="https://www.bilibili.com/video/BV1X7411F744"&gt;https://www.bilibili.com/video/BV1X7411F744&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;Lectures covered: &lt;a href="https://sites.cs.ucsb.edu/~lingqi/teaching/resources/GAMES101_Lecture_19.pdf"&gt;Lecture 19&lt;/a&gt; (Cameras, Lenses and Light Fields)&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&#10;&#10;&#10;&#10;&#10;&#10;&#10;&#10;&lt;blockquote class="blockquote-regular"&gt;&#10; &lt;p&gt;Note: the previous nine posts kept answering &amp;ldquo;how do we draw a model into an image&amp;rdquo; — that is &lt;strong&gt;synthesis&lt;/strong&gt;. This one turns around and asks how an image gets &lt;strong&gt;captured&lt;/strong&gt;. Nearly every part of a camera — lens, aperture, shutter, sensor — maps onto a parameter in a renderer, and effects like depth of field, defocus blur and exposure finally get a physical model.&lt;/p&gt;</description></item><item><title>07 | Ray Tracing (Whitted-Style, Radiometry and Path Tracing)</title><link>https://blog.deltastudio.space/en/posts/games101-ray-tracing/</link><pubDate>Thu, 01 Oct 2026 18:00:00 +0800</pubDate><guid>https://blog.deltastudio.space/en/posts/games101-ray-tracing/</guid><description>&lt;ul&gt;&#10;&lt;li&gt;Instructor: Lingqi Yan | UCSB&lt;/li&gt;&#10;&lt;li&gt;Bilibili: &lt;a href="https://www.bilibili.com/video/BV1X7411F744"&gt;https://www.bilibili.com/video/BV1X7411F744&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;Lectures covered: &lt;a href="https://sites.cs.ucsb.edu/~lingqi/teaching/resources/GAMES101_Lecture_13.pdf"&gt;Lecture 13&lt;/a&gt; (Ray Tracing 1: Whitted-Style Ray Tracing), &lt;a href="https://sites.cs.ucsb.edu/~lingqi/teaching/resources/GAMES101_Lecture_14.pdf"&gt;Lecture 14&lt;/a&gt; (Ray Tracing 2: Acceleration &amp;amp; Radiometry), &lt;a href="https://sites.cs.ucsb.edu/~lingqi/teaching/resources/GAMES101_Lecture_15.pdf"&gt;Lecture 15&lt;/a&gt; (Light Transport &amp;amp; Global Illumination), &lt;a href="https://sites.cs.ucsb.edu/~lingqi/teaching/resources/GAMES101_Lecture_16.pdf"&gt;Lecture 16&lt;/a&gt; (Ray Tracing 4: Monte Carlo, Path Tracing)&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&#10;&#10;&#10;&#10;&#10;&#10;&#10;&#10;&lt;blockquote class="blockquote-regular"&gt;&#10; &lt;p&gt;Note: ray tracing is the longest block in GAMES101, spanning lectures 13-18. This post covers lectures 13-16 — from Whitted-style ray tracing, intersection tests and acceleration structures, through radiometry and the rendering equation, to path tracing. Materials and appearances (Lecture 17) and advanced rendering topics (Lecture 18) get their own posts.&lt;/p&gt;</description></item><item><title>08 | Materials and Appearances</title><link>https://blog.deltastudio.space/en/posts/games101-materials-and-appearances/</link><pubDate>Thu, 01 Oct 2026 18:00:00 +0800</pubDate><guid>https://blog.deltastudio.space/en/posts/games101-materials-and-appearances/</guid><description>&lt;ul&gt;&#10;&lt;li&gt;Instructor: Lingqi Yan | UCSB&lt;/li&gt;&#10;&lt;li&gt;Bilibili: &lt;a href="https://www.bilibili.com/video/BV1X7411F744"&gt;https://www.bilibili.com/video/BV1X7411F744&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;Lectures covered: &lt;a href="https://sites.cs.ucsb.edu/~lingqi/teaching/resources/GAMES101_Lecture_17.pdf"&gt;Lecture 17&lt;/a&gt; (Materials and Appearances)&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&#10;&#10;&#10;&#10;&#10;&#10;&#10;&#10;&lt;blockquote class="blockquote-regular"&gt;&#10; &lt;p&gt;Note: the previous post (#7) drove all the way to path tracing and solved the rendering equation. This one turns around and stares at the one term in that equation that is &amp;ldquo;known&amp;rdquo; yet endlessly complicated — $f_r$, the BRDF. Materials, appearances, glossiness, Fresnel, microfacets: they all answer the same question. When light hits this surface, how much energy goes where? The advanced rendering topics of Lecture 18 (BDPT, MLT, photon mapping, VCM, plus non-surface models such as participating media and hair) get their own post.&lt;/p&gt;</description></item><item><title>09 | Advanced Light Transport and Complex Appearance Modeling</title><link>https://blog.deltastudio.space/en/posts/games101-advanced-rendering/</link><pubDate>Thu, 01 Oct 2026 18:00:00 +0800</pubDate><guid>https://blog.deltastudio.space/en/posts/games101-advanced-rendering/</guid><description>&lt;ul&gt;&#10;&lt;li&gt;Instructor: Lingqi Yan | UCSB&lt;/li&gt;&#10;&lt;li&gt;Bilibili: &lt;a href="https://www.bilibili.com/video/BV1X7411F744"&gt;https://www.bilibili.com/video/BV1X7411F744&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;Lectures covered: &lt;a href="https://sites.cs.ucsb.edu/~lingqi/teaching/resources/GAMES101_Lecture_18.pdf"&gt;Lecture 18&lt;/a&gt; (Advanced Topics in Rendering)&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&#10;&#10;&#10;&#10;&#10;&#10;&#10;&#10;&lt;blockquote class="blockquote-regular"&gt;&#10; &lt;p&gt;Note: this closes out the rendering block. We walked from the rendering equation all the way to path tracing and got the basic framework standing. This post derives no new equation — it spreads out sideways instead. First, what &lt;em&gt;other&lt;/em&gt; light transport algorithms exist (BDPT, MLT, photon mapping, VCM, instant radiosity); then, what to do when the &amp;ldquo;surface + BRDF&amp;rdquo; assumption stops being enough, and we have to model participating media, hair, skin and cloth.&lt;/p&gt;</description></item><item><title>06 | Geometry (Basic Representations &amp; Curves and Surfaces &amp; Mesh Processing) and Shadow Mapping</title><link>https://blog.deltastudio.space/en/posts/games101-geometry/</link><pubDate>Wed, 09 Sep 2026 18:00:00 +0800</pubDate><guid>https://blog.deltastudio.space/en/posts/games101-geometry/</guid><description>&lt;ul&gt;&#10;&lt;li&gt;Instructor: Lingqi Yan | UCSB&lt;/li&gt;&#10;&lt;li&gt;Bilibili: &lt;a href="https://www.bilibili.com/video/BV1X7411F744"&gt;https://www.bilibili.com/video/BV1X7411F744&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;Lectures covered: &lt;a href="https://sites.cs.ucsb.edu/~lingqi/teaching/resources/GAMES101_Lecture_10.pdf"&gt;Lecture 10&lt;/a&gt; (Geometry 1: Introduction), &lt;a href="https://sites.cs.ucsb.edu/~lingqi/teaching/resources/GAMES101_Lecture_11.pdf"&gt;Lecture 11&lt;/a&gt; (Geometry 2: Curves and Surfaces), &lt;a href="https://sites.cs.ucsb.edu/~lingqi/teaching/resources/GAMES101_Lecture_12.pdf"&gt;Lecture 12&lt;/a&gt; (Geometry 3)&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Geometry is an extremely important yet difficult topic in computer graphics. This post covers various ways to represent geometry (implicit and explicit), curves and surfaces (Bezier curves, B-splines, Bezier surfaces), mesh processing (subdivision, simplification, regularization) as well as the shadow mapping technique.&lt;/p&gt;&#10;&lt;p&gt;&lt;img src="https://blog.deltastudio.space/images/2026-07-21_series_games101/06_geometry/chap6_01.png" alt="Various geometric examples (glass, car, engine internals, silk, water drops, outdoors, hair, microscopic world, trees)"&gt;&lt;/p&gt;</description></item><item><title>12 | Noise Functions</title><link>https://blog.deltastudio.space/en/posts/threejs-noise/</link><pubDate>Mon, 31 Aug 2026 12:00:00 +0800</pubDate><guid>https://blog.deltastudio.space/en/posts/threejs-noise/</guid><description>&lt;blockquote class="blockquote-regular"&gt;&#10; &lt;p&gt;In the previous lesson, we used GLSL math functions to draw shapes and gradients. This lesson enters the &amp;ldquo;soul tool&amp;rdquo; of shaders — noise functions: from random&amp;rsquo;s snow to Perlin&amp;rsquo;s continuous clouds, from single-layer noise to FBM&amp;rsquo;s fractal detail, ultimately driving clouds, terrain, fire, and vertex deformation.&lt;/p&gt;&#10;&#10;&lt;/blockquote&gt;&#10;&lt;p&gt;&lt;img src="https://blog.deltastudio.space/images/2026-07-07_series_threejs-creation-diary/12_noise/demo.gif" alt="Running effect: Noise function demo"&gt;&lt;/p&gt;&#10;&lt;h2 id="01-learning-objectives"&gt;01 Learning Objectives&lt;/h2&gt;&#10;&lt;p&gt;This lesson focuses on noise function principles and practice:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Understand the core differences between Perlin Noise and Simplex Noise&lt;/li&gt;&#10;&lt;li&gt;Master FBM (Fractal Brownian Motion) principles and applications&lt;/li&gt;&#10;&lt;li&gt;Learn to create organic effects with noise (clouds, terrain, fire)&lt;/li&gt;&#10;&lt;li&gt;Understand vertex deformation using noise in vertex shaders&lt;/li&gt;&#10;&lt;li&gt;Master two ways to animate noise (moving sample point / changing frequency)&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="02-what-is-noise--continuous-pseudorandom-function"&gt;02 What Is Noise — Continuous Pseudorandom Function&lt;/h2&gt;&#10;&lt;p&gt;Noise is a &lt;strong&gt;continuous pseudorandom function&lt;/strong&gt;: neighboring points have similar values, but the overall pattern appears random.&lt;/p&gt;</description></item><item><title>05 | Shading (Illumination Models and Texture Mapping)</title><link>https://blog.deltastudio.space/en/posts/games101-shading/</link><pubDate>Sun, 30 Aug 2026 18:00:00 +0800</pubDate><guid>https://blog.deltastudio.space/en/posts/games101-shading/</guid><description>&lt;ul&gt;&#10;&lt;li&gt;Instructor: Lingqi Yan | UCSB&lt;/li&gt;&#10;&lt;li&gt;Bilibili: &lt;a href="https://www.bilibili.com/video/BV1X7411F744"&gt;https://www.bilibili.com/video/BV1X7411F744&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;Lectures covered: &lt;a href="https://sites.cs.ucsb.edu/~lingqi/teaching/resources/GAMES101_Lecture_07.pdf"&gt;Lecture 7&lt;/a&gt; (Illumination, Shading and Graphics Pipeline), &lt;a href="https://sites.cs.ucsb.edu/~lingqi/teaching/resources/GAMES101_Lecture_08.pdf"&gt;Lecture 8&lt;/a&gt; (Shading, Pipeline and Texture Mapping), &lt;a href="https://sites.cs.ucsb.edu/~lingqi/teaching/resources/GAMES101_Lecture_09.pdf"&gt;Lecture 9&lt;/a&gt; (Texture Mapping cont.)&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&#10;&#10;&#10;&#10;&#10;&#10;&#10;&#10;&lt;blockquote class="blockquote-regular"&gt;&#10; &lt;p&gt;Note: In the official condensed slides, texture applications (environment maps, bump/normal/displacement maps, 3D textures) appear in Lecture 10 and shadow mapping in Lecture 12; following the full Bilibili course structure, they are grouped under the shading topic here.&lt;/p&gt;&#10;&#10;&lt;/blockquote&gt;&#10;&lt;p&gt;Shading is the process of applying material properties to objects, which determines their color and appearance under different lighting conditions. This post covers the depth buffer (visibility/occlusion), the Blinn-Phong reflectance model, shading frequencies, the graphics pipeline, texture mapping and related techniques.&lt;/p&gt;</description></item><item><title>11 | GLSL Math Functions</title><link>https://blog.deltastudio.space/en/posts/threejs-glsl-math/</link><pubDate>Tue, 25 Aug 2026 12:00:00 +0800</pubDate><guid>https://blog.deltastudio.space/en/posts/threejs-glsl-math/</guid><description>&lt;blockquote class="blockquote-regular"&gt;&#10; &lt;p&gt;Last lesson covered GLSL basics and ShaderMaterial data channels. This lesson dives deep into math functions — mix / step / smoothstep for gradients and boundaries, sin / cos for waves, dot / cross for lighting and Fresnel, fract / mod for repeating patterns. These functions form the core toolchain from &amp;ldquo;a UV coordinate&amp;rdquo; to &amp;ldquo;a final image&amp;rdquo;.&lt;/p&gt;&#10;&#10;&lt;/blockquote&gt;&#10;&lt;h2 id="01-learning-objectives"&gt;01 Learning Objectives&lt;/h2&gt;&#10;&lt;p&gt;This lesson focuses on practical applications of GLSL math functions:&lt;/p&gt;</description></item><item><title>04 | Rasterization (Triangle Discretization and Anti-Aliasing)</title><link>https://blog.deltastudio.space/en/posts/games101-rasterization/</link><pubDate>Sun, 16 Aug 2026 12:00:00 +0800</pubDate><guid>https://blog.deltastudio.space/en/posts/games101-rasterization/</guid><description>&lt;ul&gt;&#10;&lt;li&gt;Instructor: Lingqi Yan | UCSB&lt;/li&gt;&#10;&lt;li&gt;Bilibili: &lt;a href="https://www.bilibili.com/video/BV1X7411F744"&gt;https://www.bilibili.com/video/BV1X7411F744&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Rasterization is the process of converting vector graphics (geometric descriptions) into pixel images (raster images).&lt;/p&gt;&#10;&lt;p&gt;Rasterization = drawing continuous geometry as discrete pixels. It is the foundational technique of real-time rendering.&lt;/p&gt;&#10;&#10;&#10;&#10;&#10;&#10;&#10;&#10;&#10;&lt;blockquote class="blockquote-regular"&gt;&#10; &lt;p&gt;This chapter corresponds to lectures 5-6 (the depth buffer part corresponds to the start of lecture 7).&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="https://sites.cs.ucsb.edu/~lingqi/teaching/resources/GAMES101_Lecture_05.pdf"&gt;Lecture 05 slides (PDF)&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://sites.cs.ucsb.edu/~lingqi/teaching/resources/GAMES101_Lecture_06.pdf"&gt;Lecture 06 slides (PDF)&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://www.bilibili.com/video/BV1X7411F744"&gt;Bilibili video&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&#10;&lt;/blockquote&gt;&#10;&lt;h2 id="1-perspective-projection-wrap-up-fovy-and-aspect-ratio"&gt;1 Perspective Projection Wrap-Up: fovY and Aspect Ratio&lt;/h2&gt;&#10;&lt;p&gt;In the MVP transform, the perspective projection frustum is defined by $l, r, b, t$ (left, right, bottom, top bounds of the near clip plane), but in practice developers prefer &lt;strong&gt;vertical field of view (fovY)&lt;/strong&gt; and &lt;strong&gt;aspect ratio&lt;/strong&gt; (assuming symmetry, i.e. $l = -r$, $b = -t$):&lt;/p&gt;</description></item><item><title>10 | GLSL Basics</title><link>https://blog.deltastudio.space/en/posts/threejs-glsl/</link><pubDate>Sat, 15 Aug 2026 12:00:00 +0800</pubDate><guid>https://blog.deltastudio.space/en/posts/threejs-glsl/</guid><description>&lt;blockquote class="blockquote-regular"&gt;&#10; &lt;p&gt;The first 9 lessons all used Three.js built-in materials (MeshStandardMaterial, MeshBasicMaterial&amp;hellip;). This lesson starts writing custom shaders — talking to the GPU directly with GLSL, so gradients, waves, and Fresnel effects are generated entirely by code instead of built-in material presets.&lt;/p&gt;&#10;&#10;&lt;/blockquote&gt;&#10;&lt;p&gt;&lt;img src="https://blog.deltastudio.space/images/2026-07-07_series_threejs-creation-diary/10_glsl/demo.png" alt="Demo: GLSL basics (gradient sphere, Fresnel rim-glow sphere, Raw sphere, wave floor, live parameter panel)"&gt;&lt;/p&gt;&#10;&lt;h2 id="01-learning-objectives"&gt;01 Learning Objectives&lt;/h2&gt;&#10;&lt;p&gt;This lesson focuses on GLSL shader programming fundamentals:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Understand the structure and execution flow of Vertex / Fragment Shaders&lt;/li&gt;&#10;&lt;li&gt;Master the roles of &lt;code&gt;gl_Position&lt;/code&gt; / &lt;code&gt;gl_FragColor&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;Distinguish the three variable types: &lt;code&gt;attribute&lt;/code&gt; / &lt;code&gt;uniform&lt;/code&gt; / &lt;code&gt;varying&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;Understand &lt;code&gt;ShaderMaterial&lt;/code&gt; vs &lt;code&gt;RawShaderMaterial&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;Master coordinate transformations (model → world → view → clip)&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="02-glsl-basic-syntax"&gt;02 GLSL Basic Syntax&lt;/h2&gt;&#10;&lt;p&gt;GLSL is a C-style shading language, slightly different from JS/TS. First, the most common &amp;ldquo;parts&amp;rdquo;.&lt;/p&gt;</description></item><item><title>03 | Transformations (2D and 3D)</title><link>https://blog.deltastudio.space/en/posts/games101-transformations/</link><pubDate>Sun, 09 Aug 2026 12:00:00 +0800</pubDate><guid>https://blog.deltastudio.space/en/posts/games101-transformations/</guid><description>&lt;ul&gt;&#10;&lt;li&gt;Instructor: Lingqi Yan | UCSB&lt;/li&gt;&#10;&lt;li&gt;Bilibili: &lt;a href="https://www.bilibili.com/video/BV1X7411F744"&gt;https://www.bilibili.com/video/BV1X7411F744&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="1-why-study-transformations"&gt;1 Why Study Transformations&lt;/h2&gt;&#10;&lt;p&gt;Transformations have two core applications in graphics:&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th style="text-align: center"&gt;Application&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th style="text-align: left"&gt;Description&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th style="text-align: left"&gt;Example&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: center"&gt;&lt;strong&gt;Modeling&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: left"&gt;Place objects in a scene&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: left"&gt;Translate, rotate, scale objects&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: center"&gt;&lt;strong&gt;Viewing&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: left"&gt;Project 3D scene onto a 2D image&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: left"&gt;Camera transform, projection transform&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="2-2d-transformations"&gt;2 2D Transformations&lt;/h2&gt;&#10;&lt;h3 id="scale"&gt;Scale&lt;/h3&gt;&#10;&lt;p&gt;&lt;strong&gt;Uniform scale&lt;/strong&gt; (all directions scaled equally):&lt;/p&gt;&#10;&lt;p&gt;&lt;img src="https://blog.deltastudio.space/images/2026-07-21_series_games101/03_transforms/chap3_01.png" alt="Uniform Scale"&gt;&lt;/p&gt;&#10;&lt;p&gt;$x' = sx \qquad y' = sy$&lt;/p&gt;&#10;$$&#10;\begin{pmatrix} x' \\ y' \end{pmatrix} = \begin{pmatrix} s &amp; 0 \\ 0 &amp; s \end{pmatrix} \begin{pmatrix} x \\ y \end{pmatrix}&#10;$$&lt;p&gt;For example: $x = 2, \; y = 2, \; s = 0.5$&lt;/p&gt;</description></item><item><title>09 | Animation System</title><link>https://blog.deltastudio.space/en/posts/threejs-animation/</link><pubDate>Thu, 30 Jul 2026 12:00:00 +0800</pubDate><guid>https://blog.deltastudio.space/en/posts/threejs-animation/</guid><description>&lt;blockquote class="blockquote-regular"&gt;&#10; &lt;p&gt;In the first 8 lessons, all animations were manually written in the requestAnimationFrame loop. This lesson introduces GSAP tweening and Three.js native keyframe system for more elegant and powerful animation control.&lt;/p&gt;&#10;&#10;&lt;/blockquote&gt;&#10;&lt;p&gt;&lt;img src="https://blog.deltastudio.space/images/2026-07-07_series_threejs-creation-diary/09_animation/demo.png" alt="Demo: Animation System"&gt;&lt;/p&gt;&#10;&lt;h2 id="01-learning-objectives"&gt;01 Learning Objectives&lt;/h2&gt;&#10;&lt;p&gt;This lesson focuses on Three.js animation system:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Understand requestAnimationFrame loop vs GSAP animation differences&lt;/li&gt;&#10;&lt;li&gt;Master gsap.to() / gsap.from() / gsap.timeline()&lt;/li&gt;&#10;&lt;li&gt;Learn to use GSAP for smooth camera and object movement&lt;/li&gt;&#10;&lt;li&gt;Master AnimationMixer for model animation playback&lt;/li&gt;&#10;&lt;li&gt;Learn keyframe animation (KeyframeTrack / AnimationClip)&lt;/li&gt;&#10;&lt;li&gt;Understand AnimationObjectGroup for shared animation across multiple objects&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="02-requestanimationframe-vs-gsap"&gt;02 requestAnimationFrame vs GSAP&lt;/h2&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Feature&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;requestAnimationFrame&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;GSAP&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Purpose&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Per-frame logic (physics, LOD, rendering)&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Tweening (smooth transitions)&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Control&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Manual delta, progress management&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Auto interpolation, easing curves&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Easing&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Must implement yourself&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;30+ built-in easing functions&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Sequencing&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Must orchestrate yourself&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;timeline in one line&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Performance&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Optimal&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Excellent (auto-optimized)&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;&lt;strong&gt;Both can be used simultaneously&lt;/strong&gt;: rAF for render loop, GSAP for animation control.&lt;/p&gt;</description></item><item><title>08 | Model Loading</title><link>https://blog.deltastudio.space/en/posts/threejs-model-loading/</link><pubDate>Tue, 28 Jul 2026 12:00:00 +0800</pubDate><guid>https://blog.deltastudio.space/en/posts/threejs-model-loading/</guid><description>&lt;blockquote class="blockquote-regular"&gt;&#10; &lt;p&gt;In the first 7 lessons, we created geometry with code. In real projects, 3D models are usually made in Blender/Maya, exported as GLTF/GLB, and loaded into the scene. This lesson covers the complete model loading pipeline: load → compress → scale → animate.&lt;/p&gt;&#10;&#10;&lt;/blockquote&gt;&#10;&lt;p&gt;&lt;img src="https://blog.deltastudio.space/images/2026-07-07_series_threejs-creation-diary/08_model-loading/demo.png" alt="Demo: Model Loading"&gt;&lt;/p&gt;&#10;&lt;h2 id="01-learning-objectives"&gt;01 Learning Objectives&lt;/h2&gt;&#10;&lt;p&gt;This lesson focuses on Three.js model loading system:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Understand GLTF/GLB format differences and file structure&lt;/li&gt;&#10;&lt;li&gt;Learn to use GLTFLoader to load models&lt;/li&gt;&#10;&lt;li&gt;Understand Draco compression principles and configuration&lt;/li&gt;&#10;&lt;li&gt;Implement LoadingManager for unified progress management&lt;/li&gt;&#10;&lt;li&gt;Master model auto-scaling and centering algorithms&lt;/li&gt;&#10;&lt;li&gt;Understand LOD (Level of Detail) strategy&lt;/li&gt;&#10;&lt;li&gt;Learn AnimationMixer for animation playback&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="02-gltf-format-details"&gt;02 GLTF Format Details&lt;/h2&gt;&#10;&lt;h3 id="gltf-vs-glb"&gt;GLTF vs GLB&lt;/h3&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Format&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Description&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Use Case&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;GLTF&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;JSON text, resources scattered (.gltf + .bin + textures)&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Development/debugging&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;GLB&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Binary, single file with all resources&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Production&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;&lt;strong&gt;GLTF File Structure&lt;/strong&gt;:&lt;/p&gt;</description></item><item><title>07 | Scene Graph and Transformations</title><link>https://blog.deltastudio.space/en/posts/threejs-scene-graph/</link><pubDate>Fri, 24 Jul 2026 12:00:00 +0800</pubDate><guid>https://blog.deltastudio.space/en/posts/threejs-scene-graph/</guid><description>&lt;blockquote class="blockquote-regular"&gt;&#10; &lt;p&gt;The scene graph is the skeleton system of Three.js. Understanding parent-child relationships, transform inheritance, and coordinate system conversion allows you to build complex 3D structures from simple geometry. This lesson explores the solar system model and block-based animal assembly to deeply understand the scene graph&amp;rsquo;s tree structure.&lt;/p&gt;&#10;&#10;&lt;/blockquote&gt;&#10;&lt;p&gt;&lt;img src="https://blog.deltastudio.space/images/2026-07-07_series_threejs-creation-diary/07_scene-graph/demo.png" alt="Demo: Solar System"&gt;&lt;/p&gt;&#10;&lt;h2 id="01-learning-objectives"&gt;01 Learning Objectives&lt;/h2&gt;&#10;&lt;p&gt;This lesson focuses on Three.js scene graph and transform system:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Understand the scene graph tree structure&lt;/li&gt;&#10;&lt;li&gt;Master parent-child relationships and transform inheritance&lt;/li&gt;&#10;&lt;li&gt;Distinguish local versus world coordinate systems&lt;/li&gt;&#10;&lt;li&gt;Learn Object3D grouping management&lt;/li&gt;&#10;&lt;li&gt;Master scene.traverse() traversal&lt;/li&gt;&#10;&lt;li&gt;Learn AxesHelper / GridHelper debugging&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="02-scene-graph-tree-structure"&gt;02 Scene Graph Tree Structure&lt;/h2&gt;&#10;&lt;h3 id="what-is-a-scene-graph"&gt;What is a Scene Graph&lt;/h3&gt;&#10;&lt;p&gt;All objects in Three.js are organized as a tree, with scene as the root node. A child object&amp;rsquo;s transform (position/rotation/scale) is relative to its parent. When the parent transforms, all children follow.&lt;/p&gt;</description></item><item><title>06 | Textures and Mapping</title><link>https://blog.deltastudio.space/en/posts/threejs-textures/</link><pubDate>Thu, 23 Jul 2026 12:00:00 +0800</pubDate><guid>https://blog.deltastudio.space/en/posts/threejs-textures/</guid><description>&lt;blockquote class="blockquote-regular"&gt;&#10; &lt;p&gt;Textures are how you &amp;ldquo;dress up&amp;rdquo; 3D objects. Understanding UV coordinates, learning to load and control textures, and mastering environment map reflections will transform your scene from &amp;ldquo;bare models&amp;rdquo; to a &amp;ldquo;world with质感&amp;rdquo;.&lt;/p&gt;&#10;&#10;&lt;/blockquote&gt;&#10;&lt;p&gt;&lt;img src="https://blog.deltastudio.space/images/2026-07-07_series_threejs-creation-diary/06_textures/demo.png" alt="Demo: Textures and Mapping"&gt;&lt;/p&gt;&#10;&lt;h2 id="01-learning-objectives"&gt;01 Learning Objectives&lt;/h2&gt;&#10;&lt;p&gt;This lesson focuses on Three.js texture and mapping system:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Master TextureLoader for loading image textures&lt;/li&gt;&#10;&lt;li&gt;Understand UV coordinates and texture mapping&lt;/li&gt;&#10;&lt;li&gt;Learn to control texture repeat, offset, and wrap&lt;/li&gt;&#10;&lt;li&gt;Master CubeTextureLoader for skybox loading&lt;/li&gt;&#10;&lt;li&gt;Master environment maps (envMap) and reflections&lt;/li&gt;&#10;&lt;li&gt;Understand RGBELoader for HDRI environment maps&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="02-texture-basics"&gt;02 Texture Basics&lt;/h2&gt;&#10;&lt;h3 id="what-is-a-texture"&gt;What is a Texture&lt;/h3&gt;&#10;&lt;p&gt;A texture is the process of &amp;ldquo;sticking&amp;rdquo; a 2D image onto a 3D object&amp;rsquo;s surface. Three.js maps image pixels to each vertex of the geometry using UV coordinates.&lt;/p&gt;</description></item><item><title>02 | Vectors and Linear Algebra</title><link>https://blog.deltastudio.space/en/posts/games101-vectors-linear-algebra/</link><pubDate>Tue, 21 Jul 2026 12:00:00 +0800</pubDate><guid>https://blog.deltastudio.space/en/posts/games101-vectors-linear-algebra/</guid><description>&lt;ul&gt;&#10;&lt;li&gt;Instructor: Lingqi Yan | UCSB&lt;/li&gt;&#10;&lt;li&gt;Bilibili: &lt;a href="https://www.bilibili.com/video/BV1X7411F744"&gt;https://www.bilibili.com/video/BV1X7411F744&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="1-vector-basics"&gt;1 Vector Basics&lt;/h2&gt;&#10;&lt;h3 id="definition-of-vectors"&gt;Definition of Vectors&lt;/h3&gt;&#10;&lt;p&gt;&lt;img src="https://blog.deltastudio.space/images/2026-07-21_series_games101/02_vectors/chap2_01.png" alt="Vector Definition"&gt;&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Vectors have &lt;strong&gt;direction&lt;/strong&gt; and &lt;strong&gt;length&lt;/strong&gt;, but no absolute starting position&lt;/li&gt;&#10;&lt;li&gt;Commonly denoted as $\vec{a}$ or bold &lt;strong&gt;a&lt;/strong&gt;&lt;/li&gt;&#10;&lt;li&gt;Represented by start and end points: $\overrightarrow{AB} = B - A$&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="vector-normalization"&gt;Vector Normalization&lt;/h3&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Magnitude (length) of a vector: $||\vec{a}||$&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Unit vector&lt;/strong&gt;: A vector with magnitude 1, used to represent direction&lt;/li&gt;&#10;&lt;li&gt;Normalization: $\hat{a} = \frac{\vec{a}}{||\vec{a}||}$&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="vector-addition"&gt;Vector Addition&lt;/h3&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;Geometric representation&lt;/strong&gt;: Parallelogram law &amp;amp; triangle law&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Algebraic calculation&lt;/strong&gt;: Add corresponding coordinates&lt;/li&gt;&#10;&lt;/ul&gt;&#10;$$&#10;\vec{a} + \vec{b} = \begin{pmatrix} x_a + x_b \\ y_a + y_b \end{pmatrix}&#10;$$&lt;p&gt;&lt;strong&gt;Geometric representation of vector addition&lt;/strong&gt;:&lt;/p&gt;</description></item><item><title>01 | Overview &amp; Rasterization</title><link>https://blog.deltastudio.space/en/posts/games101-overview-rasterization/</link><pubDate>Mon, 20 Jul 2026 12:00:00 +0800</pubDate><guid>https://blog.deltastudio.space/en/posts/games101-overview-rasterization/</guid><description>&lt;ul&gt;&#10;&lt;li&gt;Instructor: Lingqi Yan | UCSB&lt;/li&gt;&#10;&lt;li&gt;Course Link: &lt;a href="https://www.bilibili.com/video/BV1X7411F744"&gt;https://www.bilibili.com/video/BV1X7411F744&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="1-what-is-computer-graphics"&gt;1 What is Computer Graphics&lt;/h2&gt;&#10;&lt;p&gt;&lt;strong&gt;Computer Graphics&lt;/strong&gt;: The use of computers to &lt;strong&gt;synthesize and manipulate&lt;/strong&gt; visual information.&lt;/p&gt;&#10;&lt;p&gt;The core task of computer graphics is to &lt;strong&gt;represent, process, render, and display&lt;/strong&gt; graphics and images in computers.&lt;/p&gt;&#10;&lt;h3 id="application-areas"&gt;Application Areas&lt;/h3&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th style="text-align: left"&gt;Area&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th style="text-align: left"&gt;Examples&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: left"&gt;Video Games&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: left"&gt;Real-time rendering, 3D scenes&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: left"&gt;Film VFX&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: left"&gt;Offline rendering, visual effects&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: left"&gt;Animation&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: left"&gt;CG animation like &lt;em&gt;Frozen&lt;/em&gt;, &lt;em&gt;Zootopia&lt;/em&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: left"&gt;Design &amp;amp; CAD&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: left"&gt;Industrial design, architectural visualization&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: left"&gt;Data Visualization&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: left"&gt;Scientific, engineering, medical data&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: left"&gt;Virtual Reality&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: left"&gt;Immersive virtual environments&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: left"&gt;Augmented Reality&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: left"&gt;Real-virtual fusion (AR navigation)&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: left"&gt;Simulation&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: left"&gt;Physics, weather, black hole visualization&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;h2 id="2-four-core-topics"&gt;2 Four Core Topics&lt;/h2&gt;&#10;&lt;p&gt;GAMES101 covers four core topics in modern computer graphics:&lt;/p&gt;</description></item><item><title>05 | Cameras and Controls</title><link>https://blog.deltastudio.space/en/posts/threejs-cameras/</link><pubDate>Sun, 19 Jul 2026 12:00:00 +0800</pubDate><guid>https://blog.deltastudio.space/en/posts/threejs-cameras/</guid><description>&lt;blockquote class="blockquote-regular"&gt;&#10; &lt;p&gt;The camera determines &amp;ldquo;where you look from&amp;rdquo; and &amp;ldquo;how much you see&amp;rdquo;. Master the difference between perspective and orthographic cameras, understand frustum and clipping planes, and you can precisely control the visual presentation of a 3D scene.&lt;/p&gt;&#10;&#10;&lt;/blockquote&gt;&#10;&lt;p&gt;&lt;img src="https://blog.deltastudio.space/images/2026-07-07_series_threejs-creation-diary/05_cameras/demo.png" alt="Demo: Perspective vs Orthographic camera comparison"&gt;&lt;/p&gt;&#10;&lt;h2 id="01-learning-objectives"&gt;01 Learning Objectives&lt;/h2&gt;&#10;&lt;p&gt;This lesson focuses on Three.js cameras and controls:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Distinguish PerspectiveCamera and OrthographicCamera&lt;/li&gt;&#10;&lt;li&gt;Master OrbitControls configuration&lt;/li&gt;&#10;&lt;li&gt;Understand camera parameters (fov, aspect, near, far)&lt;/li&gt;&#10;&lt;li&gt;Learn camera switching and parameter adjustment&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="02-perspective-vs-orthographic-camera"&gt;02 Perspective vs Orthographic Camera&lt;/h2&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Feature&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Perspective Camera&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Orthographic Camera&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Perspective&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Near-far scale&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Uniform scale&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Light convergence&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Diverges from a point&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Parallel (no convergence)&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Frustum shape&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Truncated pyramid&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Rectangular box&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Use case&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;3D games, realistic scenes&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;CAD, 2D games, UI&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-typescript" data-lang="typescript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;/**&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * Perspective Camera — Simulates human eye&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; *&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * Near-far scale, suitable for 3D scenes, games, realistic rendering.&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; *&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * PerspectiveCamera(fov, aspect, near, far)&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * fov — Field of view (degrees), wider = more distortion&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * aspect — Aspect ratio (width/height), must update on resize&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * near — Near clipping plane, closer objects hidden&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * far — Far clipping plane, farther objects hidden&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; */&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;perspectiveCamera&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;THREE&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;PerspectiveCamera&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;aspect&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;0.1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;perspectiveCamera&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;position&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="kr"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;perspectiveCamera&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;lookAt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;/**&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * Orthographic Camera — No perspective effect&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; *&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * Uniform scale, suitable for CAD, architecture preview, 2D games.&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; *&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * OrthographicCamera(left, right, top, bottom, near, far)&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * left/right — Visible range horizontal bounds&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * top/bottom — Visible range vertical bounds&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * near/far — Near/far clipping planes&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; *&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; * Note: Must maintain aspect ratio with screen, otherwise objects stretch&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; */&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;frustumSize&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;orthographicCamera&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;THREE&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;OrthographicCamera&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;frustumSize&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;aspect&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// left&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;frustumSize&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;aspect&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// right&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;frustumSize&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// top&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;frustumSize&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// bottom&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="mf"&gt;0.1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// near&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="mi"&gt;100&lt;/span&gt; &lt;span class="c1"&gt;// far&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="03-camera-parameters"&gt;03 Camera Parameters&lt;/h2&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Parameter&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Meaning&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Perspective&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Orthographic&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;FOV&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Field of view angle&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;30°-120°&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;N/A&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;aspect&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Aspect ratio&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;width/height&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;width/height&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;near&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Near clipping plane&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Closer hidden&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Closer hidden&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;far&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Far clipping plane&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Farther hidden&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Farther hidden&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;frustumSize&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Visible range height&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;N/A&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Controls visible range&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;h3 id="fov-and-perspective-distortion"&gt;FOV and Perspective Distortion&lt;/h3&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;Small FOV&lt;/strong&gt; (e.g. 30°) → Narrow view (telephoto), objects look large, weak distortion&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Large FOV&lt;/strong&gt; (e.g. 120°) → Wide view (wide-angle), objects look small, strong distortion&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="nearfar-clipping-planes"&gt;Near/Far Clipping Planes&lt;/h3&gt;&#10;&lt;p&gt;Large Near/Far ratio causes &lt;strong&gt;depth precision loss&lt;/strong&gt; (far objects flicker):&lt;/p&gt;</description></item><item><title>04 | Lights and Shadows</title><link>https://blog.deltastudio.space/en/posts/threejs-lights/</link><pubDate>Fri, 17 Jul 2026 10:00:00 +0800</pubDate><guid>https://blog.deltastudio.space/en/posts/threejs-lights/</guid><description>&lt;blockquote class="blockquote-regular"&gt;&#10; &lt;p&gt;Lights are the soul of a 3D scene. Master 5 light types and the three shadow elements to transform your scene from &amp;ldquo;flat&amp;rdquo; to a layered, realistic world.&lt;/p&gt;&#10;&#10;&lt;/blockquote&gt;&#10;&lt;p&gt;&lt;img src="https://blog.deltastudio.space/images/2026-07-07_series_threejs-creation-diary/04_lights/demo.png" alt="Demo: 5 light types comparison &amp;#43; shadow quality showcase"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;em&gt;Left to right: Ambient, Hemisphere, Directional, Point, Spot — five light types comparison, with shadow quality showcase at different resolutions below&lt;/em&gt;&lt;/p&gt;&#10;&lt;h2 id="01-learning-objectives"&gt;01 Learning Objectives&lt;/h2&gt;&#10;&lt;p&gt;This lesson focuses on the Three.js lights and shadows system:&lt;/p&gt;</description></item><item><title>03 | Material System</title><link>https://blog.deltastudio.space/en/posts/threejs-materials/</link><pubDate>Thu, 16 Jul 2026 10:00:00 +0800</pubDate><guid>https://blog.deltastudio.space/en/posts/threejs-materials/</guid><description>&lt;blockquote class="blockquote-regular"&gt;&#10; &lt;p&gt;Materials determine how object surfaces interact with light. Master 6 material types and PBR parameters to transform 3D objects from &amp;ldquo;plastic look&amp;rdquo; to &amp;ldquo;photorealistic&amp;rdquo;.&lt;/p&gt;&#10;&#10;&lt;/blockquote&gt;&#10;&lt;h2 id="01-learning-objectives"&gt;01 Learning Objectives&lt;/h2&gt;&#10;&lt;p&gt;This lesson focuses on the Three.js material system:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Distinguish 6 material types and their use cases&lt;/li&gt;&#10;&lt;li&gt;Understand PBR material roughness and metalness parameters&lt;/li&gt;&#10;&lt;li&gt;Master environment mapping (CubeTexture) for reflection effects&lt;/li&gt;&#10;&lt;li&gt;Understand normal mapping principles and usage&lt;/li&gt;&#10;&lt;li&gt;Learn to use TextureLoader for external texture loading&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="02-material-types-comparison"&gt;02 Material Types Comparison&lt;/h2&gt;&#10;&lt;p&gt;Three.js provides multiple material types, each suitable for different scenarios:&lt;/p&gt;</description></item><item><title>02 | Geometry and Primitives</title><link>https://blog.deltastudio.space/en/posts/threejs-primitives/</link><pubDate>Fri, 10 Jul 2026 10:00:00 +0800</pubDate><guid>https://blog.deltastudio.space/en/posts/threejs-primitives/</guid><description>&lt;blockquote class="blockquote-regular"&gt;&#10; &lt;p&gt;Geometry is the building block of the 3D world. Master 5 basic primitives and you can combine almost any shape.&lt;/p&gt;&#10;&#10;&lt;/blockquote&gt;&#10;&lt;h2 id="01-learning-objectives"&gt;01 Learning Objectives&lt;/h2&gt;&#10;&lt;p&gt;This lesson focuses on Three.js built-in geometries:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Master the constructors and parameters of 5 basic geometries&lt;/li&gt;&#10;&lt;li&gt;Understand the relationship between segments and vertex count&lt;/li&gt;&#10;&lt;li&gt;Learn to combine multiple primitives into complex objects&lt;/li&gt;&#10;&lt;li&gt;Understand Wireframe visualization principles&lt;/li&gt;&#10;&lt;li&gt;Learn procedural texture generation (Canvas)&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="02-the-nature-of-geometries"&gt;02 The Nature of Geometries&lt;/h2&gt;&#10;&lt;p&gt;Three.js geometries are essentially &lt;strong&gt;collections of vertex data&lt;/strong&gt;:&lt;/p&gt;</description></item><item><title>01 | Building 3D Project Architecture from Scratch</title><link>https://blog.deltastudio.space/en/posts/threejs-project-architecture/</link><pubDate>Tue, 07 Jul 2026 10:00:00 +0800</pubDate><guid>https://blog.deltastudio.space/en/posts/threejs-project-architecture/</guid><description>&lt;blockquote class="blockquote-regular"&gt;&#10; &lt;p&gt;Everything in Three.js starts with three objects: Scene (stage), Camera (lens), Renderer (projector). Master this trio and you have your ticket to the 3D world.&lt;/p&gt;&#10;&#10;&lt;/blockquote&gt;&#10;&lt;p&gt;&lt;img src="https://blog.deltastudio.space/images/2026-07-07_series_threejs-creation-diary/01_project-architecture/demo.png" alt="Running effect: rotating floating normal material cube"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;em&gt;Normal material cube rotating and floating on a black background, different faces showing different colors (normal direction mapped to RGB)&lt;/em&gt;&lt;/p&gt;&#10;&lt;h2 id="01-learning-objectives"&gt;01 Learning Objectives&lt;/h2&gt;&#10;&lt;p&gt;This lesson builds a complete Three.js project from scratch:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Set up Vite + TypeScript + Three.js project scaffold&lt;/li&gt;&#10;&lt;li&gt;Understand the responsibilities of Scene / Camera / Renderer&lt;/li&gt;&#10;&lt;li&gt;Master requestAnimationFrame + delta time animation loop&lt;/li&gt;&#10;&lt;li&gt;Learn window resize handling and pixel ratio settings&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="02-the-threejs-trio"&gt;02 The Three.js Trio&lt;/h2&gt;&#10;&lt;p&gt;Everything in Three.js starts with three objects:&lt;/p&gt;</description></item><item><title>Math Basics: A Complete Guide to Trigonometry</title><link>https://blog.deltastudio.space/en/posts/trigonometry-guide/</link><pubDate>Sun, 05 Jul 2026 10:00:00 +0800</pubDate><guid>https://blog.deltastudio.space/en/posts/trigonometry-guide/</guid><description>&lt;blockquote class="blockquote-regular"&gt;&#10; &lt;p&gt;Trigonometric functions are the core tool for describing periodic phenomena and the mathematical foundation for 3D graphics. This article starts from right triangles and systematically reviews the definitions, formulas, graphs, and inverse trigonometric functions.&lt;/p&gt;&#10;&#10;&lt;/blockquote&gt;&#10;&lt;h2 id="01-basic-definitions"&gt;01 Basic Definitions&lt;/h2&gt;&#10;&lt;h3 id="right-triangle-definition"&gt;Right Triangle Definition&lt;/h3&gt;&#10;&lt;p&gt;In a right triangle, let angle $\theta$ be an acute angle:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;Sine&lt;/strong&gt; (sin): $\sin\theta = \frac{\text{opposite}}{\text{hypotenuse}}$&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Cosine&lt;/strong&gt; (cos): $\cos\theta = \frac{\text{adjacent}}{\text{hypotenuse}}$&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Tangent&lt;/strong&gt; (tan): $\tan\theta = \frac{\text{opposite}}{\text{adjacent}} = \frac{\sin\theta}{\cos\theta}$&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="opposite-adjacent-hypotenuse-computation-formulas"&gt;Opposite, Adjacent, Hypotenuse Computation Formulas&lt;/h3&gt;&#10;&lt;p&gt;Given a trigonometric function value and one side, the other sides can be found:&lt;/p&gt;</description></item><item><title>About</title><link>https://blog.deltastudio.space/en/about/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://blog.deltastudio.space/en/about/</guid><description>&lt;h2 id="about-me"&gt;About Me&lt;/h2&gt;&#10;&lt;p&gt;A developer who loves technology, exploring the world of computer graphics and web development. I believe the best way to learn is by doing — recording and sharing knowledge along the way to deepen understanding.&lt;/p&gt;&#10;&lt;h2 id="learning-focus"&gt;Learning Focus&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;Three.js + GLSL + WebGPU&lt;/strong&gt; — Computer graphics, from foundational math to shader development&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;React + TypeScript&lt;/strong&gt; — Modern frontend engineering&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Web Art Effects&lt;/strong&gt; — Creative interactions and visual experience exploration&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="about-this-blog"&gt;About This Blog&lt;/h2&gt;&#10;&lt;p&gt;This blog is my learning notebook and tech sharing space, mainly covering:&lt;/p&gt;</description></item><item><title>Privacy Policy</title><link>https://blog.deltastudio.space/en/privacy/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://blog.deltastudio.space/en/privacy/</guid><description>&lt;p&gt;This policy explains how information is handled when you visit and use this site (blog.deltastudio.space, “the Site”). &lt;strong&gt;If you do not agree with this policy, please stop using the Site.&lt;/strong&gt;&lt;/p&gt;&#10;&lt;h2 id="article-1-scope"&gt;Article 1 Scope&lt;/h2&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;This policy applies to browsing all pages of the Site (Chinese and English).&lt;/li&gt;&#10;&lt;li&gt;The Site is a personal tech blog. &lt;strong&gt;It does not offer account registration, paid membership, or checkout.&lt;/strong&gt; Account/order clauses do not apply.&lt;/li&gt;&#10;&lt;li&gt;Read this together with other site notices (e.g. About). For personal information, this policy controls.&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;h2 id="article-2-operator-and-contact"&gt;Article 2 Operator and Contact&lt;/h2&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;Site name: Feynman&amp;rsquo;s Blog.&lt;/li&gt;&#10;&lt;li&gt;Operator: Feynman (individual).&lt;/li&gt;&#10;&lt;li&gt;URL: &lt;a href="https://blog.deltastudio.space/en/"&gt;https://blog.deltastudio.space/en/&lt;/a&gt;.&lt;/li&gt;&#10;&lt;li&gt;Contact: GitHub and other channels listed on the &lt;a href="https://blog.deltastudio.space/en/about/#contact"&gt;About page&lt;/a&gt;.&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;h2 id="article-3-what-we-collect"&gt;Article 3 What We Collect&lt;/h2&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;Local preferences (not uploaded)&lt;/strong&gt;&lt;br&gt;&#10;Theme (light/dark) and similar UI preferences may be stored in your browser &lt;code&gt;localStorage&lt;/code&gt; to restore settings on the next visit. &lt;strong&gt;They are not transmitted to this site&amp;rsquo;s server.&lt;/strong&gt;&lt;/p&gt;</description></item></channel></rss>