我有一个尝试导入的Blender模型,但看不到

时间:2019-11-25 01:15:51

标签: three.js

page = requests.get(line.strip())

}

///////////////////////////////////////////////// ///////////////////////// ///////////////////////////////////////////////////// ////////////////////

class _the_thinkrium_scene {

 // private

    constructor()  {

    THREE.Scene.prototype.thinkrium_scene = this;

    THREE.Scene.prototype.thinkrium_scene.scene = new THREE.Scene();    

    THREE.Scene.prototype.thinkrium_scene.camera = new THREE.PerspectiveCamera( 45, window.innerWidth / window.innerHeight, 0.1, 1000 );

    THREE.Scene.prototype.thinkrium_scene.renderer = new THREE.WebGLRenderer({ antialias: true });

    THREE.Scene.prototype.thinkrium_scene.renderer.setPixelRatio(window.devicePixelRatio);

    THREE.Scene.prototype.thinkrium_scene.renderer.shadowMapEnabled = true;

    THREE.Scene.prototype.thinkrium_scene.loading_manager = new THREE.LoadingManager();

    THREE.Scene.prototype.thinkrium_scene.loader = new THREE.ColladaLoader();


    THREE.Scene.prototype.thinkrium_scene.renderer.setClearColor(0xccccee);

    THREE.Scene.prototype.thinkrium_scene.renderer.setSize(window.innerWidth, window.innerHeight);

    THREE.Scene.prototype.thinkrium_scene.add_lights();

    document.getElementById("container").appendChild(this.renderer.domElement);

    THREE.Scene.prototype.thinkrium_scene.scene.add(this.camera);

    THREE.Scene.prototype.thinkrium_scene.camera.position.set( 0, 2, 3 );

    THREE.Scene.prototype.thinkrium_scene.camera.lookAt(0, 0, 0);

    THREE.Scene.prototype.thinkrium_scene.load("themes/TheThinkrium/js/front_page/peterweb.dae");
}

// add_lights
// params: none
// functions: adds the lights to the scene
// returns: none
add_lights() {

    THREE.Scene.prototype.thinkrium_scene.ambientLight = new THREE.AmbientLight(0xffffff);
    THREE.Scene.prototype.thinkrium_scene.scene.add(
        THREE.Scene.prototype.thinkrium_scene.ambientLight
    );

}

// loader_setup
// params: object - three js scene context
// functions: loads the model from blender
// returns: none
loader_setup(context) {


    var animations = context.animations;
    var avatar = context.scene;



    avatar.traverse( function ( node ) {
        if ( node.isSkinnedMesh ) {
            node.frustumCulled = false;
        }
    } );

    var mixer = new THREE.AnimationMixer( avatar );

    mixer.clipAction( animations[ 0 ] ).play();

    console.log(THREE.Scene.prototype.thinkrium_scene);
    THREE.Scene.prototype.thinkrium_scene.scene.add(avatar);

}

// loader_pretext
// params: xhr - the loading info
// functions : uses the xhr to describe how much information is left to load
// returns: none
loader_pretext(xhr) {
    console.log(Math.floor((xhr.loaded / xhr.totalSize) * 100));

}

// loading_errors
// params: error - error context
// functions : logs errors to  debug
// returns : none
loading_errors(err) {
    console.log(err);
}

// load
// params: name - the name of the model
// functions: loads the model 
// returns: none
load(name) {

    THREE.Scene.prototype.thinkrium_scene.loader.load(
        name, 
        THREE.Scene.prototype.thinkrium_scene.loader_setup, 
        THREE.Scene.prototype.thinkrium_scene.loader_pretext, 
        THREE.Scene.prototype.thinkrium_scene.loading_errors
    );
}


// get_renderer
// params: none
// functions : gets the renderer
// returns: renderer 
get_renderer() {
    return THREE.Scene.prototype.thinkrium_scene.renderer;    
}

// get_renderer
// params: none
// functions : gets the renderer
// returns: renderer 
get_scene() {
    return THREE.Scene.prototype.thinkrium_scene.scene;    
}

// get_renderer
// params: none
// functions : gets the renderer
// returns: renderer 
get_camera() {
    return THREE.Scene.prototype.thinkrium_scene.camera;    
}

好吧...

我无法在场景中得到我的模型。...我认为是因为我失去了上下文。

但是当我用console.log制作原型时,它的内容就不止于此了...

我很困惑...

最初,我只有THREE.Scene.prototype.thinkrium_scene作为此对象

但是当我进入回调时,我失去了作用域

我将此对象原型化为THREE.Scene,但这似乎无关紧要

我似乎无法将上下文绑定到任何上下文以使此对象脱离加载程序回调

我很迷茫

2 个答案:

答案 0 :(得分:0)

哇,这很难看懂代码。您必须非常喜欢打字。所有这些行的内容是什么?

THREE.Scene.prototype.thinkrium_scene.

您似乎正在为每个场景初始化渲染器?应该只有一个。

其余代码似乎正常(据我所看到的字母丛林),我怀疑没有错误消息吗? 也许您导出的模型很小,甚至很大?尝试设置比例。

如果仅添加带有cubeGeometry的three.mesh,会发生什么?可见吗?

答案 1 :(得分:0)

我没有意识到它,但是它没有运行的原因是我没有正确调用我的rAF。...我对此表示感谢