"Завернуть" три.js в SmartMS

Я хотел бы добавить этот простой пример three.js в Smart Mobile Studio. Можно ли обойтись без целого ряда сложных упаковок? Я попробовал наивную попытку, скопировав содержимое window.onload в раздел asm - но, конечно, безуспешно.

<!DOCTYPE html>
<html>
<head>
<title>Getting Started with Three.js</title>    
<script src="three.min.js"></script>
<script>
window.onload = function() {

    var renderer = new THREE.WebGLRenderer();
    renderer.setSize( 800, 600 );
    document.body.appendChild( renderer.domElement );

    var scene = new THREE.Scene();

    var camera = new THREE.PerspectiveCamera(
        35,             // Field of view
        800 / 600,      // Aspect ratio
        0.1,            // Near plane
        10000           // Far plane
    );
    camera.position.set( -15, 10, 10 );
    camera.lookAt( scene.position );

    var geometry = new THREE.CubeGeometry( 5, 5, 5 );
    var material = new THREE.MeshLambertMaterial( { color: 0xFF0000 } );
    var mesh = new THREE.Mesh( geometry, material );
    scene.add( mesh );

    var light = new THREE.PointLight( 0xFFFF00 );
    light.position.set( 10, 0, 10 );
    scene.add( light );

    renderer.render( scene, camera );

};
</script>
</head>
<body></body>
</html>

3 ответа

Решение

Я сгенерировал модуль-обертку (используя свой собственный экспериментальный конвертер машинописного текста в паскаль), а также протестировал вывод (и исправил некоторые ошибки генератора): https://github.com/andremussche/AndrewsDelphiStuff/tree/master/Smart/ThreeJS

Все еще не идеально (некоторые внешние имена классов отсутствуют), но в любом случае это хорошая отправная точка.

В приведенной выше демонстрации вы также можете увидеть, как создать простой HTML-проект в SMS IDE:)

Я создал демо, которое намеренно отклоняется как можно меньше от образца Андре. Более подробную информацию см. По адресу: http://smartmobilestudio.com/forums/topic/smartms-intro-with-threejs/

@warleyalex твой пример очень поучителен для меня. Функция getID была именно то, что мне нужно! Но, к сожалению, это также делает сбой смс. Почти так же, как завернутый раствор Андре.

function getID(OwnerHandle : TObject): string;
begin
  result := TW3TagObj(OwnerHandle).Handle.id;
end;

procedure TForm1.W3ButtonRunClick(Sender: TObject);
var canvas : variant;
begin
  canvas := getID(myCanvas); // myCanvas is a TW3DIVHtmlElement
  asm
    var renderer = new THREE.WebGLRenderer();
    renderer.setSize( 800, 600 );
    var ctnEl = document.getElementById(@canvas);
    ctnEl.appendChild(renderer.domElement);

    var scene = new THREE.Scene();

    var camera = new THREE.PerspectiveCamera(
        35,             // Field of view
        800 / 600,      // Aspect ratio
        0.1,            // Near plane
        10000           // Far plane
        );
        camera.position.set( -15, 10, 10 );
        camera.lookAt( scene.position );

        var geometry = new THREE.CubeGeometry( 5, 5, 5 );
        var material = new THREE.MeshLambertMaterial( { color: 0xFF0000 } );
        var mesh = new THREE.Mesh( geometry, material );
        scene.add( mesh );

        var light = new THREE.PointLight( 0xFFFF00 );
        light.position.set( 10, 0, 10 );
        scene.add( light );

       renderer.render( scene, camera );             
  end;  
end;
Другие вопросы по тегам