Форум программистов, компьютерный форум, киберфорум
8Observer8
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  

Пример дружбы TypeScript с Three.js

Запись от 8Observer8 размещена 01.07.2019 в 01:46
Показов 5730 Комментарии 2
Метки three.js, typescript

Содержание блога

Пример я переписал на TypeScript из официальной документации, отсюда: https://threejs.org/docs/#manu... ng-a-scene

Песочница на TypeScript

Исходники в архиве

Исходники на GitHub

Исходные файлы


package.json

JSON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
{
    "name": "getting-started-with-threejs",
    "version": "1.0.0",
    "description": "",
    "main": "index.js",
    "scripts": {
        "debug": "tsc -p tsconfig.debug.json",
        "compile": "tsc -p tsconfig.release.json",
        "bundle": "browserify public/js/Program.js -o public/js/bundle.js",
        "minify": "uglifyjs public/js/bundle.js -o public/js/bundle.min.js",
        "release": "npm run compile && npm run bundle && npm run minify"
    },
    "keywords": [],
    "author": "",
    "license": "ISC",
    "dependencies": {
        "three": "^0.106.2"
    },
    "devDependencies": {
        "@types/requirejs": "^2.1.31"
    }
}
tsconfig.debug.json

JSON
1
2
3
{
    "extends": "./tsconfig.json"
}
tsconfig.release.json

JSON
1
2
3
4
5
6
7
{
    "extends": "./tsconfig.json",
    "compilerOptions": {
        "module": "commonjs",
        "sourceMap": false
    }
}
style.css

CSS
1
2
3
4
5
6
7
8
body {
    margin: 0;
}
 
canvas {
    width: 100%;
    height: 100%
}
index.html

PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<!DOCTYPE html>
<html lang="en">
 
<head>
    <meta charset="UTF-8">
 
    <title>Three.js - Getting Started</title>
 
    <link rel="stylesheet" href="css/style.css">
 
    <!-- Debug and Playground-Plunker Version -->
    <script data-main="js/RequireConfig"
        src="https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.6/require.min.js"></script>
 
    <!-- Release Version -->
    <!-- <script src="js/bundle.min.js"></script> -->
</head>
 
<body>
 
</body>
 
</html>
Game.ts

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
import * as THREE from "three";
 
export class Game
{
    private _cube: THREE.Mesh;
    private _renderer: THREE.WebGLRenderer;
    private _scene: THREE.Scene;
    private _camera: THREE.PerspectiveCamera;
 
    public constructor()
    {
        this._scene = new THREE.Scene();
 
        this._camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);
        this._camera.position.z = 5;
 
        this._renderer = new THREE.WebGLRenderer();
        this._renderer.setSize(window.innerWidth, window.innerHeight);
        document.body.appendChild(this._renderer.domElement);
 
        let geometry = new THREE.BoxGeometry(1, 1, 1);
        let material = new THREE.MeshBasicMaterial({ color: 0x00ff00 });
        this._cube = new THREE.Mesh(geometry, material);
        this._scene.add(this._cube);
    }
 
    public Animate(): void
    {
        requestAnimationFrame(() => this.Animate());
 
        this._cube.rotation.x += 0.1;
        this._cube.rotation.y += 0.1;
 
        this._renderer.render(this._scene, this._camera);
    }
}
Program.ts

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import { Game } from "./Game";
 
// Playground: https://next.plnkr.co/edit/YXLIamSsUH8k1E3r?preview
 
class Program
{
    public static Main(): void
    {
        let game = new Game();
        game.Animate();
    }
}
 
// Debug and Playground-Plunker Version
Program.Main();
 
// Release Version
// window.onload = () => Program.Main();
RequireConfig.ts

JavaScript
1
2
3
4
5
6
7
8
requirejs.config({
    baseUrl: "js",
    paths: {
        "three": "https://cdnjs.cloudflare.com/ajax/libs/three.js/106/three.min"
    }
});
 
requirejs(["Program"], (Program) => { });
launch.json

JSON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "type": "chrome",
            "request": "launch",
            "name": "Launch Chrome against localhost",
            "url": "http://localhost:8080",
            "webRoot": "${workspaceFolder}/public"
        }
    ]
}


В начале, стоит отметить, что есть корень проекта, где лежит файл package.json. В этом файле перечислены модули, которые нужно поставить:
JSON
1
2
3
4
5
6
7
8
{
    "dependencies": {
        "three": "^0.106.2"
    },
    "devDependencies": {
        "@types/requirejs": "^2.1.31"
    }
}
Ставятся эти два модуля одной командой выполненной из корня проекта:
npm install
Либо, кратко: npm i

Нужно установить глобально модуль typescript. Делается это один раз:

npm i typescript -g
Далее, нужно поставить локальный сервер. Я использую http-server. Ставится этот модуль глобально, один раз:

npm i http-server -g
Запускаем из консоли в корневой папке проекта локальный сервер:
http-server
Переходим в браузер и в адресной строке набираем:

localhost:8080
Запустится веб приложение.

Когда вы изменили код и решили перекомпилировать, то нужно ввести команду:

npm run debug
Переходите в браузер Chrome, открываете консоль разработчика (Ctrl+Shift+J), нажимаете правой кнопкой мыши по значку "Перегрузить" (в левом верхнем углу браузера - круговая стрелка), выбираете "Empty Cache and Hard Reload"

Попробуйте выполнить эту пошаговую инструкцию. Сообщите, какой шаг вызвал затруднение, или какой шаг инструкции содержит ошибку.
Метки three.js, typescript
Размещено в Без категории
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 2
Комментарии
  1. Старый комментарий
    Я тут немного прогнал, я прочитал, что проблема в строке "module": "commonjs", и добавлял-удалял ее в конфигах

    В tsconfig.release.json эту строку я удалил, но в релизе я не запускал и это не имеет значения, но эту строку я еще добавил в файл tsconfig.release.json и ввел команду npm run debug, вот после этого заработало
    Запись от ТабуретY размещена 01.07.2019 в 15:24 ТабуретY вне форума
  2. Старый комментарий
    Дело в том, что чтобы не было в файле "tsconfig.release.json" - это никак не должно влиять на запуск с файлом "tsconfig.debug.json". Команда "npm run debug" запускает файл "tsconfig.debug.json" и к файлу "tsconfig.release.json" не имеет отношения.

    Теперь я напишу инструкцию, как собрать программу в Release. В релизе все полученные в результате компиляции js-файлы будут собранный в один bundle.js файл с помощью Browserify, а затем этот файл будет сжат в минимальную версию, в файл bundle.min.js с помощью UglifyJS. Один файл быстрее загружается в браузер, чем много файлов. Минимизированный файл - это файл в котором удалены комментарии, удалены переносы строк, сокращены имена переменных, чтобы размер его стал минимальным.

    Нужно глобально один раз поставить Browserify и UglifyJS одной командой:

    npm i browserify uglifyjs -g
    Откройте файл "Program.ts". Вы увидите следующие строки:

    JavaScript
    1
    2
    3
    4
    5
    
    // Debug and Playground-Plunker Version
    Program.Main();
     
    // Release Version
    // window.onload = () => Program.Main();
    Нужно закомментировать первую и закомментировать вторую, вот так:

    JavaScript
    1
    2
    3
    4
    5
    
    // Debug and Playground-Plunker Version
    // Program.Main();
     
    // Release Version
    window.onload = () => Program.Main();
    Откройте файл "index.html". Вы увидите следующие строки:

    HTML5
    1
    2
    3
    4
    5
    6
    
        <!-- Debug and Playground-Plunker Version -->
        <script data-main="js/RequireConfig"
            src="https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.6/require.min.js"></script>
     
        <!-- Release Version -->
        <!-- <script src="js/bundle.min.js"></script> -->
    Нужно закомментировать первую и закомментировать вторую, вот так:

    HTML5
    1
    2
    3
    4
    5
    6
    
        <!-- Debug and Playground-Plunker Version -->
        <!-- <script data-main="js/RequireConfig"
            src="https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.6/require.min.js"></script> -->
     
        <!-- Release Version -->
        <script src="js/bundle.min.js"></script>
    Соберите Release версию командой:

    npm run release
    Перейдите в браузер Chrome, откройте консоль разработчика (Ctrl+Shift+J), нажмите правой кнопкой мыши по значку "Перегрузить" (в левом верхнем углу браузера - круговая стрелка), выбираете "Empty Cache and Hard Reload".

    На открытой справа панели разработчика выберите Network. Вы должны увидеть, что был загружен файл bundle.min.js
    Запись от 8Observer8 размещена 01.07.2019 в 16:00 8Observer8 вне форума
 
Новые блоги и статьи
Нейросеть на алгоритме "эстафета хвоста" как перспектива.
Hrethgir 06.05.2026
На десерт, когда запущу сервер. Статья тут https:/ / habr. com/ ru/ articles/ 1030914/ . Автор я сам, нейросеть только помогает в вопросах которые мне не известны - не знаю людей которые знали-бы. . .
Асинхронный приём данных из COM-порта
Argus19 01.05.2026
Асинхронный приём данных из COM-порта Купил на aliexpress термопринтер QR701. Он оказался странным. Поключил к Arduino Nano. Был очень удивлён. Наотрез отказывается печатать русские буквы. Чтобы. . .
попытка написать игровой сервер на C++
pyirrlicht 29.04.2026
попытка написать игровой сервер на плюсах с открытым бесконечным миром. возможно получится прикрутить интерпретатор питон для кастомизации игровой логики. что есть на текущий момент:. . .
Контроль уникальности выбранного документа-основания при изменении реквизита
Maks 28.04.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРемонтСпецтехники", разработанного в КА2. Задача: уведомлять пользователя, если указанная заявка (документ-основание). . .
Благородство как наказание
Maks 24.04.2026
У хорошего человека отношения с женщинами всегда складываются трудно. А я человек хороший. Заявляю без тени смущения, потому что гордиться тут нечем. От хорошего человека ждут соответствующего. . .
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2. Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru