Das Hauptbeispiel dieses Artikels stellt das Laden des obj-Modells durch three.js vor. Three.js ist ein WebGL-Framework, das aufgrund seiner Benutzerfreundlichkeit weit verbreitet ist. Wenn Sie WebGL erlernen möchten, ist es eine gute Wahl, diese komplizierten nativen Schnittstellen aufzugeben und mit diesem Framework zu beginnen. Okay, lassen Sie mich Ihnen das Laden des OBJ-Modells von three.js über einen Code vorstellen. Der spezifische Code lautet wie folgt:
<!DOCTYPE html> <html> <head> <script type="text/javascript" src="libs/three.js"></script> <script type="text/javascript" src="libs/OBJLoader.js"></script> <script type="text/javascript"> var scene = null; var camera = null; var renderer = null; var mesh = null; var id = null; function init() { renderer = new THREE.WebGLRenderer({//渲染器 canvas: document.getElementById('mainCanvas')//画布 }); renderer.setClearColor(0x000000);//画布颜色 scene = new THREE.Scene();//创建场景 camera = new THREE.OrthographicCamera(-5, 5, 3.75, -3.75, 0.1, 100);//正交投影照相机 camera.position.set(15, 25, 25);//相机位置 camera.lookAt(new THREE.Vector3(0, 2, 0));//lookAt()设置相机所看的位置 scene.add(camera);//把相机添加到场景中 var loader = new THREE.OBJLoader();//在init函数中,创建loader变量,用于导入模型 loader.load('libs/port.obj', function(obj) {//第一个表示模型路径,第二个表示完成导入后的回调函数,一般我们需要在这个回调函数中将导入的模型添加到场景中 obj.traverse(function(child) { if (child instanceof THREE.Mesh) { child.material.side = THREE.DoubleSide; } }); mesh = obj;//储存到全局变量中 scene.add(obj);//将导入的模型添加到场景中 }); var light = new THREE.DirectionalLight(0xffffff);//光源颜色 light.position.set(20, 10, 5);//光源位置 scene.add(light);//光源添加到场景中 id = setInterval(draw, 20);//每隔20s重绘一次 } function draw() {//们在重绘函数中让茶壶旋转: renderer.render(scene, camera);//调用WebGLRenderer的render函数刷新场景 mesh.rotation.y += 0.01;//添加动画 if (mesh.rotation.y > Math.PI * 2) { mesh.rotation.y -= Math.PI * 2; } } </script> </head> <body onload="init()"> <canvas id="mainCanvas" width="800px" height="600px" ></canvas> </body> </html>
Sehen wir uns an, wie man Three.js verwendet OBJ- und MTL-Dateien laden
OBJ und MTL sind die geometrischen Modelldateien und Materialdateien des 3D-Modells.
In der neuesten Three.js-Version (r78) ist die vorherige OBJMTLLoader-Klasse veraltet.
Um nun OBJ- und MTL-Dateien zu laden, müssen Sie die beiden Klassen OBJLoader und MTLLoader kombinieren, um dies zu erreichen, was auch betriebliche Flexibilität bietet.
Im folgenden Code wird MTLLoader zuerst zum Laden der egg.mtl-Materialdatei verwendet, und dann wird das Material auf ein OBJLoader-Objekt zur Anwendung beim Laden des obj-Modells gesetzt.
onProgress ist die Rückruffunktion des Ladevorgangs und onError ist die Fehlerbehandlungsfunktion.
// model 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) {}; THREE.Loader.Handlers.add(/\.dds$/i, new THREE.DDSLoader()); var mtlLoader = new THREE.MTLLoader(); mtlLoader.setPath('/uploads/160601/obj/'); mtlLoader.load('egg.mtl', function(materials) { materials.preload(); var objLoader = new THREE.OBJLoader(); objLoader.setMaterials(materials); objLoader.setPath('/uploads/160601/obj/'); objLoader.load('egg.obj', function(object) { object.position.y = -0.5; scene.add(object); }, onProgress, onError); });
Verwandte Empfehlungen:
Erklärung zum Laden des externen Modells von Three.js
Detaillierte Erläuterung der lokalen Ausführungsmethode von Three.js
JS-Bibliothek Three.js grundlegende Einführung
Das obige ist der detaillierte Inhalt vonBeispiele zur Erläuterung des Ladens des Obj-Modells durch three.js. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!