<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Three.js Creation Diary on Feynman's Blog</title><link>/en/series/threejs-creation-diary/</link><description>Recent content in Three.js Creation Diary 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="/en/series/threejs-creation-diary/index.xml" rel="self" type="application/rss+xml"/><item><title>12 | Noise Functions</title><link>/en/posts/threejs-noise/</link><pubDate>Mon, 31 Aug 2026 12:00:00 +0800</pubDate><guid>/en/posts/threejs-noise/</guid><description>&lt;blockquote class="blockquote-regular"&gt;
 &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;

&lt;/blockquote&gt;
&lt;p&gt;&lt;img src="/images/2026-07-07_series_threejs-creation-diary/12_noise/demo.gif" alt="Running effect: Noise function demo"&gt;&lt;/p&gt;
&lt;h2 id="01-learning-objectives"&gt;01 Learning Objectives&lt;/h2&gt;
&lt;p&gt;This lesson focuses on noise function principles and practice:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Understand the core differences between Perlin Noise and Simplex Noise&lt;/li&gt;
&lt;li&gt;Master FBM (Fractal Brownian Motion) principles and applications&lt;/li&gt;
&lt;li&gt;Learn to create organic effects with noise (clouds, terrain, fire)&lt;/li&gt;
&lt;li&gt;Understand vertex deformation using noise in vertex shaders&lt;/li&gt;
&lt;li&gt;Master two ways to animate noise (moving sample point / changing frequency)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="02-what-is-noise--continuous-pseudorandom-function"&gt;02 What Is Noise — Continuous Pseudorandom Function&lt;/h2&gt;
&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>/en/posts/threejs-glsl-math/</link><pubDate>Tue, 25 Aug 2026 12:00:00 +0800</pubDate><guid>/en/posts/threejs-glsl-math/</guid><description>&lt;blockquote class="blockquote-regular"&gt;
 &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;

&lt;/blockquote&gt;
&lt;h2 id="01-learning-objectives"&gt;01 Learning Objectives&lt;/h2&gt;
&lt;p&gt;This lesson focuses on practical applications of GLSL math functions:&lt;/p&gt;</description></item><item><title>07 | Scene Graph and Transformations</title><link>/en/posts/threejs-scene-graph/</link><pubDate>Fri, 24 Jul 2026 12:00:00 +0800</pubDate><guid>/en/posts/threejs-scene-graph/</guid><description>&lt;blockquote class="blockquote-regular"&gt;
 &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;

&lt;/blockquote&gt;
&lt;p&gt;&lt;img src="/images/2026-07-07_series_threejs-creation-diary/07_scene-graph/demo.png" alt="Demo: Solar System"&gt;&lt;/p&gt;
&lt;h2 id="01-learning-objectives"&gt;01 Learning Objectives&lt;/h2&gt;
&lt;p&gt;This lesson focuses on Three.js scene graph and transform system:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Understand the scene graph tree structure&lt;/li&gt;
&lt;li&gt;Master parent-child relationships and transform inheritance&lt;/li&gt;
&lt;li&gt;Distinguish local versus world coordinate systems&lt;/li&gt;
&lt;li&gt;Learn Object3D grouping management&lt;/li&gt;
&lt;li&gt;Master scene.traverse() traversal&lt;/li&gt;
&lt;li&gt;Learn AxesHelper / GridHelper debugging&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="02-scene-graph-tree-structure"&gt;02 Scene Graph Tree Structure&lt;/h2&gt;
&lt;h3 id="what-is-a-scene-graph"&gt;What is a Scene Graph&lt;/h3&gt;
&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>/en/posts/threejs-textures/</link><pubDate>Thu, 23 Jul 2026 12:00:00 +0800</pubDate><guid>/en/posts/threejs-textures/</guid><description>&lt;blockquote class="blockquote-regular"&gt;
 &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;

&lt;/blockquote&gt;
&lt;p&gt;&lt;img src="/images/2026-07-07_series_threejs-creation-diary/06_textures/demo.png" alt="Demo: Textures and Mapping"&gt;&lt;/p&gt;
&lt;h2 id="01-learning-objectives"&gt;01 Learning Objectives&lt;/h2&gt;
&lt;p&gt;This lesson focuses on Three.js texture and mapping system:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Master TextureLoader for loading image textures&lt;/li&gt;
&lt;li&gt;Understand UV coordinates and texture mapping&lt;/li&gt;
&lt;li&gt;Learn to control texture repeat, offset, and wrap&lt;/li&gt;
&lt;li&gt;Master CubeTextureLoader for skybox loading&lt;/li&gt;
&lt;li&gt;Master environment maps (envMap) and reflections&lt;/li&gt;
&lt;li&gt;Understand RGBELoader for HDRI environment maps&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="02-texture-basics"&gt;02 Texture Basics&lt;/h2&gt;
&lt;h3 id="what-is-a-texture"&gt;What is a Texture&lt;/h3&gt;
&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>/en/posts/threejs-cameras/</link><pubDate>Sun, 19 Jul 2026 12:00:00 +0800</pubDate><guid>/en/posts/threejs-cameras/</guid><description>&lt;blockquote class="blockquote-regular"&gt;
 &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;

&lt;/blockquote&gt;
&lt;p&gt;&lt;img src="/images/2026-07-07_series_threejs-creation-diary/05_cameras/demo.png" alt="Demo: Perspective vs Orthographic camera comparison"&gt;&lt;/p&gt;
&lt;h2 id="01-learning-objectives"&gt;01 Learning Objectives&lt;/h2&gt;
&lt;p&gt;This lesson focuses on Three.js cameras and controls:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Distinguish PerspectiveCamera and OrthographicCamera&lt;/li&gt;
&lt;li&gt;Master OrbitControls configuration&lt;/li&gt;
&lt;li&gt;Understand camera parameters (fov, aspect, near, far)&lt;/li&gt;
&lt;li&gt;Learn camera switching and parameter adjustment&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="02-perspective-vs-orthographic-camera"&gt;02 Perspective vs Orthographic Camera&lt;/h2&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Feature&lt;/th&gt;
					&lt;th&gt;Perspective Camera&lt;/th&gt;
					&lt;th&gt;Orthographic Camera&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;Perspective&lt;/td&gt;
					&lt;td&gt;Near-far scale&lt;/td&gt;
					&lt;td&gt;Uniform scale&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Light convergence&lt;/td&gt;
					&lt;td&gt;Diverges from a point&lt;/td&gt;
					&lt;td&gt;Parallel (no convergence)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Frustum shape&lt;/td&gt;
					&lt;td&gt;Truncated pyramid&lt;/td&gt;
					&lt;td&gt;Rectangular box&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Use case&lt;/td&gt;
					&lt;td&gt;3D games, realistic scenes&lt;/td&gt;
					&lt;td&gt;CAD, 2D games, UI&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&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;/**
&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
&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;&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.
&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;&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)
&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
&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
&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
&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
&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;
&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;
&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;
&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;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&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;&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
&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;&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.
&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;&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)
&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
&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
&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
&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;&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
&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;
&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;
&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;
&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
&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
&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
&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
&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
&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
&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;
&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;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Parameter&lt;/th&gt;
					&lt;th&gt;Meaning&lt;/th&gt;
					&lt;th&gt;Perspective&lt;/th&gt;
					&lt;th&gt;Orthographic&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;FOV&lt;/td&gt;
					&lt;td&gt;Field of view angle&lt;/td&gt;
					&lt;td&gt;30°-120°&lt;/td&gt;
					&lt;td&gt;N/A&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;aspect&lt;/td&gt;
					&lt;td&gt;Aspect ratio&lt;/td&gt;
					&lt;td&gt;width/height&lt;/td&gt;
					&lt;td&gt;width/height&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;near&lt;/td&gt;
					&lt;td&gt;Near clipping plane&lt;/td&gt;
					&lt;td&gt;Closer hidden&lt;/td&gt;
					&lt;td&gt;Closer hidden&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;far&lt;/td&gt;
					&lt;td&gt;Far clipping plane&lt;/td&gt;
					&lt;td&gt;Farther hidden&lt;/td&gt;
					&lt;td&gt;Farther hidden&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;frustumSize&lt;/td&gt;
					&lt;td&gt;Visible range height&lt;/td&gt;
					&lt;td&gt;N/A&lt;/td&gt;
					&lt;td&gt;Controls visible range&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="fov-and-perspective-distortion"&gt;FOV and Perspective Distortion&lt;/h3&gt;
&lt;ul&gt;
&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;
&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;
&lt;/ul&gt;
&lt;h3 id="nearfar-clipping-planes"&gt;Near/Far Clipping Planes&lt;/h3&gt;
&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>/en/posts/threejs-lights/</link><pubDate>Fri, 17 Jul 2026 10:00:00 +0800</pubDate><guid>/en/posts/threejs-lights/</guid><description>&lt;blockquote class="blockquote-regular"&gt;
 &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;

&lt;/blockquote&gt;
&lt;p&gt;&lt;img src="/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;
&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;
&lt;h2 id="01-learning-objectives"&gt;01 Learning Objectives&lt;/h2&gt;
&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>/en/posts/threejs-materials/</link><pubDate>Thu, 16 Jul 2026 10:00:00 +0800</pubDate><guid>/en/posts/threejs-materials/</guid><description>&lt;blockquote class="blockquote-regular"&gt;
 &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;

&lt;/blockquote&gt;
&lt;h2 id="01-learning-objectives"&gt;01 Learning Objectives&lt;/h2&gt;
&lt;p&gt;This lesson focuses on the Three.js material system:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Distinguish 6 material types and their use cases&lt;/li&gt;
&lt;li&gt;Understand PBR material roughness and metalness parameters&lt;/li&gt;
&lt;li&gt;Master environment mapping (CubeTexture) for reflection effects&lt;/li&gt;
&lt;li&gt;Understand normal mapping principles and usage&lt;/li&gt;
&lt;li&gt;Learn to use TextureLoader for external texture loading&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="02-material-types-comparison"&gt;02 Material Types Comparison&lt;/h2&gt;
&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>/en/posts/threejs-primitives/</link><pubDate>Fri, 10 Jul 2026 10:00:00 +0800</pubDate><guid>/en/posts/threejs-primitives/</guid><description>&lt;blockquote class="blockquote-regular"&gt;
 &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;

&lt;/blockquote&gt;
&lt;h2 id="01-learning-objectives"&gt;01 Learning Objectives&lt;/h2&gt;
&lt;p&gt;This lesson focuses on Three.js built-in geometries:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Master the constructors and parameters of 5 basic geometries&lt;/li&gt;
&lt;li&gt;Understand the relationship between segments and vertex count&lt;/li&gt;
&lt;li&gt;Learn to combine multiple primitives into complex objects&lt;/li&gt;
&lt;li&gt;Understand Wireframe visualization principles&lt;/li&gt;
&lt;li&gt;Learn procedural texture generation (Canvas)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="02-the-nature-of-geometries"&gt;02 The Nature of Geometries&lt;/h2&gt;
&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>/en/posts/threejs-project-architecture/</link><pubDate>Tue, 07 Jul 2026 10:00:00 +0800</pubDate><guid>/en/posts/threejs-project-architecture/</guid><description>&lt;blockquote class="blockquote-regular"&gt;
 &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;

&lt;/blockquote&gt;
&lt;p&gt;&lt;img src="/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;
&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;
&lt;h2 id="01-learning-objectives"&gt;01 Learning Objectives&lt;/h2&gt;
&lt;p&gt;This lesson builds a complete Three.js project from scratch:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Set up Vite + TypeScript + Three.js project scaffold&lt;/li&gt;
&lt;li&gt;Understand the responsibilities of Scene / Camera / Renderer&lt;/li&gt;
&lt;li&gt;Master requestAnimationFrame + delta time animation loop&lt;/li&gt;
&lt;li&gt;Learn window resize handling and pixel ratio settings&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="02-the-threejs-trio"&gt;02 The Three.js Trio&lt;/h2&gt;
&lt;p&gt;Everything in Three.js starts with three objects:&lt;/p&gt;</description></item></channel></rss>