如何在Three.js中加载.obj 3D模型?

时间:2016-09-20 18:39:23

标签: javascript three.js .obj

根据您的建议,这里有更新的代码

 var scene = new THREE.Scene();
    var camera = new THREE.PerspectiveCamera( 75,        window.innerWidth/window.innerHeight, 0.1, 1000 );
    var element = document.getElementById("container");

var renderer = new THREE.WebGLRenderer( { alpha: true } ); renderer.setSize( window.innerWidth, window.innerHeight ); element.appendChild( renderer.domElement ); var loader = new THREE.OBJLoader(); loader.load( '3D Model/Tiend3D.obj', function ( object ) { scene.add( object ); }); function render() { window.requestAnimationFrame( render ); renderer.render( scene, camera ); } render();

这是我用来导入3D模型的代码,但它根本不起作用,我确保通过在其中一个模型中更改3D模型的路径来加载3D模型我的路径的例子很好,并且我看了那个例子的代码,但是有很多我不熟悉的东西,所以我的问题是加载.obj文件并添加它的正确方法是什么现场。

2 个答案:

答案 0 :(得分:1)

在您的代码中,您只能在加载模型之前渲染场景一次。如果不重新渲染,向场景添加内容将不会产生任何可见效果。

通常,WebGL渲染是在requestAnimationFrame驱动的循环中完成的,因此它会不断运行以获得不断更新的视觉场景。

function render() {

    window.requestAnimationFrame( render );
    renderer.render( scene, camera );

}

render();

或者,如果您真的只想在加载对象后再渲染一帧,只需在onLoad回调中调用渲染:

function ( object ) {
    scene.add( object );
    renderer.render( scene, camera );
});

答案 1 :(得分:0)

如果你确定你的obj有材料并且你做了@Andy Ray告诉你的那个(window.requestAnimationFrame( render )函数)那么你可能需要灯才能真正看到场景,把它放在renderer声明之后

var ambient = new THREE.AmbientLight( 0x444444 );
scene.add( ambient );

var directionalLight = new THREE.DirectionalLight( 0xffeedd );
directionalLight.position.set( 0, 0, 1 ).normalize();
scene.add( directionalLight );