Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > разработка игр, графический дизайн и моделирование > Gamedev - cоздание игр: Unity, OpenGL, DirectX
Регистрация

Восстановить пароль
Повторная активизация e-mail

Ответ
 
Опции темы
Старый 11.01.2018, 01:48   #1
8Observer8
Профессионал
 
Регистрация: 02.01.2011
Сообщений: 3,260
Репутация: 915
По умолчанию Проекты на Three.js и Babylon.js

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

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

Getting Started (Three.js)

Песочница: https://plnkr.co/edit/vaiCvJNydTTQh4Jn0kB1?p=preview

Код:

<!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>

Getting Started (Babylon.js)

Песочница: https://plnkr.co/edit/HUdxpwY392ZieGIOSY3l?p=preview

Код:

<!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>

8Observer8 вне форума   Ответить с цитированием
Старый 03.02.2018, 15:22   #2
Alex11223
Модератор
Заслуженный модератор
 
Регистрация: 12.01.2011
Сообщений: 16,787
Репутация: 3300

icq: 512-765
skype: alexp.frl
По умолчанию

Three.js замок на острове и двигающиеся вперед-назад лодки.

Лаба сделанная несколько лет назад в вузе.



Код и подробное описание реализации (англ.): https://github.com/AlexP11223/Three.js_IslandCastle

Запустить можно тут: https://alexp11223.github.io/Three.j...tle/index.html

Последний раз редактировалось Alex11223; 03.02.2018 в 16:46.
Alex11223 вне форума   Ответить с цитированием
Старый 04.02.2018, 14:17   #3
Alex11223
Модератор
Заслуженный модератор
 
Регистрация: 12.01.2011
Сообщений: 16,787
Репутация: 3300

icq: 512-765
skype: alexp.frl
По умолчанию

Вторая лаба.

Тот же замок, но с текстурами и моделями охраны. Рыцари ходят вокруг замка + кнопкой можно добавить еще рыцарей, они выйдут из замка и тоже начнут патрулировать этот радиус.

Текстуры и модели с http://opengameart.org

Для работы нужен HTTP сервер (просто отдающий файлы), или изменение каких-то настроек безопасности браузеров. В то время я использовал Mongose https://cesanta.com/binary.html (его советовал в книге "Learning Three.js" J. Dirksen): там просто кинуть .ехе в папку и запустить.







Код и подробное описание реализации (англ.): https://github.com/AlexP11223/Three.js_GuardedCastle

Запустить можно тут: https://alexp11223.github.io/Three.j...tle/index.html

Последний раз редактировалось Alex11223; 04.02.2018 в 14:19.
Alex11223 вне форума   Ответить с цитированием
Старый 04.02.2018, 14:36   #4
8Observer8
Профессионал
 
Регистрация: 02.01.2011
Сообщений: 3,260
Репутация: 915
По умолчанию

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

Кубик создан в Blender'е (Blender - это бесплатный аналог Maya и 3DsMax). Текстура для кубика создана в GIMP (GIMP - это бесплатный аналог Photoshop'а)

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

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

textured-cube.png
8Observer8 вне форума   Ответить с цитированием
Старый 05.02.2018, 15:49   #5
8Observer8
Профессионал
 
Регистрация: 02.01.2011
Сообщений: 3,260
Репутация: 915
По умолчанию

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

Демка: https://codepen.io/8Observer8/full/JORMMd
Исходники: snowmen.zip

snowmen.png
8Observer8 вне форума   Ответить с цитированием
Старый 01.03.2018, 23:32   #6
8Observer8
Профессионал
 
Регистрация: 02.01.2011
Сообщений: 3,260
Репутация: 915
По умолчанию

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

Демка на весь экран
Демка в песочнице
Исходники: normal-map.zip

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

baking-normal-map.jpg

index.html
Код:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Normal Map</title>
    <link rel="stylesheet" href="css/style.css">
    <script src="https://dl.dropboxusercontent.com/s/r6uhslpxq36s8vu/babylon.js"></script>
    <script src="js/Scene.js"></script>
    <script src="js/main.js"></script>
</head>

<body>
    <canvas id="renderCanvas"></canvas>
</body>

</html>

main.js
Код:

"use strict";

function main()
{
    Scene.Create("renderCanvas");
}
window.onload = main;

Scene.js
Код:

"use strict";

// http://www.babylonjs-playground.com/#AVG8L#1

var Scene = (function ()
{
    var _canvas = null;
    var _engine = null;
    var _scene = null;

    var _Create = function (canvasID)
    {
        _canvas = document.getElementById(canvasID);
        _engine = new BABYLON.Engine(_canvas, true);

        document.addEventListener('contextmenu', function (event) { event.preventDefault(); }, false);

        BABYLON.SceneLoader.Load("", "./assets/models/plane.babylon", _engine,
            function (newScene)
            {
                newScene.executeWhenReady(function ()
                {
                    _scene = newScene;
                    var light = new BABYLON.PointLight("light1", new BABYLON.Vector3(0, 1, 0), _scene);
                    var camera = new BABYLON.ArcRotateCamera("Camera", -Math.PI / 2, 0, 5, BABYLON.Vector3.Zero(), _scene);
                    camera.minZ = 0.1;
                    camera.wheelPrecision = 100;
                    _scene.activeCamera = camera;
                    camera.attachControl(_canvas, true);
                    //_scene.activeCamera.attachControl(_canvas);
                    var mesh = _scene.meshes[0];
                    var normalTexture = new BABYLON.Texture("./assets/textures/norm.png", _scene);
                    var material = new BABYLON.StandardMaterial("planeMat", _scene);
                    material.diffuseColor = new BABYLON.Color3(0.596, 0.356, 0.164);
                    material.invertNormalMapX = true;
                    material.invertNormalMapY = true;
                    material.bumpTexture = normalTexture;
                    mesh.material = material;

                    // Skybox
                    var skybox = BABYLON.MeshBuilder.CreateBox("skybox", { size: 1000 }, _scene);
                    skybox.infiniteDistance = true;
                    var skyboxMaterial = new BABYLON.StandardMaterial("skybox", _scene);
                    skyboxMaterial.backFaceCulling = false;
                    var files = [
                        "./assets/textures/skybox/skybox_px.jpg",
                        "./assets/textures/skybox/skybox_py.jpg",
                        "./assets/textures/skybox/skybox_pz.jpg",
                        "./assets/textures/skybox/skybox_nx.jpg",
                        "./assets/textures/skybox/skybox_ny.jpg",
                        "./assets/textures/skybox/skybox_nz.jpg",
                    ];
                    skyboxMaterial.reflectionTexture = BABYLON.CubeTexture.CreateFromImages(files, _scene);
                    skyboxMaterial.reflectionTexture.coordinatesMode = BABYLON.Texture.SKYBOX_MODE;
                    skyboxMaterial.diffuseColor = new BABYLON.Color3(0, 0, 0);
                    skyboxMaterial.specularColor = new BABYLON.Color3(0, 0, 0);
                    skybox.material = skyboxMaterial;

                    _Animate();
                });
            });
    };

    var _Animate = function ()
    {
        _engine.runRenderLoop(function ()
        {
            _scene.render();
        });

        window.addEventListener("resize", function ()
        {
            _engine.resize();
        });
    };

    var mPublic = {
        Create: _Create
    };
    return mPublic;
}());


Последний раз редактировалось 8Observer8; 01.03.2018 в 23:34.
8Observer8 вне форума   Ответить с цитированием
Старый 04.03.2018, 19:13   #7
8Observer8
Профессионал
 
Регистрация: 02.01.2011
Сообщений: 3,260
Репутация: 915
По умолчанию

Забыл добавить в сообщение выше style.css:
Код:

html, body {
    overflow: hidden;
    margin: 0;
    padding: 0;
    width: 100%;
    height: 100%;
}

#renderCanvas {
    touch-action: none;
    width: 100%;
    height: 100%;
}

8Observer8 вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Многофайловые проекты SomeGuy Паскаль 3 22.05.2016 17:48
проекты komra2 C# (си шарп) 9 16.02.2016 19:52
Многофайловые проекты. inc Общие вопросы C/C++ 1 25.04.2012 16:57
разработать проекты.... Virus Помощь студентам 2 20.06.2007 17:53


17:48.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru