Sử dụng dat.GUI để trải nghiệm dễ dàng hơn trong Three.js

Thư viện dat.GUI cho phép bạn tạo một giao diện đơn giản để bạn có thể thay đổi các biến trong code của bạn. Chúng ta sẽ tích hợp dat.GUI vào các ví dụ để có thể điều chỉnh vị trí, xoay các đối tượng, thay đổi các cấu hình khác, giúp bạn hiểu hơn

Thư viện dat.GUI cho phép bạn tạo một giao diện đơn giản để bạn có thể thay đổi các biến trong code của bạn. Chúng ta sẽ tích hợp dat.GUI vào các ví dụ để có thể điều chỉnh vị trí, xoay các đối tượng, thay đổi các cấu hình khác, giúp bạn hiểu hơn khi tìm hiểu từng khái niệm mới.

Trang GitHub chủ của thư viện là:

GitHub – dataarts/dat.gui: dat.gui is a lightweight controller library for JavaScript

Để sử dụng thư viện, chúng ta thêm thẻ script sau vào trang:

<scriptsrc="https://unpkg.com/[email protected]/build/dat.gui.min.js"></script>

Hoặc bạn cũng có thể import như sau:

import*as dat from'https://unpkg.com/[email protected]/build/dat.gui.module.js';

Chúng ta sẽ khai báo một đối tượng JS mà sẽ có các thuộc tính mà chúng ta muốn thay đổi sử dụng dat.GUI. Ví dụ chúng ta muốn thay đổi góc quay theo 3 trục của hình lập phương mà chúng ta đã tạo ở ví dụ trước:

this.controls ={
    rotationX:0,
    rotationY:0,
    rotationZ:0};

Tiếp theo, chúng ta sẽ truyền đối tượng này cho đối tượng dat.GUI mới và định nghĩa khoảng giá trị của các thuộc tính (từ 0 đến 360 độ). Chúng ta cũng định nghĩa nghiệp vụ khi giá trị các thuộc tính được thay đổi ở phương thức onChange: cập nhật lại các góc quay của hình lập phương và render lại. Các góc trong Three.js sử dụng đơn vị là radian nên chúng ta cũng có thêm phương thức convertDegToRad để chuyển từ độ sang radian.

createControlsGui(){const gui =newdat.GUI();
    gui.add(this.controls,'rotationX',0,360).onChange(value=>{this.cube.rotation.x =this.convertDegToRad(value);this.render();});
    gui.add(this.controls,'rotationY',0,360).onChange(value=>{this.cube.rotation.y =this.convertDegToRad(value);this.render();});
    gui.add(this.controls,'rotationZ',0,360).onChange(value=>{this.cube.rotation.z =this.convertDegToRad(value);this.render();});}convertDegToRad(deg){return deg * Math.PI/180;}

Toàn bộ code đầy đủ là (chapter-01/js/01-03.js):

import{
    Scene,
    PerspectiveCamera,
    WebGLRenderer,
    Color,
    BoxGeometry,
    MeshNormalMaterial,
    Mesh
}from'https://unpkg.com/[email protected]/build/three.module.js';import*as dat from'https://unpkg.com/[email protected]/build/dat.gui.module.js';classThreejsExample{constructor(canvas){this.scene =this.createScene();this.camera =this.createCamera();this.renderer =this.createRenderer(canvas);this.cube =this.createCube();this.scene.add(this.cube);this.render();this.controls ={
            rotationX:0,
            rotationY:0,
            rotationZ:0};this.createControlsGui();}createScene(){const scene =newScene();return scene;}createCamera(){const aspect = window.innerWidth / window.innerHeight;const camera =newPerspectiveCamera(45, aspect,0.1,1000);
        camera.position.set(-30,40,30);
        camera.lookAt(this.scene.position);return camera;}createRenderer(canvas){const renderer =newWebGLRenderer({
            canvas,
            antialias:true});
        renderer.setClearColor(newColor(0x000000));
        renderer.setSize(window.innerWidth, window.innerHeight);return renderer;}createCube(){const cubeGeometry =newBoxGeometry(6,6,6);const cubeMaterial =newMeshNormalMaterial();const cube =newMesh(cubeGeometry, cubeMaterial);
        cube.position.set(-4,3,0);return cube;}createControlsGui(){const gui =newdat.GUI();
        gui.add(this.controls,'rotationX',0,360).onChange(value=>{this.cube.rotation.x =this.convertDegToRad(value);this.render();});
        gui.add(this.controls,'rotationY',0,360).onChange(value=>{this.cube.rotation.y =this.convertDegToRad(value);this.render();});
        gui.add(this.controls,'rotationZ',0,360).onChange(value=>{this.cube.rotation.z =this.convertDegToRad(value);this.render();});}convertDegToRad(deg){return deg * Math.PI/180;}render(){this.renderer.render(this.scene,this.camera);}}newThreejsExample(document.querySelector('#webglOutput'));

Ví dụ 01.03 – Control GUI

Khi bạn chạy ví dụ trên, bạn sẽ thấy một giao diện đơn giản ở góc trên phải của màn hình mà bạn có thể điều khiển góc quay theo các trục X, Y, Z. Hãy tự mình xoay hình lập phương theo các góc khác nhau để cảm nhận tính 3D của cảnh.

01-03

Nguồn: viblo.asia

Bài viết liên quan

Tấn Công Ứng Dụng Web: Mối Đe Dọa Hàng Đầu – Phần 2

viết lại nội dung này ” Phát hiện các cuộc tấn công Cross Site Scripting (XSS)

AI Chatbot 2025: Xu Hướng Tất Yếu Cho Doanh Nghiệp Dẫn Đầu

Giới thiệu AI chatbots đã trải qua một hành trình đáng kể, từ những công cụ t

Tấn Công Ứng Dụng Web: Mối Đe Dọa Hàng Đầu – Phần 1

Tấn công web là gì? Ứng dụng web là các ứng dụng cung cấp dịch vụ cho người

SEO Mũ Trắng, Mũ Đen, Mũ Xám: Hiểu Biết và Lựa Chọn Phù Hợp

SEO Mũ Trắng, Mũ Đen, Mũ Xám: Hiểu Biết và Lựa Chọn Phù Hợp Trong kỷ nguyên s