Kursy i Poradniki IT - Adrian Kowalski

Ten artykuł opisuje proces tworzenia prostego konfiguratora tekstu 3D za pomocą biblioteki Three.js. W naszym projekcie będziemy generować tekst 3D, zmieniać jego kolor oraz eksportować go do pliku STL.


Czym jest Three.js?

Three.js to popularna biblioteka JavaScript służąca do tworzenia grafiki 3D w przeglądarce. Umożliwia renderowanie za pomocą WebGL, co sprawia, że tworzenie zaawansowanych modeli 3D, animacji oraz efektów staje się dostępne nawet dla początkujących programistów.

Podstawowe pojęcia w grafice 3D

  1. Scena: To „świat”, w którym umieszczamy obiekty 3D.
  2. Kamera: Określa, z jakiej perspektywy użytkownik ogląda scenę.
  3. Światło: Oświetla obiekty, dzięki czemu są widoczne i bardziej realistyczne.
  4. Obiekty geometryczne: W naszym przypadku będzie to tekst 3D.
  5. Renderowanie: Proces przekształcania obiektów 3D w obraz widoczny na ekranie.

Krok 1: Przygotowanie projektu

1: Instalacja Node.js i npm
  1. Pobierz Node.js:
    • Odwiedź oficjalną stronę Node.js.
    • Pobierz i zainstaluj najnowszą wersję LTS (Long Term Support), ponieważ jest ona bardziej stabilna.
  2. Sprawdź instalację:
    • Po instalacji otwórz terminal lub wiersz poleceń i wpisz: node -v To polecenie zwróci wersję Node.js, np. v18.x.x.
    • Sprawdź wersję npm (Node Package Manager): npm -v Jeśli instalacja przebiegła pomyślnie, zobaczysz numer wersji npm, np. 9.x.x.

2: Tworzenie projektu i inicjalizacja npm
  1. Utwórz folder projektu i przejdź do niego w terminalu:
    • mkdir threejs-text-editor
    • cd threejs-text-editor
  2. Zainicjalizuj projekt npm:
    • Wpisz w terminalu: npm init -y
    • Polecenie to utworzy plik package.json, który będzie przechowywał informacje o zależnościach projektu.

3: Instalacja Three.js
  1. Zainstaluj bibliotekę Three.js:
    • Wpisz w terminalu: npm install three
    • Po instalacji biblioteka będzie dostępna w katalogu node_modules i zostanie dodana do pliku package.json jako zależność.

4: Instalacja i konfiguracja Vite

Vite to nowoczesny narzędzie budowania i uruchamiania aplikacji frontendowych, które zapewnia szybki start i gorące przeładowywanie (Hot Module Replacement – HMR).

  1. Zainstaluj Vite w swoim projekcie:
    • Wpisz w terminalu: npm install vite
  2. Utwórz plik startowy index.html:
    • W głównym folderze projektu utwórz plik index.html.
  3. Dodaj skrypt startowy w package.json:
    • Otwórz plik package.json i dodaj sekcję scripts: "scripts": { "dev": "vite", "build": "vite build", "preview": "vite preview" }
  4. Uruchom serwer deweloperski:
    • W terminalu wpisz: npm run dev
    • Vite uruchomi serwer lokalny, a w terminalu zobaczysz adres, np. http://localhost:5173.

Krok 2: Struktura projektu

Należy utworzyć pliki:

Po utworzeniu plików projekt powinien mieć poniższą strukturę:

threejs-text-editor/
├── index.html
├── src/
│   ├── script.js
│   ├── fonts/
│       ├── helvetiker_regular.typeface.json
├── node_modules/
├── package.json
├── package-lock.json

Krok 3: Uzupełnienie plików kodem

Plik index.html

Odpowiada za interfejs użytkownika, w którym użytkownik może wpisać tekst, wybrać kolor i generować tekst 3D.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Three.js 3D Text Editor</title>
    <style>
        body {
            margin: 0;
            overflow: hidden;
        }
        #ui {
            position: absolute;
            top: 10px;
            left: 10px;
            z-index: 100;
            background: rgba(255, 255, 255, 0.8);
            padding: 10px;
            border-radius: 5px;
        }
        #ui input, #ui button {
            margin: 5px 0;
        }
    </style>
</head>
<body>
    <div id="ui">
        <label for="textInput">Wprowadź tekst:</label>
        <input type="text" id="textInput" placeholder="Hello 3D!" />
        <br>
        <label for="colorPicker">Wybierz kolor:</label>
        <input type="color" id="colorPicker" value="#00ff00" />
        <br>
        <button id="updateText">Aktualizuj tekst</button>
        <button id="exportSTL">Eksportuj do STL</button>
    </div>
    <script type="module" src="./src/script.js"></script>
</body>
</html>

Plik script.js

Plik script.js obsługuje generowanie tekstu 3D, zmianę koloru i eksport modelu do pliku STL.

// Importujemy niezbędne moduły z Three.js
import * as THREE from 'three';
import { FontLoader } from 'three/examples/jsm/loaders/FontLoader.js';
import { TextGeometry } from 'three/examples/jsm/geometries/TextGeometry.js';
import { STLExporter } from 'three/examples/jsm/exporters/STLExporter.js';

// Inicjalizujemy scenę, kamerę i renderer
const scene = new THREE.Scene();
const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);
camera.position.z = 20;

// Renderer renderuje scenę w przeglądarce
const renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);

// Dodajemy światło, aby tekst był widoczny
const light = new THREE.DirectionalLight(0xffffff, 1);
light.position.set(10, 10, 10).normalize();
scene.add(light);

// Zmienna dla przechowywania aktualnego tekstu
let textMesh;
const fontLoader = new FontLoader();

// Domyślny kolor tekstu
let textColor = '#00ff00';

// Ładujemy font i tworzymy domyślny tekst
fontLoader.load('./src/fonts/helvetiker_regular.typeface.json', function (font) {
    createText('Hello 3D!', font, textColor);
});

// Funkcja tworzy tekst 3D na scenie
function createText(text, font, color) {
    // Usuwamy stary tekst, jeśli istnieje
    if (textMesh) scene.remove(textMesh);

    // Tworzymy geometrię tekstu
    const textGeometry = new TextGeometry(text, {
        font: font,
        size: 2,
        height: 1,
        bevelEnabled: true,
        bevelThickness: 0.2,
        bevelSize: 0.1,
    });

    // Tworzymy materiał z wybranym kolorem
    const material = new THREE.MeshPhongMaterial({ color: color });
    textMesh = new THREE.Mesh(textGeometry, material);

    // Ustawiamy pozycję tekstu
    textMesh.position.set(-text.length, 0, 0);
    scene.add(textMesh);
}

// Obsługa przycisku "Aktualizuj tekst"
document.getElementById('updateText').addEventListener('click', () => {
    const inputText = document.getElementById('textInput').value || 'Hello 3D!';
    const selectedColor = document.getElementById('colorPicker').value;

    // Aktualizujemy zmienną koloru
    textColor = selectedColor;

    // Ładujemy font i generujemy nowy tekst
    fontLoader.load('./src/fonts/helvetiker_regular.typeface.json', function (font) {
        createText(inputText, font, textColor);
    });
});

// Obsługa przycisku "Eksportuj do STL"
document.getElementById('exportSTL').addEventListener('click', () => {
    const exporter = new STLExporter();
    const stlData = exporter.parse(scene);

    // Tworzymy link do pobrania pliku STL
    const blob = new Blob([stlData], { type: 'application/octet-stream' });
    const link = document.createElement('a');
    link.href = URL.createObjectURL(blob);
    link.download = 'model.stl';
    link.click();
});

// Funkcja animacji (renderowanie w pętli)
function animate() {
    requestAnimationFrame(animate);
    renderer.render(scene, camera);
}
animate();

Opis kodu

  1. Tworzenie sceny:
    • Inicjalizujemy scenę, kamerę i renderer. Kamera jest ustawiona tak, by widok obejmował całą scenę.
  2. Tworzenie tekstu 3D:
    • Wykorzystujemy TextGeometry do generowania obiektu 3D na podstawie podanego tekstu i czcionki.
    • Kolor tekstu jest wybierany przez użytkownika za pomocą elementu <input type="color">.
  3. Zmiana tekstu i koloru:
    • Obsługujemy zdarzenie kliknięcia na przycisku „Aktualizuj tekst”. Pobieramy nowy tekst i kolor, a następnie generujemy tekst ponownie.
  4. Eksport do STL:
    • Eksportujemy obiekt 3D jako plik STL, który można pobrać na komputer.
  5. Renderowanie sceny:
    • Funkcja animate() renderuje scenę w pętli, zapewniając płynne wyświetlanie.

Wyniki:

Screen:

Video:
Model 3D:

Podsumowanie

Powyższy projekt pokazuje, jak łatwo wykorzystać Three.js do tworzenia i edycji prostych obiektów 3D w przeglądarce. Dodanie opcji zmiany koloru oraz eksportu do STL sprawia, że aplikacja jest bardziej interaktywna i użyteczna. Jeśli chcesz rozszerzyć funkcjonalność, możesz dodać:

  • Wybór innych czcionek,
  • Możliwość zmiany wymiarów tekstu,
  • Animacje tekstu.

Adrian Kowalski

Jestem doświadczonym PHP Developerem z pasją do tworzenia wydajnych i skalowalnych aplikacji webowych. Specjalizuję się w pracy z frameworkiem Symfony, a także integracją z bazami danych oraz API. Posiadam solidne doświadczenie w optymalizacji kodu i pracy w zespołach Agile. Moje projekty skupiają się na dostarczaniu nowoczesnych rozwiązań z dbałością o jakość kodu i bezpieczeństwo.

kowalskiadrian.pl

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *