HTML MASTER CLASS /// LEARN TAGS /// BUILD STRUCTURE /// SEMANTIC WEB /// HTML MASTER CLASS /// LEARN TAGS ///
Total XP: 0|💻 threejs XP: 0

Meshes & Transformations in Three.js 3D WebGL

Learn about Meshes & Transformations in this comprehensive Three.js 3D WebGL tutorial. Learn how to assemble Meshes, apply transformations (position, rotation, scale), and use Groups.

LOADING ENGINE...

Skill Matrix

UNLOCK NODES BY LEARNING NEW TAGS.

System Hub

Core AI logic.

Quick Quiz //

What is the primary danger of ignoring this AI concept?


Listen up. If you're building modern applications, understanding Meshes & Transformations in Three.js 3D WebGL is non-negotiable. This is where simple logic turns into intelligent behavior.

1Threejs meshes Part 1

You know what a Geometry is (the shape) and what a Material is (the skin). But you can

Look, here's the reality in production: if you don't fully grasp this, you're going to introduce massive bottlenecks or incorrect predictions. I've seen junior devs deploy models that hallucinate wildly because they missed this exact nuance. It's all about understanding the data pipeline and model parameters.

Let's break down the code. Notice how we're structuring this logic. We aren't just hacking things together; we're designing for scale and accuracy. If you mess up the inference loop or create new tensors every frame here, the runtime won't optimize it, and you'll get massive memory leaks. Always follow ML engineering best practices.

+
// scene.add(geometry); // ERROR!
// scene.add(material); // ERROR!
localhost:3000
Browser Preview
WebGL Output
3D Scene rendered. Objects: 4, Draw Calls: Optimized.

2Threejs meshes Part 2

To put an object in your scene, you must combine a Geometry and a Material into a Mesh.

Look, here's the reality in production: if you don't fully grasp this, you're going to introduce massive bottlenecks or incorrect predictions. I've seen junior devs deploy models that hallucinate wildly because they missed this exact nuance. It's all about understanding the data pipeline and model parameters.

Let's break down the code. Notice how we're structuring this logic. We aren't just hacking things together; we're designing for scale and accuracy. If you mess up the inference loop or create new tensors every frame here, the runtime won't optimize it, and you'll get massive memory leaks. Always follow ML engineering best practices.

+
const geometry = new THREE.BoxGeometry(1, 1, 1);
const material = new THREE.MeshBasicMaterial({ color: 0xff0000 });

const mesh = new THREE.Mesh(geometry, material);
scene.add(mesh);
localhost:3000
Browser Preview
WebGL Output
3D Scene rendered. Objects: 4, Draw Calls: Optimized.

3Threejs meshes Part 3

A Mesh is fundamentally the combination of which two things?

Look, here's the reality in production: if you don't fully grasp this, you're going to introduce massive bottlenecks or incorrect predictions. I've seen junior devs deploy models that hallucinate wildly because they missed this exact nuance. It's all about understanding the data pipeline and model parameters.

Let's break down the code. Notice how we're structuring this logic. We aren't just hacking things together; we're designing for scale and accuracy. If you mess up the inference loop or create new tensors every frame here, the runtime won't optimize it, and you'll get massive memory leaks. Always follow ML engineering best practices.

+
const mesh = new THREE.Mesh(???, ???);
localhost:3000
Browser Preview
WebGL Output
3D Scene rendered. Objects: 4, Draw Calls: Optimized.

4Threejs meshes Part 4

In React Three Fiber, the <mesh> tag acts just like new THREE.Mesh(). Any geometry or material you put inside it gets automatically attached!

Look, here's the reality in production: if you don't fully grasp this, you're going to introduce massive bottlenecks or incorrect predictions. I've seen junior devs deploy models that hallucinate wildly because they missed this exact nuance. It's all about understanding the data pipeline and model parameters.

Let's break down the code. Notice how we're structuring this logic. We aren't just hacking things together; we're designing for scale and accuracy. If you mess up the inference loop or create new tensors every frame here, the runtime won't optimize it, and you'll get massive memory leaks. Always follow ML engineering best practices.

+
<mesh>
  <boxGeometry />
  <meshStandardMaterial />
</mesh>
localhost:3000
Browser Preview
WebGL Output
3D Scene rendered. Objects: 4, Draw Calls: Optimized.

5Threejs meshes Part 5

Once you have a Mesh, you can move it around using its position property.

Look, here's the reality in production: if you don't fully grasp this, you're going to introduce massive bottlenecks or incorrect predictions. I've seen junior devs deploy models that hallucinate wildly because they missed this exact nuance. It's all about understanding the data pipeline and model parameters.

Let's break down the code. Notice how we're structuring this logic. We aren't just hacking things together; we're designing for scale and accuracy. If you mess up the inference loop or create new tensors every frame here, the runtime won't optimize it, and you'll get massive memory leaks. Always follow ML engineering best practices.

+
// Vanilla Three.js
mesh.position.x = 2;
mesh.position.y = 1;

// R3F
<mesh position={[2, 1, 0]}>
localhost:3000
Browser Preview
WebGL Output
3D Scene rendered. Objects: 4, Draw Calls: Optimized.

6Threejs meshes Part 6

You can also rotate the mesh. Note that Three.js uses Radians, not Degrees. Math.PI is 180 degrees. Math.PI / 2 is 90 degrees.

Look, here's the reality in production: if you don't fully grasp this, you're going to introduce massive bottlenecks or incorrect predictions. I've seen junior devs deploy models that hallucinate wildly because they missed this exact nuance. It's all about understanding the data pipeline and model parameters.

Let's break down the code. Notice how we're structuring this logic. We aren't just hacking things together; we're designing for scale and accuracy. If you mess up the inference loop or create new tensors every frame here, the runtime won't optimize it, and you'll get massive memory leaks. Always follow ML engineering best practices.

+
mesh.rotation.y = Math.PI / 2;
localhost:3000
Browser Preview
WebGL Output
3D Scene rendered. Objects: 4, Draw Calls: Optimized.

7Threejs meshes Part 7

In Three.js, rotations are calculated in Radians. What value represents a 180-degree rotation?

Look, here's the reality in production: if you don't fully grasp this, you're going to introduce massive bottlenecks or incorrect predictions. I've seen junior devs deploy models that hallucinate wildly because they missed this exact nuance. It's all about understanding the data pipeline and model parameters.

Let's break down the code. Notice how we're structuring this logic. We aren't just hacking things together; we're designing for scale and accuracy. If you mess up the inference loop or create new tensors every frame here, the runtime won't optimize it, and you'll get massive memory leaks. Always follow ML engineering best practices.

+
mesh.rotation.x = ???;
localhost:3000
Browser Preview
WebGL Output
3D Scene rendered. Objects: 4, Draw Calls: Optimized.

8Threejs meshes Part 8

Let

Look, here's the reality in production: if you don't fully grasp this, you're going to introduce massive bottlenecks or incorrect predictions. I've seen junior devs deploy models that hallucinate wildly because they missed this exact nuance. It's all about understanding the data pipeline and model parameters.

Let's break down the code. Notice how we're structuring this logic. We aren't just hacking things together; we're designing for scale and accuracy. If you mess up the inference loop or create new tensors every frame here, the runtime won't optimize it, and you'll get massive memory leaks. Always follow ML engineering best practices.

+
const App = () => {
  const meshRef = React.useRef();
  useFrame((state, delta) => {
    meshRef.current.rotation.x += delta;
    meshRef.current.rotation.y += delta;
  });
  return (
    <Canvas camera={{ position: [0, 0, 5] }}>
      <ambientLight intensity={1} />
      <mesh 
        ref={meshRef} 
        position={[2, 0, 0]} 
        scale={[1.5, 1.5, 1.5]}
      >
        <boxGeometry />
        <meshNormalMaterial />
      </mesh>
    </Canvas>
  );
};

render(<App />);
localhost:3000
Browser Preview
WebGL Output
3D Scene rendered. Objects: 4, Draw Calls: Optimized.

9Threejs meshes Part 9

You can group multiple meshes together using a THREE.Group (or <group> in R3F). If you move the group, all child meshes move with it!

Look, here's the reality in production: if you don't fully grasp this, you're going to introduce massive bottlenecks or incorrect predictions. I've seen junior devs deploy models that hallucinate wildly because they missed this exact nuance. It's all about understanding the data pipeline and model parameters.

Let's break down the code. Notice how we're structuring this logic. We aren't just hacking things together; we're designing for scale and accuracy. If you mess up the inference loop or create new tensors every frame here, the runtime won't optimize it, and you'll get massive memory leaks. Always follow ML engineering best practices.

+
<group position={[0, 5, 0]}>
  <mesh>{/* Car Body */}</mesh>
  <mesh>{/* Wheels */}</mesh>
</group>
localhost:3000
Browser Preview
WebGL Output
3D Scene rendered. Objects: 4, Draw Calls: Optimized.

10Threejs meshes Part 10

Let

Look, here's the reality in production: if you don't fully grasp this, you're going to introduce massive bottlenecks or incorrect predictions. I've seen junior devs deploy models that hallucinate wildly because they missed this exact nuance. It's all about understanding the data pipeline and model parameters.

Let's break down the code. Notice how we're structuring this logic. We aren't just hacking things together; we're designing for scale and accuracy. If you mess up the inference loop or create new tensors every frame here, the runtime won't optimize it, and you'll get massive memory leaks. Always follow ML engineering best practices.

+
const App = () => {
  const groupRef = React.useRef();
  useFrame((state, delta) => {
    groupRef.current.rotation.z -= delta;
  });
  return (
    <Canvas camera={{ position: [0, 0, 5] }}>
      <ambientLight intensity={1} />
      <group ref={groupRef}>
        <mesh position={[0, 0, 0]}>
          <sphereGeometry args={[0.5]} />
          <meshNormalMaterial />
        </mesh>
        <mesh position={[2, 0, 0]}>
          <boxGeometry args={[0.5, 0.5, 0.5]} />
          <meshNormalMaterial />
        </mesh>
      </group>
    </Canvas>
  );
};

render(<App />);
localhost:3000
Browser Preview
WebGL Output
3D Scene rendered. Objects: 4, Draw Calls: Optimized.

11Threejs meshes Part 11

Fantastic! You

Look, here's the reality in production: if you don't fully grasp this, you're going to introduce massive bottlenecks or incorrect predictions. I've seen junior devs deploy models that hallucinate wildly because they missed this exact nuance. It's all about understanding the data pipeline and model parameters.

Let's break down the code. Notice how we're structuring this logic. We aren't just hacking things together; we're designing for scale and accuracy. If you mess up the inference loop or create new tensors every frame here, the runtime won't optimize it, and you'll get massive memory leaks. Always follow ML engineering best practices.

+
// 📦 Meshes assembled!
localhost:3000
Browser Preview
WebGL Output
3D Scene rendered. Objects: 4, Draw Calls: Optimized.

?Frequently Asked Questions

Pascual Vila

Pascual Vila

Frontend Instructor // Code Syllabus

Continue Learning