gpt4 book ai didi

与其他 GLTF 查看器相比,Javascript Three.Js GLTF 加载速度非常慢

转载 作者:行者123 更新时间:2023-12-04 09:31:49 27 4
gpt4 key购买 nike

您好,我正在尝试使用 Three.Js 实现 3D 模型查看器,但是我在加载时间方面遇到了问题,我不知道问题出在哪里。
作为一个例子,我试图在这里上传这个模型(下载链接):https://opensplit.com/gltf/assets/PromoModel.glb
您可以在此 gltf 查看器中进行测试,例如:https://gltf-viewer.donmccurdy.com/
它基本上会在几秒钟后弹出。
但是你可以在我的网站上看到它需要多长时间:https://opensplit.com/
同一个模型现在需要超过两分钟才能加载..这不可能是正确的,为什么这么慢?
这是我的代码:

<canvas id="canvas"></canvas>   
<br>
<div style="margin:15px; margin-bottom:0px;">
<progress id="load_lowPoly" value="0" max="100"></progress>

<div id="lowPoly_progress">Loading Raw Model</div>
</div>
<div id="progressElement" style="background: green; width:0%;"></div>
<div id="previewquali" style="margin:15px; margin-top:0px;">
Material Quality: loading..
</div>
<script src="../gltf/libraries/three.js"></script>
<script src="../gltf/libraries/OrbitControls.js"></script>
<script src="../gltf/libraries/GLTFLoader.js"></script>
<script src="../gltf/libraries/RGBELoader.js"></script>
<script src="../gltf/libraries/DRACOLoader.js"></script>
<script src="../gltf/libraries/EquirectangularToCubeGenerator.js"></script>
<script src="../gltf/libraries/PMREMGenerator.js"></script>
<script src="../gltf/libraries/PMREMCubeUVPacker.js"></script>

<script>
window.addEventListener( "resize", this.onWindowResize, false );
var manager = new THREE.LoadingManager();
var loader = new THREE.TextureLoader()
var windowHeight = 800;
var camera = new THREE.PerspectiveCamera( 47, (window.innerWidth/window.innerHeight) / windowHeight, 0.01, 100000 );
var renderer = new THREE.WebGLRenderer( { canvas: document.getElementById( "canvas" ), antialias: true, alpha: true } );
var controls = new THREE.OrbitControls( camera, renderer.domElement );
var scene = new THREE.Scene();
var loadAsset = true;
var percentComplete;
var gltfSource;
var envMap;
var mesh;
onWindowResize();
init();
animate();

function onWindowResize() {
camera.aspect = (window.innerWidth/1.15) / windowHeight;
camera.updateProjectionMatrix();
renderer.setSize( window.innerWidth/1.15, windowHeight );
}

function init() {
camera.position.z = 0;
camera.position.y = 0;
camera.position.x = 2000.00;
renderer.setPixelRatio( window.devicePixelRatio );
renderer.setSize( window.innerWidth/1.15, windowHeight );
renderer.physicallyCorrectLights = true;
renderer.gammaOutput = true;
renderer.gammaFactor = 2.8;
renderer.setClearColor( 0xf2f2f2, 1 );
updateWindow();
createCubeMap( "../gltf/hdri/machine_shop_02_1k.hdr", 1024 );
loadDraco6141012( "../gltf/assets/PromoModel.glb" );
}

function animate() {
requestAnimationFrame( animate );
controls.update();
renderer.render( scene, camera );

};

function createCubeMap( src, res ) {
new THREE.RGBELoader().setDataType( THREE.UnsignedByteType ).load( src, function ( texture ) {
var cubeGenerator = new THREE.EquirectangularToCubeGenerator( texture, { resolution: res } );
var pmremGenerator = new THREE.PMREMGenerator( cubeGenerator.renderTarget.texture );
var pmremCubeUVPacker = new THREE.PMREMCubeUVPacker( pmremGenerator.cubeLods );
envMap = pmremCubeUVPacker.CubeUVRenderTarget.texture;
cubeGenerator.update( renderer );
pmremGenerator.update( renderer );
pmremCubeUVPacker.update( renderer );
pmremGenerator.dispose();
pmremCubeUVPacker.dispose();
} );
}

function loadDraco6141012( src ) {
var loader = new THREE.GLTFLoader();
loader.setDRACOLoader( new THREE.DRACOLoader() );
loader.load( src, function( gltf ) {
gltf.scene.traverse( function ( child ) {
if ( child.isMesh ) {
child.material.envMap = envMap;
child.material.envMapIntensity = 0.8;
mesh = child;
}
} );
scene.add( gltf.scene );
}, function ( xhr ) {
if ( xhr.lengthComputable ) {
percentComplete = xhr.loaded / xhr.total * 100;
console.log( "Loading Model - " + Math.round(percentComplete, 2) + "%" );
document.getElementById("lowPoly_progress").innerHTML = "Loading Raw Model " + Math.round(percentComplete, 2) + "%";
document.getElementById("load_lowPoly").value = percentComplete;
}
} );
}

function updateWindow() {
onWindowResize();
}

</script>
我认为这是最简单的方法。但是正如您在我的网站上亲眼看到的那样,这需要永远加载。我该如何解决这个问题?

最佳答案

这是我的猜测:
您的网站速度很慢,因为它必须先下载 glb 文件,这需要一段时间。
您可能通过将 glb 文件下载到您的计算机并将其拖到查看器中来将其与 Dons 网站进行比较。这样下载就已经完成了,一切都在您的计算机上本地进行,因此您不必再等待......当然这更快。
以后怎么解决这样的问题?在 Chrome 中打开开发人员工具,转到“性能”并开始录制。刷新您的网页。当模型可见时,停止录制。现在,您可以在分析器中的渲染帧下方看到一个名为“网络”的小下拉列表(或类似的内容)。如果您打开它,您将看到加载 .glb 文件需要 1.2 分钟。

关于与其他 GLTF 查看器相比,Javascript Three.Js GLTF 加载速度非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62813052/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com