Web Sayfasına 3D Nesne Ekleme (Three.js)

Konuyu başlatankyr karaca·
Yanıt
0
Görüntülenme
1
Oy
1
Son yanıt
Henüz yok
1 görüntülenme

Web Sayfasına 3D Nesne Ekleme (Three.js)

Modern tarayıcılar, WebGL (Web Graphics Library) dediğimiz düşük seviyeli bir API sayesinde ekran kartının (GPU) gücünü kullanabilir. Ancak doğrudan WebGL ile bir kare çizmek bile sayfalarca karmaşık matematiksel kod gerektirir. İşte Three.js, bu karmaşayı sadeleştiren, bize "Sahneye bir küp ekle" deme lüksü tanıyan muazzam bir kütüphanedir.

Nasıl Kulanılır ?

  • Sahne (Scene): Her şeyin içinde bulunduğu "evren". Objeleri, ışıkları ve arka planı buraya eklersiniz.
  • Kamera (Camera): Dünyayı nereden izliyoruz? En yaygın olanı PerspectiveCamera'dır; gerçek hayat gibi uzaklaşan nesneleri küçük gösterir.
  • İşleyici (Renderer): Sahneyi ve kamerayı alıp, saniyede 60 kez ekranın piksellerine (Canvas) basan motordur.

Nesne Yapısı: Mesh

Ekranda gördüğünüz her 3D model (bir araba, bir küp veya bir karakter) aslında bir Mesh'tir. Bir Mesh ise iki bileşenin birleşmesiyle oluşur:

  • Geometri (Geometry) Nesnenin iskeletidir. Üç boyutlu uzaydaki noktaların (vertex) ve bu noktaları birleştiren yüzeylerin matematiksel verisidir. Three.js bize hazır geometriler sunar: BoxGeometry (Küp), SphereGeometry (Küre) gibi.

  • Materyal (Material) Nesnenin derisidir. "Bu nesne ışığı yansıtıyor mu?", "Rengi ne?", "Üzerinde bir doku (texture) var mı?" sorularının cevabıdır.

Işıklandırma

Three.js'te varsayılan olarak her yer zifiri karanlıktır. Eğer MeshStandardMaterial gibi ışığa duyarlı bir materyal kullandıysanız, sahneye ışık eklemezseniz objeniz siyah görünecektir.

  • AmbientLight : Her şeyi eşit aydınlatır, gölge oluşturmaz (Dolgu ışığı).
  • DirectionalLight : Güneş gibidir. Belirli bir yönden paralel ışınlar gönderir.
  • PointLight : Bir ampul gibidir. Tek bir noktadan her yöne ışık saçar.

Animasyon

Bir 3D sahneyi "canlı" kılan şey, onun statik bir resim değil, sürekli güncellenen bir yapı olmasıdır. requestAnimationFrame kullanarak bir döngü yaratırız. Bu döngüde objenin rotasyonunu değiştirip renderer'a "tekrar çiz" deriz.

Three.js öğrenmek sadece kod yazmak değil, aynı zamanda ışık, gölge ve derinlik ile oynamayı öğrenmektir. Web sitenize bir 3D öğe eklediğinizde, kullanıcıya sadece bilgi değil, bir deneyim sunarsınız.

ÖRNEK KOD PARÇASI

<html lang="tr">
<head>
    <meta charset="UTF-8">
    <title>Three.js İlk Projem</title>
    <style>
        body { margin: 0; }
        canvas { display: block; } /* Scrollbar oluşmasını engeller */
    </style>
</head>
<body>

    <script type="importmap">
        {
            "imports": {
                "three": "https://unpkg.com/three@0.160.0/build/three.module.js"
            }
        }
    </script>

    <script type="module">
        import * as THREE from 'three';

        // 1. SAHNE (EVREN)
        const scene = new THREE.Scene();

        // 2. KAMERA (GÖZ)
        // PerspectiveCamera(Bakış Açısı, En-Boy Oranı, Yakın Kesim, Uzak Kesim)
        const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);
        camera.position.z = 5; // Kamerayı küpten biraz uzaklaştırıyoruz

        // 3. RENDERER (MOTOR)
        const renderer = new THREE.WebGLRenderer();
        renderer.setSize(window.innerWidth, window.innerHeight);
        document.body.appendChild(renderer.domElement); // Canvas'ı sayfaya ekle

        // 4. NESNE OLUŞTURMA (MESH)
        // Geometri (Şekil) + Materyal (Doku) = Mesh
        const geometry = new THREE.BoxGeometry(1, 1, 1); // 1x1x1 boyutunda küp
        const material = new THREE.MeshBasicMaterial({ color: 0x00ff00 }); // Yeşil renk
        const cube = new THREE.Mesh(geometry, material);
        scene.add(cube); // Küpü sahneye ekle

        // 5. ANİMASYON DÖNGÜSÜ
        function animate() {
            requestAnimationFrame(animate);

            // Küpü her karede biraz döndür
            cube.rotation.x += 0.01;
            cube.rotation.y += 0.01;

            // Sahneyi kameradan bakarak çiz
            renderer.render(scene, camera);
        }

        animate();
    </script>
</body>
</html>```
0 yanıt1

Konuyu Yanıtla

Markdown destekler · Alıntı, kod, liste kullanabilirsiniz

Konuyu yanıtlamak için giriş yapmalısınız.

Bu konuda yer alanlar

Bu gönderinin yazarı ve yorum yazan üyeler (yalnızca bu konu).