2015-10-15 4 views
0

Я пытаюсь создать простой образец вращающегося куба three.js в формате enyo. Я получаю ошибку как THREE.WebGLRenderer:Error creating WebGL context.Ошибка при создании контекста WebGL enyo

Вот мой код:

enyo.kind({ 
name:"Cubetest", 
create:function() { 
    // body... 
    this.inherited(arguments); 
      this.drawCube(); 
      //alert("in create"); 
}, 
rendered : function(){ 
    this.inherited(arguments); 

    //this.drawCube(); 
}, 
drawCube : function(){ 
var scene = new THREE.Scene(); 
    console.log(scene); 
    var camera = new THREE.PerspectiveCamera(75, window.innerWidth/window.innerHeight, 0.1, 1000); 
    console.log(camera); 
    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); 

    console.log(cube); 
    console.log(scene); 

    camera.position.z = 5; 

    var render = function() { 

     requestAnimationFrame(render); 

     cube.rotation.x += 0.1; 
     cube.rotation.y += 0.1; 

     renderer.render(scene, camera); 
    }; 

    render(); 

} 
}); 

Что может быть проблема? Поддерживает CanvasRenderer. Если я заменил WebGLRenderer на CanvasRenderer, он отлично работает.

ответ

0

Я считаю, что проблема, с которой вы сталкиваетесь, заключается в том, что вы добавляете узел DOM в тело до того, как Enyo создал свои узлы DOM. Когда Enyo создает свои узлы, он уничтожает созданную тремя. Вы должны оставить DOM-манипуляцию в Enyo, по большей части.

В Enyo у вас нет узла DOM до тех пор, пока не вызывается rendered(). Вы должны создать только три узла DOM в узле, созданном для вашего вида. Вы можете получить узел DOM из Enyo, вызвав this.hasNode(), который вернет узел DOM (или null, если rendered() еще не был вызван).

Измените свой метод, чтобы иметь три варианта вашего вида, и все должно работать лучше.

+0

Я думаю, что я также могу использовать метод 'rendered'? – arya

+0

Я хотел использовать 'rendered()'. – Pre101

+0

'rendered()' Не работает! – arya