1. Einige theoretische Erklärungen zur Verwendung von Three.js
1. Bitte beachten Sie die offizielle Website-Adresse https:// threejs.org/
2. js < Um tatsächlich etwas mit Three.js anzeigen zu können, benötigen wir drei Dinge: Eine Szene, eine Kamera und einen Renderer, damit wir die Szene mit der Kamera rendern können.
3 Eine Szene, eine Kamera eine Kamera und ein Renderer ein Renderer.
3. Fallstudie mit Three.js zum Zeichnen eines rotierenden Würfels
Das Implementierungseffektdiagramm sieht wie folgt aus
Fallfall-Quellcode
1. Szene Eine Szene ist ein dreidimensionaler Raum. Deklarieren Sie ein Objekt namens [scene] mithilfe der Klasse [Scene].<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>用threejs构建室内模型</title> <style> #canvas-frame { width: 100%; height: 600px; } </style> </head> <body onload="threeStart()"> <div id="canvas-frame" ></div> </body> <script type="text/javascript" src="./lib/three.js" ></script> <script type="text/javascript"> var renderer, //渲染器 width = document.getElementById('canvas-frame').clientWidth, //画布宽 height = document.getElementById('canvas-frame').clientHeight; //画布高 //初始化渲染器 function initThree(){ renderer = new THREE.WebGLRenderer({ antialias : true //canvas: document.getElementById('canvas-frame') }); renderer.setSize(width, height); renderer.setClearColor(0xFFFFFF, 1.0); document.getElementById('canvas-frame').appendChild(renderer.domElement); renderer.setClearColor(0xFFFFFF, 1.0); } //初始化场景 var scene; function initScene(){ scene = new THREE.Scene(); } var camera; function initCamera() { //透视相机 camera = new THREE.PerspectiveCamera(45, width/height , 1, 10000); camera.position.x = 50; camera.position.y = 150; camera.position.z =150; camera.up.x = 0; camera.up.y = 1; //相机朝向--相机上方为y轴 camera.up.z = 0; camera.lookAt({ //相机的中心点 x : 0, y : 0, z : 0 }); // camera 正交相机 /*camera = new THREE.OrthographicCamera(-300, 300, 100, -100, 1, 10000); camera.position.x = 250; camera.position.y = 100; camera.position.z = 1800; camera.up.x = 0; camera.up.y = 1; //相机朝向--相机上方为y轴 camera.up.z = 0; camera.lookAt({ //相机的中心点 x : 0, y : 0, z : 0 });*/ } function initLight(){ // light--这里使用环境光 //var light = new THREE.DirectionalLight(0xffffff); /*方向性光源*/ //light.position.set(600, 1000, 800); var light = new THREE.AmbientLight(0xffffff); //模拟漫反射光源 light.position.set(600, 1000, 800); //使用Ambient Light时可以忽略方向和角度,只考虑光源的位置 scene.add(light); } function initObject(){ //初始化对象 //初始化地板 initFloor(); } function initGrid(){ //辅助网格 var helper = new THREE.GridHelper( 1000, 50 ); helper.setColors( 0x0000ff, 0x808080 ); scene.add( helper ); } function initFloor(){ //创建一个立方体 var geometry = new THREE.BoxGeometry(80, 20, 80); for ( var i = 0; i < geometry.faces.length; i += 2 ) { var hex = Math.random() * 0xffffff; geometry.faces[ i ].color.setHex( hex ); geometry.faces[ i + 1 ].color.setHex( hex ); } var material = new THREE.MeshBasicMaterial( { vertexColors: THREE.FaceColors} ); //将material材料添加到几何体geometry var mesh = new THREE.Mesh(geometry, material); mesh.position = new THREE.Vector3(0,0,0); scene.add(mesh); } //初始化页面加载 function threeStart(){ //初始化渲染器 initThree(); //初始化场景 initScene(); //初始透视化相机 initCamera(); //初始化光源 initLight(); //模型对象 initObject(); //初始化网格辅助线 initGrid(); renderer.render(scene, camera); //实时动画 //animation(); } function animation(){ //渲染成像 var timer = Date.now()*0.0001; camera.position.x = Math.cos(timer)*100; camera.position.z = Math.sin(timer)*100; camera.lookAt(scene.position); renderer.render(scene, camera); requestAnimationFrame(animation); } </script> </html>
2. Hinweise zur PerspectiveCamera-Perspektivkamera im obigen Fall
1. Die Standardbeobachtungsrichtung der Kamera zeigt in die negative Richtung der Z-Achse (d. h. in Richtung). Wenn sich also die Koordinaten ändern, richten Sie die Kamera auf den Ursprung, um das Objekt zu beobachten.
2. Verwenden Sie die LookAt-Methode, um die Mitte des Sichtfelds der Kamera festzulegen. Der Parameter von „lookAt()“ ist ein Objekt, dessen Attribute die Mittelpunktskoordinaten „x“, „y“ und „z“ enthalten.
3. In diesem Fall wird die Perspektivkamera verwendet (je näher das Objekt vom Standpunkt aus ist, desto größer ist es und das entfernte Objekt wird kleiner dargestellt), was mit der Art und Weise übereinstimmt, wie wir Objekte sehen Alltag. )
4. Stellen Sie die Aufwärtsrichtung der Kamera auf die positive y-Achse ein. camera.up.x = 0; //Kameraausrichtung – die obere Richtung der Kamera ist die y-Achsen-Kamera ,weit) Perspektivische Kamera
Sichtfeldwinkel: fov Je größer der Sichtfeldwinkel (manchmal auch Aufnahmeentfernung genannt), desto kleiner sind die Objekte in der Szene. Je kleiner der Sichtfeldwinkel vergrößert die Objekte in der Szene
camera.up.x = 0; camera.up.y = 1; //相机朝向--相机上方为y轴 camera.up.z = 0;
4. Die dimensionale Ebene wird als dreidimensionale Darstellung bezeichnet. Im Allgemeinen bezeichnen wir den Rendervorgang als Renderer.
Das Obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels jedem beim Lernen oder Arbeiten helfen kann.
function animation(){ //相机围绕y轴旋转,并且保持场景中的物体一直再相机的视野中 //实时渲染成像 var timer = Date.now()*0.0001; camera.position.x = Math.cos(timer)*100; camera.position.z = Math.sin(timer)*100; camera.lookAt(scene.position); renderer.render(scene, camera); requestAnimationFrame(animation); }