Форум программистов, компьютерный форум, киберфорум
Программирование графики
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.88/58: Рейтинг темы: голосов - 58, средняя оценка - 4.88
9933 / 2936 / 494
Регистрация: 05.10.2013
Сообщений: 7,966
Записей в блоге: 227

Проекты на Three.js и Babylon.js

11.01.2018, 00:34. Показов 14871. Ответов 53

Студворк — интернет-сервис помощи студентам
Предлагаю делиться здесь проектами/примерами на Three.js и Babylon.js

Для затравки выложу примеры из начальных официальных туториалов.

Three.js



Официальный начальный туториал на русском по Three.js: Основы. На данный момент актуальна версия Three.js 0.182.0 от 10 декабря 2025 года.

Пример из официального туториала с небольшими изменениями на Three.js 0.182.0 в песочнице Plunker: https://plnkr.co/edit/QUrQ1I6rh8ZBN9BS

Исходники примера:

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
24
25
<!DOCTYPE html>
 
<html>
 
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Getting started in Three.js</title>
</head>
 
<body>
    <canvas id="renderCanvas" width="300" height="300"></canvas>
 
    <script type="importmap">
        {
            "imports": {
                "three": "https://cdn.jsdelivr.net/npm/three@0.182.0/build/three.module.min.js"
            }
        }
    </script>
 
    <script type="module" src="./js/index.js"></script>
</body>
 
</html>
js/index.js

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
import * as THREE from "three";
 
function main() {
    const canvas = document.querySelector("#renderCanvas");
    const renderer = new THREE.WebGLRenderer({ antialias: true, canvas });
    renderer.setSize(canvas.width, canvas.height);
 
    const fov = 75;
    const aspect = canvas.width / canvas.height;
    const near = 0.1;
    const far = 10;
    const camera = new THREE.PerspectiveCamera(fov, aspect, near, far);
    camera.position.z = 2;
 
    const scene = new THREE.Scene();
 
    const boxWidth = 1;
    const boxHeight = 1;
    const boxDepth = 1;
    const geometry = new THREE.BoxGeometry(boxWidth, boxHeight, boxDepth);
 
    const material = new THREE.MeshBasicMaterial({ color: 0x44aa88 }); // greenish blue
 
    const cube = new THREE.Mesh(geometry, material);
    scene.add(cube);
 
    renderer.render(scene, camera);
}
 
main();
Пример на старой версии Three.js 89


Демка в песочнице Plunker

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
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
<!DOCTYPE html>
<html lang="en">
 
<head>
    <meta charset="UTF-8">
    <title>Three.js - Getting Started</title>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/89/three.min.js"></script>
 
    <style>
        body {
            margin: 0;
        }
 
        canvas {
            width: 100%;
            height: 100%
        }
    </style>
</head>
 
<body>
    <script>
        var scene = new THREE.Scene();
        var camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);
 
        var renderer = new THREE.WebGLRenderer();
        renderer.setSize(window.innerWidth, window.innerHeight);
        document.body.appendChild(renderer.domElement);
 
        var geometry = new THREE.BoxGeometry(1, 1, 1);
        var material = new THREE.MeshBasicMaterial({ color: 0x00ff00 });
        var cube = new THREE.Mesh(geometry, material);
        scene.add(cube);
 
        camera.position.z = 5;
 
        var animate = function ()
        {
            requestAnimationFrame(animate);
 
            cube.rotation.x += 0.1;
            cube.rotation.y += 0.1;
 
            renderer.render(scene, camera);
        };
 
        animate();
    </script>
</body>
 
</html>


Babylon.js



Getting Started (Babylon.js)

Пример со старой версий Babylon.js 2.5.0 в песочнице Plunker. На начало 2026 года актуальна версия Babylon.js 8.45.4

Исходники

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
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
<!DOCTYPE html>
<html lang="en">
 
<head>
    <meta charset="UTF-8">
    <title>Babylon.js - Getting Started</title>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/babylonjs/2.5.0/babylon.js"></script>
 
    <style>
        html,
        body {
            overflow: hidden;
            width: 100%;
            height: 100%;
            margin: 0;
            padding: 0;
        }
 
        #renderCanvas {
            width: 100%;
            height: 100%;
            touch-action: none;
        }
    </style>
</head>
 
<body>
    <canvas id="renderCanvas"></canvas>
 
    <script>
        window.addEventListener('DOMContentLoaded', function ()
        {
            // get the canvas DOM element
            var canvas = document.getElementById('renderCanvas');
 
            // load the 3D engine
            var engine = new BABYLON.Engine(canvas, true);
 
            // createScene function that creates and return the scene
            var createScene = function ()
            {
                // create a basic BJS Scene object
                var scene = new BABYLON.Scene(engine);
 
                // create a FreeCamera, and set its position to (x:0, y:5, z:-10)
                var camera = new BABYLON.FreeCamera('camera1', new BABYLON.Vector3(0, 5, -10), scene);
 
                // target the camera to scene origin
                camera.setTarget(BABYLON.Vector3.Zero());
 
                // attach the camera to the canvas
                camera.attachControl(canvas, false);
 
                // create a basic light, aiming 0,1,0 - meaning, to the sky
                var light = new BABYLON.HemisphericLight('light1', new BABYLON.Vector3(0, 1, 0), scene);
 
                // create a built-in "sphere" shape; its constructor takes 5 params: name, width, depth, subdivisions, scene
                var sphere = BABYLON.Mesh.CreateSphere('sphere1', 16, 2, scene);
 
                // move the sphere upward 1/2 of its height
                sphere.position.y = 1;
 
                // create a built-in "ground" shape; its constructor takes the same 5 params as the sphere's one
                var ground = BABYLON.Mesh.CreateGround('ground1', 6, 6, 2, scene);
 
                // return the created scene
                return scene;
            }
 
            // call the createScene function
            var scene = createScene();
 
            // run the render loop
            engine.runRenderLoop(function ()
            {
                scene.render();
            });
 
            // the canvas/window resize event handler
            window.addEventListener('resize', function ()            
            {
                engine.resize();
            });
        });
    </script>
</body>
 
</html>
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
11.01.2018, 00:34
Ответы с готовыми решениями:

Ошибка при создании проекта "Тип проекта не поддерживается этой копией программы"
Пытаюсь создать проект в C# Express 2008 XNA 3.1, выскакивает ошибка Не удается открыть файл...

Ошибка при открытии проекта, созданного в XNA 2.0 (Не удается прочесть файл проекта)
Доброе время суток:) Скачал тут одно решение на XNA, хочу его открыть в VS2010+XNA4.0. Пишет что...

Проект созданный в более ранней версии VS запускается, а созданный проект в VS 10 с теми же исходниками не запускается
Собственно, вопрос в заголовке. Скачал я урок по OpenGL от NeHe (урок 22), решил запустить у себя...

53
9933 / 2936 / 494
Регистрация: 05.10.2013
Сообщений: 7,966
Записей в блоге: 227
04.02.2018, 13:35  [ТС]

Загрузка текстурированного объекта из GLB и текстуры из WebP в Three.js из 3D-редактора Blender



Используется актуальная на середину января 2026 года версия Three.js 0.182.0

Демка в песочнице Plunker: https://plnkr.co/edit/bcE98muuBihphUBV

Название: db49e6e0c91898bc8a8fcdbee90dd3316d5ec2b2.png
Просмотров: 14

Размер: 19.8 Кб

GLB - это формат 3D-объекта, который можно экспортировать из Blender. Для наложения текстуры на куб использовалась UV-развёртка в Blender. Покраска граней и цифры на гранях сделаны в GIMP. Текстура была экспортирована в формат PNG из GIMP. Получился PNG-файл размером 20 КБайт. PNG-файл был загружен на сайт https://towebp.io/ для конвертации его в WebP-формат. Файл cube.webp весит всего 2 КБайта, то есть размер текстуры уменьшился в 10 раз.

Пример на старой версии Three.js 89

Кубик экспортирован в JSON из Blender'а с помощью плагина: Three.js Blender Export

Песочница: https://plnkr.co/edit/Owc6rAOw... ?p=preview
Исходники архивом: textured-cube.zip
Blender проект: cube.blend.zip
GIMP проект: cube.gimp.zip

Название: textured-cube.png
Просмотров: 677

Размер: 9.8 Кб
Вложения
Тип файла: zip textured-cube-glb-webp-threejs182-js.zip (11.3 Кб, 0 просмотров)
0
9933 / 2936 / 494
Регистрация: 05.10.2013
Сообщений: 7,966
Записей в блоге: 227
05.02.2018, 14:47  [ТС]

Снеговики из встроенных сфер и конусов на Three.js



Используются только стандартные объекты - сферы и конусы. Для управления камерой используется стандартный OrbitControls.js. Для вывода FPS используется стандартная библиотека Stats.

Обновлённая версия примера на Three.js 0.182.0



С помощью Gemini 3 обновил это пример со снеговиками до версии Three.js 0.182.0 от 10 декабря 2025 года

Демка в песочнице Plunker: https://plnkr.co/edit/HEUVXVHZ4qi7WrU8



Исходники на Three.js 0.182.0: snowmen-threejs182-js.zip (3.0 Кб) (библиотеки загружаются с www.jsdelivr.com)

  • Используется библиотека stats.js 0.17.0 для отображения FPS. Можно переключать между разными режимами по клику в окне Stats в левом верхнем углу
  • Используется библиотека OrbitControls.js, которая входит в состав примеров Three.js, для поворота камеры (зажатая левая кнопка), а также для перемещения камеры (зажатая правая кнопка), и для приближения и отдаления камеры (вращения колесика мыши)

Старая версия примера на Three.js 89



Кликните здесь для просмотра всего текста
Демка: https://codepen.io/8Observer8/full/JORMMd
Исходники на Three.js v89: snowmen.zip (171.0 Кб) (библиотеки включены в архив)

Вложения
Тип файла: zip snowmen-threejs182-js.zip (3.0 Кб, 0 просмотров)
0
9933 / 2936 / 494
Регистрация: 05.10.2013
Сообщений: 7,966
Записей в блоге: 227
01.03.2018, 22:33  [ТС]

Загрузка плоскости с Normal Map из Blender'а в Babylon.js



Демка на весь экран

Демка в песочнице Plunker

Название: baking-normal-map.png
Просмотров: 623

Размер: 153.7 Кб

Карта нормалей создана в Blender'е по туториалу:

Вложения
Тип файла: zip normal-map.zip (649.0 Кб, 20 просмотров)
0
9933 / 2936 / 494
Регистрация: 05.10.2013
Сообщений: 7,966
Записей в блоге: 227
04.03.2018, 18:12  [ТС]

Перемещение от первого лица по плоскости с помощью стандартного скрипта FirstPersonControls.js на Three.js



Демка в браузере

Название: b81d8e83f34391de9ca4cecac79ff227e55cd9f4.png
Просмотров: 9

Размер: 3.5 Кб
Вложения
Тип файла: zip walk-on-a-plane-threejs-js.zip (2.5 Кб, 0 просмотров)
0
9933 / 2936 / 494
Регистрация: 05.10.2013
Сообщений: 7,966
Записей в блоге: 227
13.06.2018, 22:49  [ТС]

Пример Getting Started на TypeScript и Bybylon.js в песочнице Plunker



Пример для демонстрации того, как размещать примеры на TypeScript и Babylon.js в песочнице Plunker (https://plnkr.co)

Демка в песочнице Plunker: https://plnkr.co/edit/yAiNRsquPAYfXbnr8yYU

Вложения
Тип файла: zip simple-typescript-example-in-babylonjs-for-plunker-ts.zip (2.9 Кб, 0 просмотров)
0
9933 / 2936 / 494
Регистрация: 05.10.2013
Сообщений: 7,966
Записей в блоге: 227
01.07.2019, 01:47  [ТС]

Пример Getting Started на TypeScript с Three.js



Демка в песочнице Plunker: https://next.plnkr.co/edit/YXLIamSsUH8k1E3r

Исходники на 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"
        }
    ]
}
Вложения
Тип файла: zip getting-started-with-threejs-and-typescript.zip (388.4 Кб, 3 просмотров)
0
9933 / 2936 / 494
Регистрация: 05.10.2013
Сообщений: 7,966
Записей в блоге: 227
04.06.2020, 08:11  [ТС]
Пример загрузки анимированной модели из формата glTF 2.0 на TypeScript и движке Babylon.js

Название: gates-babylonjs-typescript.gif
Просмотров: 552

Размер: 557.7 Кб

Скачать исходники: gates-babylonjs-typescript.zip (6.9 Кб)

Мой пример на бесплатном движке Babylon.js и языке TypeScript, который показывает как загружать анимированную модель из формата glTF 2.0 и располагать проект в песочнице Plunker в нескольких файлах исходного кода

Запустить в песочнице Plunker: https://plnkr.co/edit/WEMBjkkJJbHgVPVJ?preview

Запустить release-версию собранная в bundle.min.js с помощью Browserify и UglifyJS: https://8observer8.github.io/babylonjs-ts/gates/

Для сборки проекта из исходников в релиз (в файл bundle.min.js) и для пошаговой отладки с помощью точек останова читайте мою инструкцию: Пример загрузки анимированной модели из формата glTF 2.0 на TypeScript и движке Babylon.js
Вложения
Тип файла: zip gates-babylonjs-typescript.zip (6.9 Кб, 17 просмотров)
0
9933 / 2936 / 494
Регистрация: 05.10.2013
Сообщений: 7,966
Записей в блоге: 227
19.11.2021, 13:40  [ТС]

Skybox на Babylon.js и JavaScript



Название: skybox-babylonjs-js-compressed.gif
Просмотров: 713

Размер: 924.4 Кб

Демка в песочнице Plunker
Вложения
Тип файла: zip skybox-babylonjs-js.zip (88.9 Кб, 3 просмотров)
0
9933 / 2936 / 494
Регистрация: 05.10.2013
Сообщений: 7,966
Записей в блоге: 227
20.11.2021, 16:29  [ТС]

Skybox на Babylon.js и TypeScript с инструкцией по сборке



Демка в песочнице Plunker



Инструкция по сборке
  • Скачать архив с проектом, который прикреплён к данному сообщению
  • Установить глобально следующие пакеты командой:
    Bash
    1
    
    npm i -g typescript uglify-js browserify http-server
  • Установить локально пакеты перечисленные в файле package.json командой:
    Bash
    1
    
    npm i
  • Для отладочного режима (Debug mode) нужно в файле public/index.html поместить в блок комментариев код после Release следующим образом:

    HTML5
    1
    2
    3
    4
    5
    
        <!-- Debug -->
        <script data-main="js/requireConfig"
            src="https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.6/require.min.js"></script>
        <!-- Release -->
        <!-- <script src="js/bundle.min.js"></script> -->
  • В файле src/client/main.ts нужно поместить в комментарии строку после Release:

    JavaScript
    1
    2
    3
    4
    5
    
    // Debug
    main();
     
    // Release
    // window.onload = () => main();
  • Запустить сборку в Debug командой:
    Bash
    1
    
    npm run debug
  • Выполнить команду "http-server -с-1" для запуска локального сервера. Примечание: пакет http-server был установлен глобально ранее
  • Перейти в браузер и в адресной строке браузера набрать адрес: localhost:8080/index.html
  • Веб-приложение запустится в браузере
  • Для сборки в релиз нужно сделать наоборот, то есть добавить в комментарии то что находится после Debug и убрать комментарии с Release:

    HTML5
    1
    2
    3
    4
    5
    
        <!-- Debug -->
        <!-- <script data-main="js/requireConfig"
            src="https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.6/require.min.js"></script> -->
        <!-- Release -->
        <script src="js/bundle.min.js"></script>
    src/client/main.ts

    JavaScript
    1
    2
    3
    4
    5
    
    // Debug
    // main();
     
    // Release
    window.onload = () => main();
  • Выполнить команду "http-server -с-1" для запуска локального сервера
  • Перейти в браузер и в адресной строке браузера набрать адрес: localhost:8080/index.html
  • Веб-приложение запустится в браузере
Вложения
Тип файла: zip skybox-babylonjs-ts.zip (95.9 Кб, 0 просмотров)
0
9933 / 2936 / 494
Регистрация: 05.10.2013
Сообщений: 7,966
Записей в блоге: 227
21.11.2021, 13:49  [ТС]

Skybox на Babylon.js и JavaScript со сборщиком Browserify



Демка в песочнице Plunker



Инструкция по сборке
  • Перейти в папку со скаченным примером и запустить CMD в этой папке
  • Установить глобально эти пакеты: `npm i -g uglify-js browserify http-server`
  • Установить локальные пакеты: `npm i`
  • Чтобы собрать в режиме Debug нужно в файле public/index.html убрать под комментарий строку после Release:

    HTML5
    1
    2
    3
    4
    
        <!-- Debug -->
        <script src="js/bundle.js"></script>
        <!-- Release -->
        <!-- <script src="js/bundle.min.js"></script> -->
  • Запустить команду:
    Bash
    1
    
    npm run debug
  • Запускаем локальный сервер командой `http-server -с-1`
  • Перейти в браузер и ввести адрес: http://localhost:8080/index.html
  • Чтобы собрать в режиме Release нужно в файле public/index.html убрать под комментарий строку после Debug:

    HTML5
    1
    2
    3
    4
    
        <!-- Debug -->
        <!-- <script src="js/bundle.js"></script> -->
        <!-- Release -->
        <script src="js/bundle.min.js"></script>
  • Запустить команду:
    Bash
    1
    
    npm run release
  • Запускаем локальный сервер командой `http-server -с-1`
  • Перейти в браузер и ввести адрес: http://localhost:8080/index.html
Вложения
Тип файла: zip skybox-babylonjs-browserify-js.zip (91.5 Кб, 2 просмотров)
0
9933 / 2936 / 494
Регистрация: 05.10.2013
Сообщений: 7,966
Записей в блоге: 227
22.11.2021, 00:48  [ТС]
Падающие кубики. Matter.js, Babylon.js, JavaScript

Демка в песочнице

Название: falling-boxes-matterjs-bjs-ts.gif
Просмотров: 470

Размер: 183.3 Кб
Вложения
Тип файла: zip falling-boxes-matterjs-bjs-js.zip (89.8 Кб, 5 просмотров)
0
9933 / 2936 / 494
Регистрация: 05.10.2013
Сообщений: 7,966
Записей в блоге: 227
22.11.2021, 17:40  [ТС]

Перемещение от первого лица по плоскости с захватом курсора с помощью стандартного скрипта PointerLockControls.js на Three.js



Демка в браузере

Название: 1ec3ddd74fd2bb06ee4fca2570a17236e6660227.png
Просмотров: 7

Размер: 4.5 Кб
Вложения
Тип файла: zip pointer-lock-controls-threejs-js.zip (3.2 Кб, 0 просмотров)
0
9933 / 2936 / 494
Регистрация: 05.10.2013
Сообщений: 7,966
Записей в блоге: 227
22.11.2021, 19:42  [ТС]

Падающие кубики на Babylon.js, Matter.js, и TypeScript



Демка в песочнице Plunker

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

Название: falling-boxes-matterjs-babylonjs-ts.gif
Просмотров: 444

Размер: 268.2 Кб

Инструкция по сборке
  • Установите глобально следующие пакеты командой:
    npm i -g typescript uglify-js browserify http-server
  • Перейдите в папку проекта
  • Установите локальные пакеты из package.json командой:
    npm i

Отладочная сборка:
  • public/index.html
    HTML5
    1
    2
    3
    4
    5
    
        <!-- Debug -->
        <script data-main="js/requireConfig"
            src="https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.6/require.min.js"></script>
        <!-- Release -->
        <!-- <script src="js/bundle.min.js"></script> -->
  • src/client/main.ts
    JavaScript
    1
    2
    3
    4
    5
    
    // Debug
    main();
     
    // Release
    // window.onload = () => main();
  • Запустите команду:

    npm run debug
  • Запустите команду
    http-server
    и перейдите в браузер: http://localhost:8080/index.html

Сборка в релиз Release:
  • public/index.html

    HTML5
    1
    2
    3
    4
    5
    
        <!-- Debug -->
        <!-- <script data-main="js/requireConfig"
            src="https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.6/require.min.js"></script> -->
        <!-- Release -->
        <script src="js/bundle.min.js"></script>
  • src/client/main.ts

    JavaScript
    1
    2
    3
    4
    5
    
    // Debug
    // main();
     
    // Release
    window.onload = () => main();
  • Запустите команду:

    npm run release
  • Запустите команду
    http-server
    и перейдите в браузер: http://localhost:8080/index.html
Вложения
Тип файла: zip falling-boxes-matterjs-babylonjs-ts.zip (101.5 Кб, 0 просмотров)
0
383 / 23 / 2
Регистрация: 12.06.2021
Сообщений: 211
Записей в блоге: 2
21.01.2022, 07:19
Примеры работы камеры на babylon из меню выбираете с какого ракурса показать сцену.
Камера №1: https://codepen.io/Smith37/pen/zYEVdJZ
Камера №2: https://codepen.io/Smith37/pen/MWEMvPy
1
9933 / 2936 / 494
Регистрация: 05.10.2013
Сообщений: 7,966
Записей в блоге: 227
21.01.2022, 12:50  [ТС]
Olga28, я перенёс ваши примеры выше на форум. Когда публикуете ссылки на песочницы, то прикрепляйте архив с проектом, чтобы он гарантированно был доступен в случае, если код будет удалён из песочницы. Не забывайте форматировать код. Плохо форматированный код тяжело читать. Есть программы для автоматического форматирования. Инстркция в блоге, как использовать js-beautify: https://www.cyberforum.ru/blogs/416874/8437.html Мне больше нравится песочница Plunker: https://plnkr.co/. Мышкой можно перенести весь свой проект в эту песочницу вместе с ассетами: моделями, текстурами, звуковыми файлами и т.д. В неё можно копировать код файлами и загружать игровые ассеты перетаскиванием с помощью мыши: текстуры, звуковые файлы, 3D-модели, спрайт листы и т.д.

Камера №1 в песочнице Plunker: https://plnkr.co/edit/iKVLGEt7OTOi59Iz

Камера №2 в песочнице Plunker: https://plnkr.co/edit/xTTbcMNm7Gavb9YZ
Вложения
Тип файла: zip camera01-babylonjs-js.zip (2.9 Кб, 0 просмотров)
Тип файла: zip camera02-babylonjs-js.zip (3.3 Кб, 0 просмотров)
0
9933 / 2936 / 494
Регистрация: 05.10.2013
Сообщений: 7,966
Записей в блоге: 227
08.06.2022, 15:46  [ТС]

Подключение физического движка Rapier



Исходники: init-rapier-js.zip

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>
 
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title></title>
</head>
 
<body>
    <script type="importmap">
        {
            "imports": {
                "@dimforge/rapier3d-compat": "https://cdn.jsdelivr.net/npm/@dimforge/rapier3d-compat@0.19.3/rapier.mjs"
            }
        }
    </script>
 
    <script type="module" src="./js/index.js"></script>
</body>
 
</html>
js/index.js

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
import RAPIER from "@dimforge/rapier3d-compat";
 
async function init() {
    await RAPIER.init();
 
    const gravity = { x: 0.0, y: -9.81, z: 0.0 };
    const world = new RAPIER.World(gravity);
 
    console.log(RAPIER.version());
}
 
init();

Рисование коллайдеров Rapier с помощью Three.js



Демка в браузере

Название: 7f6f2d65120216a49b14251f1f41b9271c37bc6d.png
Просмотров: 5

Размер: 902 байт

Исходники: debug-drawer-rapier-threejs-js.zip

Физика плюс графика



Отображение коллайдеров отключается с помощью клавиши L

Демка в браузере

Название: f7bf67c31729e92d4c641b051c0308f953875319.png
Просмотров: 2

Размер: 4.4 Кб

Название: 9606d20344f939743c253e27e2006b963b3c3461.png
Просмотров: 2

Размер: 2.4 Кб

Исходники: visual-world-rapier-threejs-js.zip

Падающие кубики с тенями на Three.js и Rapier



Отображение коллайдеров отключается с помощью клавиши L

Демка в браузере



Исходники: falling-cubes-rapier-threejs-js.zip
Вложения
Тип файла: zip init-rapier-js.zip (1.1 Кб, 0 просмотров)
Тип файла: zip debug-drawer-rapier-threejs-js.zip (2.4 Кб, 0 просмотров)
Тип файла: zip visual-world-rapier-threejs-js.zip (2.9 Кб, 0 просмотров)
Тип файла: zip falling-cubes-rapier-threejs-js.zip (3.1 Кб, 0 просмотров)
0
9933 / 2936 / 494
Регистрация: 05.10.2013
Сообщений: 7,966
Записей в блоге: 227
09.06.2022, 19:11  [ТС]
Пример сборки JavaScript-проекта с помощью Rollup с модулями ES6: Cannon-ES и Three.js

Cannon-ES - это физический движок для браузерных 3D-игр и неигровых симуляций физики, разработчики которого были вдохновлены физическим движком Ammo.js, который является прямом портом с C++ физического движка Bullet Physics. Cannon-ES - более легковесный и проще в использовании, чем Ammo.js

Инструкция:
  • Установите Rollup командой: npm i -D rollup
  • Используйте следующую команду для отладки: rollup -cmw
  • Для сборки в релиз установите глобально UglifyJS командой: npm i uglify-js -g
  • Используйте следующую команду для сборки в релиз: uglifyjs public/js/bundle.js -o public/js/bundle.min.js
  • В качестве локального сервера можно поставить следующий пакет: npm i http-server
  • Для запуска локального сервера можно открыть новый терминал в редакторе кода VSCode: "View" > "Terminal" (или сочетанием клавиш: Ctrl+`) и введите команду в терминале: http-server. Перейдите в браузер и введите адрес: localhost:8080

Пример с ES-модулями можно опубликовать в песочнице



rollup.config.js

JavaScript
1
2
3
4
5
6
export default {
    input: "./src/client/main.js",
    output: {
        file: "public/js/bundle.js"
    }
}
public/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
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
<!DOCTYPE html>
<html lang="en">
 
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
 
    <title>Document</title>
 
    <style>
        html,
        body {
            overflow: hidden;
            width: 100%;
            height: 100%;
            margin: 0;
            padding: 0;
        }
 
        #renderCanvas {
            width: 100%;
            height: 100%;
        }
    </style>
</head>
 
<body>
    <script async src="https://unpkg.com/es-module-shims@1.5.5/dist/es-module-shims.js"></script>
 
    <script type="importmap">
        {
            "imports": {
                "three": "https://unpkg.com/three@0.141.0/build/three.module.js",
                "collada-loader": "https://unpkg.com/three@0.141.0/examples/jsm/loaders/ColladaLoader.js",
                "orbit-controls": "https://unpkg.com/three@0.141.0/examples/jsm/controls/OrbitControls.js",
                "cannon-es": "https://cdn.jsdelivr.net/npm/cannon-es@0.19.0/dist/cannon-es.js"
            }
        }
    </script>
 
    <script type="module" src="js/bundle.js"></script>
</body>
 
</html>
src/client/main.js

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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
import * as THREE from "three";
import { OrbitControls } from "orbit-controls";
import * as CANNON from "cannon-es";
 
let scene;
const world = new CANNON.World({ gravity: new CANNON.Vec3(0, -10, 0) });
const rigidBodies = [];
 
function init()
{
    initScene();
    createGround();
    createBox({ x: 0, y: 5, z: 0.5 });
    createBox({ x: 0.5, y: 2, z: 0 });
}
init();
 
function createGround()
{
    const pos = { x: 0, y: 0, z: 0 };
    const scale = { x: 50, y: 2, z: 50 };
    const quat = { x: 0, y: 0, z: 0, w: 1 };
    const mass = 0;
 
    // Three.js section
 
    const ground = new THREE.Mesh(
        new THREE.BoxBufferGeometry(),
        new THREE.MeshPhongMaterial({ color: 0xa0afa4 }));
 
    ground.position.set(pos.x, pos.y, pos.z);
    ground.scale.set(scale.x, scale.y, scale.z);
 
    ground.receiveShadow = true;
 
    scene.add(ground);
 
    // Cannon-ES section
 
    const colShape = new CANNON.Box(new CANNON.Vec3(scale.x / 2, scale.y / 2, scale.z / 2));
    const body = new CANNON.Body({ mass: mass });
    body.position.set(pos.x, pos.y, pos.z);
    body.quaternion.set(quat.x, quat.y, quat.z, quat.w);
    body.addShape(colShape);
 
    world.addBody(body);
}
 
function createBox(pos)
{
    const scale = { x: 1, y: 1, z: 1 };
    const quat = { x: 0, y: 0, z: 0, w: 1 };
    const mass = 10;
 
    // Three.js section
 
    const box = new THREE.Mesh(
        new THREE.BoxGeometry(1, 1, 1),
        new THREE.MeshPhongMaterial({ color: 0xe77732 }));
    scene.add(box);
 
    box.position.set(pos.x, pos.y, pos.z);
    box.scale.set(scale.x, scale.y, scale.z);
 
    box.castShadow = true;
    box.receiveShadow = true;
 
    scene.add(box);
 
    // Cannon-ES section
 
    const colShape = new CANNON.Box(new CANNON.Vec3(scale.x / 2, scale.y / 2, scale.z / 2));
    const body = new CANNON.Body({ mass: mass });
    body.position.set(pos.x, pos.y, pos.z);
    body.quaternion.set(quat.x, quat.y, quat.z, quat.w);
    body.addShape(colShape);
 
    world.addBody(body);
 
    box.userData.physicsBody = body;
    rigidBodies.push(box);
}
 
function updatePhysics()
{
    world.fixedStep();
 
    for (let i = 0; i < rigidBodies.length; i++)
    {
        let objThree = rigidBodies[i];
        let objCannon = objThree.userData.physicsBody;
 
        objThree.position.copy(objCannon.position);
        objThree.quaternion.copy(objCannon.quaternion);
    }
}
 
function initScene()
{
    // Create the scene
    scene = new THREE.Scene();
    scene.background = new THREE.Color(0xbfd1e5);
 
    // Add hemisphere light
    let hemiLight = new THREE.HemisphereLight(0xffffff, 0xffffff, 0.1);
    hemiLight.color.setHSL(0.6, 0.6, 0.6);
    hemiLight.groundColor.setHSL(0.1, 1, 0.4);
    hemiLight.position.set(0, 50, 0);
    scene.add(hemiLight);
 
    // Add directional light
    let dirLight = new THREE.DirectionalLight(0xffffff, 1);
    dirLight.color.setHSL(0.1, 1, 0.95);
    dirLight.position.set(-1, 1.75, 1);
    dirLight.position.multiplyScalar(100);
    scene.add(dirLight);
 
    dirLight.castShadow = true;
 
    dirLight.shadow.mapSize.width = 2048;
    dirLight.shadow.mapSize.height = 2048;
 
    let d = 50;
 
    dirLight.shadow.camera.left = -d;
    dirLight.shadow.camera.right = d;
    dirLight.shadow.camera.top = d;
    dirLight.shadow.camera.bottom = -d;
 
    dirLight.shadow.camera.far = 13500;
 
    const renderer = new THREE.WebGLRenderer({ antialias: true });
    renderer.setClearColor(0xbfd1e5);
    renderer.setPixelRatio(window.devicePixelRatio);
    renderer.setSize(window.innerWidth, window.innerHeight);
    document.body.appendChild(renderer.domElement);
 
    renderer.gammaInput = true;
    renderer.gammaOutput = true;
 
    renderer.shadowMap.enabled = true;
 
    const camera = new THREE.PerspectiveCamera(60, window.innerWidth / window.innerHeight, 0.01, 1000);
    camera.position.set(2, 4, 7);
 
    const orbitControls = new OrbitControls(camera, renderer.domElement);
    orbitControls.target = new THREE.Vector3(0, 0, 0);
 
    (function anim()
    {
        requestAnimationFrame(anim);
        orbitControls.update();
        updatePhysics();
        renderer.render(scene, camera);
    })();
 
    window.onresize =
        () =>
        {
            camera.aspect = window.innerWidth / window.innerHeight;
            camera.updateProjectionMatrix();
            renderer.setSize(window.innerWidth, window.innerHeight);
        };
}
Миниатюры
0
9933 / 2936 / 494
Регистрация: 05.10.2013
Сообщений: 7,966
Записей в блоге: 227
23.06.2022, 10:43  [ТС]
Программирование на языке TypeScript с помощью Parcel на примере Three.js и Cannon-ES

Запись в блоге, которая может меняться: Программирование на языке TypeScript с помощью Parcel на примере Three.js и Cannon-ES
  • Установите редактор кода VSCode и Node.js
  • Установите глобально пакеты TypeScript и Parcel командами в терминале: npm i -g typescript parcel
  • Создайте пустую папку для проекта и создайте в ней файл package.json командой: npm init -y
  • Установите Three.js и Cannon-ES командой: npm i three cannon-es
  • Добавьте в package.json команды:
    Code
    1
    2
    3
    4
    
      "scripts": {
        "start": "parcel src/index.html --dist-dir public --open",
        "build": "parcel build src/index.html"
      },
  • Создайте папку src и добавьте в неё два файла:

    src/index.html

    PHP/HTML
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    
    <!DOCTYPE html>
    <html lang="en">
     
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
    </head>
     
    <body>
        <script type="module" src="main.ts"></script>
    </body>
     
    </html>
    src/main.ts

    JavaScript
    1
    2
    3
    4
    5
    
    import * as Three from "three";
    import * as CANNON from "cannon-es";
     
    console.log(new Three.Vector3(1, 2, 3));
    console.log(new CANNON.Vec3(3, 3, 3));
  • Откройте терминал в VSCode (в меню: "View" > "Terminal") и введите команду: npm run start
  • Автоматически будет открыт браузер. Откройте консоль браузера, например, в Chrome нужно нажать Ctrl+Shift+J. В консоли вы увидите вывод:
    Vector3 {isVector3: true, x: 1, y: 2, z: 3}
    main.ts:5 Vec3 {x: 3, y: 3, z: 3}
Каждый раз, когда вы будете изменять и сохранять код, то браузер будет автоматические обновлять содержимое. Parcel собирает очень быстро - от нескольких десятков или нескольких сотен миллисекунд.

Следующим образом можно добавить в код на TypeScript модули ColladaLoader (для загрузки 3D-моделей с анимациями формата .dae, например, созданных в бесплатном 3D-редакторе Blender) и OrbitControls (для вращения/приближения/отдаления камеры с помощью мыши вокруг точки в 3D-пространстве)

src/main.ts

JavaScript
1
2
3
4
5
import { ColladaLoader } from "./node_modules/three/examples/jsm/loaders/ColladaLoader";
import { OrbitControls } from "./node_modules/three/examples/jsm/controls/OrbitControls";
 
console.log(ColladaLoader);
console.log(OrbitControls);
Либо так, если у вас, как у меня, папка с пакетами находится выше по уровню вложенности:

JavaScript
1
2
3
4
5
import { ColladaLoader } from "../../../node_modules/three/examples/jsm/loaders/ColladaLoader";
import { OrbitControls } from "../../../node_modules/three/examples/jsm/controls/OrbitControls";
 
console.log(ColladaLoader);
console.log(OrbitControls);
0
9933 / 2936 / 494
Регистрация: 05.10.2013
Сообщений: 7,966
Записей в блоге: 227
23.06.2022, 12:10  [ТС]
Rollup, Three.js и Cannon-ES

Запись в блоге, которая может меняться: Программирование на языке JavaScript с помощью Rollup на примере Three.js и Cannon-ES
  • Установите редактор кода VSCode и Node.js
  • Создайте пустую папку для проекта и перейдите в неё с помощью терминала
  • Введите в терминале команду: code . (не забудьте добавить точку, эта команда запустит VSCode в текущей директории)
  • Откройте терминал в VSCode (в меню: "View" > "Terminal" (или Ctrl+`)) и установите глобально пакеты Rollup и http-server для этого введите в терминале: npm i -g rollup http-server
  • Создайте в VSCode две папки: public и src
  • В папке public создайте файл 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
    24
    25
    26
    27
    28
    29
    
    <!DOCTYPE html>
    <html lang="en">
     
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
     
        <title>Document</title>
    </head>
     
    <body>
        <script async src="https://unpkg.com/es-module-shims@1.5.5/dist/es-module-shims.js"></script>
     
        <script type="importmap">
            {
                "imports": {
                    "three": "https://unpkg.com/three@0.141.0/build/three.module.js",
                    "collada-loader": "https://unpkg.com/three@0.141.0/examples/jsm/loaders/ColladaLoader.js",
                    "orbit-controls": "https://unpkg.com/three@0.141.0/examples/jsm/controls/OrbitControls.js",
                    "cannon-es": "https://cdn.jsdelivr.net/npm/cannon-es@0.19.0/dist/cannon-es.js"
                }
            }
        </script>
     
        <script type="module" src="js/bundle.js"></script>
    </body>
     
    </html>
  • В папке src создайте файл main.js:

    JavaScript
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
    import * as THREE from "three";
    import * as CANNON from "cannon-es";
    import { ColladaLoader } from "collada-loader";
    import { OrbitControls } from "orbit-controls";
     
    const vec = new THREE.Vector3(1, 2, 3);
    console.log(vec);
    const vec2 = new CANNON.Vec3(3, 3, 3);
    console.log(vec2);
     
    console.log(ColladaLoader);
    console.log(OrbitControls);
  • В корне проекта создайте файл rollup.config.js:
    JavaScript
    1
    2
    3
    4
    5
    6
    
    export default {
        input: "./src/main.js",
        output: {
            file: "public/js/bundle.js"
        }
    }
  • Введите в терминале команду: rollup -cmw (при сохранении изменений в коде будет автоматически создаваться bundle.js)
  • Откройте ещё один терминал в VSCode, для этого нажмите кнопку + (плюс) в правом верхнем углу текущего терминала
  • В новом терминале введите команду: http-server -c-1
  • Перейдите в браузер и введите адрес: localhost:8080
  • Откройте консоль браузера, для этого, например, в Chrome нужно нажать сочетание клавиш: Ctrl+Shift+J. В консоли браузера отобразится результат выполнения программы
  • Для того, чтобы собрать в релиз нужно в первом терминале остановить выполнение rollup (нажать Ctrl+C) и ввести команду: rollup -c
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
23.06.2022, 12:10
Помогаю со студенческими работами здесь

Запуск OpenGL проекта под VS 2008. Как задать пути к используемым файлам?
Приветствую всех присутсвующих. Прошу всесильно о помощи. Ситуация: Работаю на VS 2008. ...

проект win32
Я скачал проекты с сайта http://www.codesampler.com/dx9src/dx...initialization они с использованием...

OpenGL.Урок 1. простой OpenGL-проект
Не компилируется кодю #include &lt;GL\glut.h&gt; void DrawLine() { ...

Какие есть проекты на форуме?
есть желание писать, есть немного времени. Пишу на php,javascript,pascal. Есть ли раздел проекты...

TrinityCore C++ Обучающий проект. + DB MySQL
Есть игра, World of Warcraft И симулятор / ядро на котором оно основано. TrinityCore на C++ ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru