Строка 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();