<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>3D on Feynman's Blog</title><link>https://blog.deltastudio.space/en/categories/3d/</link><description>Recent content in 3D on Feynman's Blog</description><generator>Hugo</generator><language>en-US</language><lastBuildDate>Mon, 31 Aug 2026 12:00:00 +0800</lastBuildDate><atom:link href="https://blog.deltastudio.space/en/categories/3d/index.xml" rel="self" type="application/rss+xml"/><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>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>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>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>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>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></channel></rss>