Строка THREE.JS не отображается при вызове из brython

Моя цель - рисовать линии в WebGL с помощью THREE.js, вызываемого из brython. У меня есть два предположительно идентичных сценария:

  • версия Brython: https://codepen.io/dgront/pen/yqJejO

    from browser import window, document, alert
    
    renderer = None
    scene = None
    camera = None
    
    def init() :
    
        global renderer, scene, camera
    
        THREE = window.THREE
        renderer = THREE.WebGLRenderer.new( { "alpha": 1, "antialias": True, "clearColor": "#ffffff" }  )
        renderer.setSize( window.innerWidth, window.innerHeight )
        document.body.appendChild( renderer.domElement )
        scene = THREE.Scene.new()
    
        camera = THREE.PerspectiveCamera.new( 40, window.innerWidth / window.innerHeight, 1, 1000 )
        camera.position.set( 5, 5, 5 )
    
        material = THREE.LineBasicMaterial.new({ "color": "#0077ff" })
        geometry = THREE.Geometry.new()
        geometry.vertices.append( THREE.Vector3.new( 0, 0, 0) )
        geometry.vertices.append( THREE.Vector3.new( 1, 0.5, 0) )
        line = THREE.Line.new( geometry, material )
        scene.add( line )
    
    def animate(ev) :
        window.requestAnimationFrame( animate )
        renderer.render(scene, camera)
    
    init()
    animate(0)
    
  • и версия Javascript: https://codepen.io/dgront/pen/WKxrJN

    init();
    animate();
    var renderer, scene, camera, controls;
    var geometry, material, line, vertices, last;
    
    function init() {
    
        renderer = new THREE.WebGLRenderer( { alpha: 1, antialias: true, clearColor: 0xffffff }  );
        renderer.setSize( window.innerWidth, window.innerHeight );
        document.body.appendChild( renderer.domElement );
        scene = new THREE.Scene();
    
        camera = new THREE.PerspectiveCamera( 40, window.innerWidth / window.innerHeight, 1, 1000 );
        camera.position.set( 5, 5, 5 );
        controls = new THREE.OrbitControls( camera, renderer.domElement );
    
        material = new THREE.LineBasicMaterial({ color: 0x0077ff });
        geometry = new THREE.Geometry();
        geometry.vertices.push( new THREE.Vector3( 0, 0, 0) );
        geometry.vertices.push( new THREE.Vector3( 1, 0.5, 0) );
        line = new THREE.Line( geometry, material )
        scene.add( line );
    }
    
    function animate() {
      requestAnimationFrame( animate );
      renderer.render(scene, camera);
      controls.update();
    }
    

Оба должны делать одно и то же, и оба работают, но линии не видны в версии Brython.

Еще одна вещь, которая озадачивает меня, это то, что когда я удаляю OrbitControls объект из сценария JS, строка также исчезает (можно прокомментировать две следующие строки в Codepen):

controls = new THREE.OrbitControls( camera, renderer.domElement );
controls.update();

0 ответов

Другие вопросы по тегам