关于THREEJS加载obj大模型问题?

冰点青蛙 2015-02-09 03:13:11
使用OBJMTLLoader() 一加载大的obj模型浏览器就崩溃,是不是方法没有用对?加载几兆的模型没问题,十几兆以上浏览器就到蹦的时候了。如何破?
	

/**
功 能:index页面主要js代码
创建者:goodnew
日 期:2015.02.09
*/
if ( ! Detector.webgl ) Detector.addGetWebGLMessage();

var camera, scene, material, renderer;

init();
animate();

function init() {

container = document.createElement( 'div' );
document.body.appendChild( container );

// set the camera
camera = new THREE.PerspectiveCamera(45, window.innerWidth / window.innerHeight, 1, 10000);
camera.position.set(100, 200, 400);


// scene

scene = new THREE.Scene();


// texture

var manager = new THREE.LoadingManager();
manager.onProgress = function ( item, loaded, total ){
console.log( item, loaded, total );
};

var texture = new THREE.Texture();

var onProgress = function ( xhr ) {
if ( xhr.lengthComputable ) {
var percentComplete = xhr.loaded / xhr.total * 100;
console.log( Math.round(percentComplete, 2) + '% downloaded' );
}
};

var onError = function ( xhr ) {
};

// model

var loader = new THREE.OBJMTLLoader();
loader.load( 'obj/02/02.obj', 'obj/02/02.mtl', function ( object ) {

object.traverse( function ( child ) {

if ( child instanceof THREE.Mesh ) {
//child.material.map = texture;
}
} );

object.position.x = 0;
object.position.y = 0;
object.position.z = 0;

object.scale.x = 0.5;
object.scale.y = 0.5;
object.scale.z = 0.5;

scene.add( object );

}, onProgress, onError );

// add subtle ambient lighting
var ambiColor = "#1c1c1c";
var ambientLight = new THREE.AmbientLight(ambiColor);
scene.add(ambientLight);

light = new THREE.DirectionalLight( 0xdfebff, 1.75 );
light.position.set( 50, 200, 100 );
light.position.multiplyScalar( 1.3 );

light.castShadow = true;
//light.shadowCameraVisible = true;

light.shadowMapWidth = 1024;
light.shadowMapHeight = 1024;

var d = 300;

light.shadowCameraLeft = -d;
light.shadowCameraRight = d;
light.shadowCameraTop = d;
light.shadowCameraBottom = -d;

light.shadowCameraFar = 1000;
light.shadowDarkness = 0.5;

scene.add( light );



renderer = new THREE.WebGLRenderer( { antialias: true } );
renderer.setPixelRatio( window.devicePixelRatio );
renderer.setSize( window.innerWidth, window.innerHeight );
renderer.setClearColor(0xEEEEEE);
container.appendChild( renderer.domElement );



var controls = new THREE.OrbitControls( camera, renderer.domElement );
window.addEventListener( 'resize', onWindowResize, false );
}

function animate() {
requestAnimationFrame( animate );
render();
}

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

function onWindowResize() {
camera.aspect = window.innerWidth / window.innerHeight;
camera.updateProjectionMatrix();

renderer.setSize( window.innerWidth, window.innerHeight );
}
...全文
11010 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
jinxv1987 2017-05-26
  • 打赏
  • 举报
回复
1、加内存;2、把obj文件转成js
qq_33291507 2016-11-23
  • 打赏
  • 举报
回复
单个模型几十兆没想到什么好办法,但如果是房间,分隔的部分,那么异步加载也许可以~
yzcw1989 2016-08-04
  • 打赏
  • 举报
回复
请问楼主这个问题解决了吗,加载100兆左右的模型现在能做到吗?
坏坏不乖乖 2016-03-02
  • 打赏
  • 举报
回复
全部转成json也许会改善一点
nocoolyoyo 2015-09-10
  • 打赏
  • 举报
回复
楼主是否有测试过OBJ模型在QQ浏览器下不显示的问题
sinat_28113813 2015-05-17
  • 打赏
  • 举报
回复
请问楼主有没有找到不错的办法加载模型呢?
冰点青蛙 2015-03-02
  • 打赏
  • 举报
回复
引用 1 楼 xmt1139057136 的回复:
加载的东西太多了,太大了。浏览器就是运行比较小的东西。几K的网页。或者部分大图片。太大了,就会卡死的。
感谢版主,其实是想做室内三维漫游,看一个例子挺不错的,想自己实现,大数据模型加载是避免不了的,不知道现在加载大数据通用的解决方式是什么?怎么实现的,求解? 例子:http://fr.special-t.com/media/ogreen/fr_FR/
业余草 2015-02-11
  • 打赏
  • 举报
回复
加载的东西太多了,太大了。浏览器就是运行比较小的东西。几K的网页。或者部分大图片。太大了,就会卡死的。

39,118

社区成员

发帖
与我相关
我的任务
社区描述
HTML5是构建Web内容的一种语言描述方式。HTML5是互联网的下一代标准,是构建以及呈现互联网内容的一种语言方式.被认为是互联网的核心技术之一。
社区管理员
  • HTML5社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧