Three.js Eğitimi: Yeni Başlayanlar İçin Bir Rehber

İnteraktif görselleştirme, oyun veya web deneyimi mi yaratmak istiyorsunuz? Three.js, fikirlerinizi hayata geçirmenizi sağlar.

Efe Demir

Efe Demir

5 June 2025

Three.js Eğitimi: Yeni Başlayanlar İçin Bir Rehber

Three.js, web tarayıcılarında 3B grafikler oluşturmak için en popüler JavaScript kütüphanelerinden biridir. WebGL üzerine inşa edilmiştir ve düşük seviyeli WebGL öğrenmenize gerek kalmadan, bir web tarayıcısında animasyonlu 3B bilgisayar grafikleri oluşturma ve görüntüleme sürecini basitleştirir. İster etkileşimli görselleştirmeler, oyunlar veya sürükleyici web deneyimleri oluşturmak isteyin, Three.js fikirlerinizi hayata geçirmek için ihtiyacınız olan araçları sağlar.

Three.js geliştirmeye başlamadan önce, API test ihtiyaçlarınız için Postman'e alternatif olarak Apidog'u denemeyi düşünün. Apidog, API geliştirme, test etme ve dokümantasyon için güçlü özelliklere sahip, sezgisel bir arayüz sunar; üstelik birçok kullanıcının Postman'de can sıkıcı bulduğu özellik şişkinliği olmadan. API'lerle etkileşim kuran web uygulamaları geliştirirken mükemmel bir yardımcı araçtır.

button

Şimdi, Three.js yolculuğumuza başlayalım!

1. Ortamınızı Kurma

Kurulum

Three.js'yi projenize dahil etmenin birkaç yolu vardır:

Seçenek 1: npm Kullanımı (Önerilen)

npm install three

Ardından JavaScript dosyanıza içe aktarın:

import * as THREE from 'three';

Seçenek 2: CDN Kullanımı

Bunu HTML dosyanıza ekleyin:

<script src="https://cdn.jsdelivr.net/npm/three@0.157.0/build/three.min.js"></script>

Seçenek 3: Yerel olarak indirin ve dahil edin

Kütüphaneyi Three.js web sitesinden indirin ve HTML'nize dahil edin:

<script src="path/to/three.min.js"></script>

Proje Yapısı

Temel bir Three.js projesi için şunlara ihtiyacınız olacak:

project-folder/
├── index.html
├── style.css
└── script.js

index.html dosyanız şunları içermelidir:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>My Three.js App</title>
    <style>
        body { margin: 0; }
        canvas { display: block; }
    </style>
</head>
<body>
    <script src="https://cdn.jsdelivr.net/npm/three@0.157.0/build/three.min.js"></script>
    <script src="script.js"></script>
</body>
</html>

2. Temelleri Anlama

Three.js, anlaşılması gereken birkaç temel kavram üzerine çalışır:

Temel Bileşenler

  1. Sahne: Tüm nesnelerinizi, ışıklarınızı ve kameralarınızı barındıran bir kap olarak düşünün.
  2. Kamera: Sahnenin hangi bölümünün görünür olduğunu tanımlar (bakış açınız).
  3. Renderer: Kameranın gördüklerini ekranınıza çizer.
  4. Nesneler (Örgüler): Genellikle geometri ve malzemeden oluşan sahnenizdeki 3B nesneler.
  5. Işıklar: Sahneniz için aydınlatma kaynakları.

İlk Sahnenizi Oluşturma

Dönen bir küp oluşturmak için temel bir örnek:

// Sahneyi oluştur
const scene = new THREE.Scene();

// Bir kamera oluştur
const camera = new THREE.PerspectiveCamera(
    75,                                     // Görüş alanı
    window.innerWidth / window.innerHeight, // En boy oranı
    0.1,                                    // Yakın kırpma düzlemi
    1000                                    // Uzak kırpma düzlemi
);
camera.position.z = 5;

// Renderer'ı oluştur
const renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);

// Bir küp oluştur
const geometry = new THREE.BoxGeometry();
const material = new THREE.MeshBasicMaterial({ color: 0x00ff00 });
const cube = new THREE.Mesh(geometry, material);
scene.add(cube);

// Animasyon döngüsü
function animate() {
    requestAnimationFrame(animate);
    
    // Küpü döndür
    cube.rotation.x += 0.01;
    cube.rotation.y += 0.01;
    
    renderer.render(scene, camera);
}
animate();

3. Uygulamanızı Duyarlı Hale Getirme

Three.js uygulamanızın tüm cihazlarda iyi görünmesini sağlamak için pencere boyutlandırmayı işlemeniz gerekir:

// Pencere boyutlandırmayı işle
window.addEventListener('resize', () => {
    const width = window.innerWidth;
    const height = window.innerHeight;
    
    // Renderer'ı güncelle
    renderer.setSize(width, height);
    
    // Kamerayı güncelle
    camera.aspect = width / height;
    camera.updateProjectionMatrix();
});

4. Malzemeler ve Aydınlatma Ekleme

Temel sahneler sadece başlangıçtır. Görsel kaliteyi malzemeler ve ışıklarla geliştirelim:

Malzemeler

// Yansımalı standart malzeme
const material = new THREE.MeshStandardMaterial({
    color: 0x0088ff,       // Mavi renk
    roughness: 0.5,        // Bir miktar parlak
    metalness: 0.5,        // Bir miktar metalik
});

// Basit parlak yüzeyler için Phong malzemesi
const phongMaterial = new THREE.MeshPhongMaterial({
    color: 0xff0000,       // Kırmızı renk
    shininess: 100,        // Çok parlak
    specular: 0x111111     // Özel vurgu rengi
});

Işıklar

// Ortam ışığı ekle
const ambientLight = new THREE.AmbientLight(0x404040);
scene.add(ambientLight);

// Yön ışığı ekle (güneş gibi)
const directionalLight = new THREE.DirectionalLight(0xffffff, 1);
directionalLight.position.set(1, 1, 1);
scene.add(directionalLight);

// Nokta ışığı ekle (ampul gibi)
const pointLight = new THREE.PointLight(0xffffff, 1, 100);
pointLight.position.set(10, 10, 10);
scene.add(pointLight);

5. Farklı Geometriler Oluşturma

Three.js birçok yerleşik geometri ile birlikte gelir:

// Küre
const sphereGeometry = new THREE.SphereGeometry(1, 32, 32);
const sphere = new THREE.Mesh(sphereGeometry, material);
sphere.position.x = -3;
scene.add(sphere);

// Silindir
const cylinderGeometry = new THREE.CylinderGeometry(1, 1, 2, 32);
const cylinder = new THREE.Mesh(cylinderGeometry, material);
cylinder.position.x = 0;
scene.add(cylinder);

// Torus (donut)
const torusGeometry = new THREE.TorusGeometry(0.8, 0.3, 16, 100);
const torus = new THREE.Mesh(torusGeometry, material);
torus.position.x = 3;
scene.add(torus);

6. Three.js'de Metin Oluşturma

TextGeometry kullanarak sahnenize metin eklenebilir:

// İlk olarak, yazı tipini yükle
const loader = new THREE.FontLoader();
loader.load('https://threejs.org/examples/fonts/helvetiker_regular.typeface.json', function(font) {
    const textGeometry = new THREE.TextGeometry('Hello Three.js!', {
        font: font,
        size: 0.5,
        height: 0.1,
        curveSegments: 12,
        bevelEnabled: true,
        bevelThickness: 0.03,
        bevelSize: 0.02,
        bevelOffset: 0,
        bevelSegments: 5
    });
    
    const textMaterial = new THREE.MeshStandardMaterial({ color: 0xffff00 });
    const text = new THREE.Mesh(textGeometry, textMaterial);
    
    // Metni ortala
    textGeometry.computeBoundingBox();
    const textWidth = textGeometry.boundingBox.max.x - textGeometry.boundingBox.min.x;
    text.position.x = -textWidth / 2;
    
    scene.add(text);
});

7. Çizgiler Çizme

Tel kafesler veya yol görselleştirmesi için Three.js'de çizgiler oluşturabilirsiniz:

// Çizgi için noktalar oluştur
const points = [];
points.push(new THREE.Vector3(-2, 0, 0));
points.push(new THREE.Vector3(0, 2, 0));
points.push(new THREE.Vector3(2, 0, 0));

// Çizgi geometrisini oluştur
const lineGeometry = new THREE.BufferGeometry().setFromPoints(points);

// Malzeme oluştur
const lineMaterial = new THREE.LineBasicMaterial({ color: 0xffffff });

// Çizgiyi oluştur
const line = new THREE.Line(lineGeometry, lineMaterial);
scene.add(line);

8. Etkileşim ve Kontroller

Kullanıcıların 3B sahnenizle etkileşim kurmasına izin vermek için kontroller ekleyebilirsiniz:

// OrbitControls'ü içe aktar
import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js';

// Kontrolleri oluştur
const controls = new OrbitControls(camera, renderer.domElement);
controls.enableDamping = true; // Pürüzsüz sönümleme efekti ekle
controls.dampingFactor = 0.05;

// Animasyon döngüsünü güncelle
function animate() {
    requestAnimationFrame(animate);
    
    // Kontrolleri güncelle
    controls.update();
    
    renderer.render(scene, camera);
}

9. 3B Modelleri Yükleme

Blender gibi yazılımlarda oluşturulan modelleri içe aktarabilirsiniz:

import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js';

const loader = new GLTFLoader();
loader.load(
    'path/to/model.gltf',
    // Yüklendiğinde çağrılır
    function(gltf) {
        scene.add(gltf.scene);
    },
    // Yükleme sırasında çağrılır
    function(xhr) {
        console.log((xhr.loaded / xhr.total * 100) + '% yüklendi');
    },
    // Hata durumunda çağrılır
    function(error) {
        console.error('Bir hata oluştu', error);
    }
);

10. Hata Ayıklama ve Performans İpuçları

İstatistik Paneli

import Stats from 'three/examples/jsm/libs/stats.module.js';

const stats = new Stats();
document.body.appendChild(stats.dom);

function animate() {
    requestAnimationFrame(animate);
    stats.begin();
    
    // Animasyon kodunuz burada
    
    stats.end();
    renderer.render(scene, camera);
}

Performans İpuçları

  1. Geometry yerine BufferGeometry kullanın (kullanımdan kaldırılmıştır)
  2. Mümkün olduğunda malzemeleri ve geometrileri yeniden kullanın
  3. Daha iyi GPU kullanımı için renderer.powerPreference = 'high-performance' ayarlayın
  4. Kamera görünümü dışında kalan nesneleri gizlemek için Object3D.frustumCulled = true kullanın
  5. Mümkün olduğunda daha az çokgen kullanarak model karmaşıklığını optimize edin

Sonuç

Artık ortamınızı kurmaktan etkileşimli 3B sahneler oluşturmaya kadar Three.js'nin temellerini öğrendiniz. Bu sadece başlangıç; Three.js, çarpıcı 3B web deneyimleri oluşturmak için çok çeşitli özellikler sunar.

Bilginizi derinleştirmek için, resmi Three.js belgelerini ve örnekler galerisini keşfedin. Topluluk ayrıca forumlarda ve GitHub'da aktiftir ve her seviyedeki geliştiriciler için kaynaklar ve destek sağlar.

Unutmayın, öğrenmenin en iyi yolu denemektir. Basit projelerle başlayın ve yavaş yavaş daha karmaşık sahneler üzerinde çalışın. Pratik ve sabırla, kısa sürede etkileyici 3B web deneyimleri oluşturacaksınız!

Three.js ile mutlu kodlamalar!

button

Explore more

Fathom-R1-14B: Hindistan'dan Gelişmiş Yapay Zeka Muhakeme Modeli

Fathom-R1-14B: Hindistan'dan Gelişmiş Yapay Zeka Muhakeme Modeli

Yapay zeka hızla gelişiyor. FractalAIResearch/Fathom-R1-14B, 14.8 milyar parametreyle matematik ve genel akıl yürütmede başarılı.

5 June 2025

Mistral Code: İşletmeler için En Özelleştirilebilir Yapay Zeka Destekli Kodlama Asistanı

Mistral Code: İşletmeler için En Özelleştirilebilir Yapay Zeka Destekli Kodlama Asistanı

Mistral Code'u keşfedin: Kurumsal kullanıma özel, en özelleştirilebilir yapay zeka destekli kodlama asistanı.

5 June 2025

Claude Code'un 2025'te Yapay Zeka Kodlamasını Nasıl Dönüştürdüğü

Claude Code'un 2025'te Yapay Zeka Kodlamasını Nasıl Dönüştürdüğü

Claude Code, 2025'te yapay zeka destekli kodlamayı nasıl devrimleştiriyor? Özelliklerini, kullanımını ve Windsurf kısıtlamalarından sonra neden popüler olduğunu öğrenin. Geliştiriciler için okunması gereken!

5 June 2025

API Tasarım-Öncelikli Yaklaşımı Apidog'da Uygulayın

API'leri oluşturmanın ve kullanmanın daha kolay yolunu keşfedin