Heim > Web-Frontend > js-Tutorial > Hauptteil

Lernen Sie die Grundlagen von Three.js

高洛峰
Freigeben: 2017-01-21 09:21:11
Original
1952 Leute haben es durchsucht

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.

Lernen Sie die Grundlagen von Three.js 3. Fallstudie mit Three.js zum Zeichnen eines rotierenden Würfels

Das Implementierungseffektdiagramm sieht wie folgt aus

Lernen Sie die Grundlagen von Three.jsFallfall-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(&#39;canvas-frame&#39;).clientWidth, //画布宽
 height = document.getElementById(&#39;canvas-frame&#39;).clientHeight; //画布高
 //初始化渲染器
 function initThree(){
 renderer = new THREE.WebGLRenderer({
  antialias : true
  //canvas: document.getElementById(&#39;canvas-frame&#39;)
 });
 renderer.setSize(width, height);
 renderer.setClearColor(0xFFFFFF, 1.0);
 document.getElementById(&#39;canvas-frame&#39;).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>
Nach dem Login kopieren

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;
Nach dem Login kopieren
Seitenverhältnis: Seitenverhältnis

Der kürzeste Abstand zwischen der Kamera und dem Sichtvolumen: nah

Der weiteste Abstand zwischen der Kamera und dem Sichtvolumen : weit

Oben-Fall-Animationsprinzip: Die Kamera dreht sich um die y-Achse und hält die Objekte in der Szene in der Kamera Sichtfeld. Die von der Kamera aufgenommenen Bilder werden im Browser in Echtzeit angezeigt

Lernen Sie die Grundlagen von Three.js

Lernen Sie die Grundlagen von Three.js4. 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);
}
Nach dem Login kopieren
Weitere Artikel zum Erlernen der Grundlagen von Three.js finden Sie auf der chinesischen PHP-Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage