>  기사  >  웹 프론트엔드  >  Three.js JS 라이브러리 기본 소개

Three.js JS 라이브러리 기본 소개

巴扎黑
巴扎黑원래의
2017-09-15 09:15:562301검색

three.js는 사용 편의성으로 인해 널리 사용되는 webGL 프레임워크입니다. 아래에서는 Script House의 편집자가 사례를 통해 three.js의 기본 구성 방법을 설명합니다. 자세한 내용은 이 기사를 참조하세요

머리말

webGL을 사용하면 3D를 구현할 수 있습니다. 캔버스 효과. Three.js는 사용 편의성으로 인해 널리 사용되는 webGL 프레임워크입니다. webGL을 배우고 싶다면 복잡한 네이티브 인터페이스를 버리고 이 프레임워크부터 시작하는 것이 좋은 선택입니다.

블로거도 현재 three.js를 배우고 있는데 관련 정보가 매우 부족하고 공식 API 문서조차 매우 거칠다는 사실을 발견했습니다. 많은 효과에서는 천천히 코딩하고 혼자서 탐색해야 합니다. 그래서 이 튜토리얼을 작성하는 목적은 직접 요약하고 모든 사람과 공유하는 것입니다.

이 문서는 시작하기 튜토리얼 시리즈 중 첫 번째 문서입니다. 이번 글에서는 three.js의 기본 설정 방법을 설명하기 위해 간단한 데모를 예로 들어보겠습니다. 이 기사를 공부한 후에는 브라우저에서 3차원 그래픽을 그리는 방법을 배우게 됩니다!

준비

코드를 작성하기 전에 먼저 최신 three.js 프레임워크 패키지를 다운로드하고 페이지에 three.js를 도입해야 합니다. 물론 패키지에는 모든 사람이 배울 수 있는 많은 데모도 있습니다. ;

현재 webGL을 지원하는 브라우저는 Chrome이 가장 좋으며, Firefow가 뒤를 잇고 있으며, 국내 Aoyou와 Cheetah도 테스트 후 실행할 수 있습니다.

예제부터 시작해보세요!

먼저 다음과 같이 html을 빌드합니다.


<!DOCTYPE html>
<html>
 <head>
 <meta charset="UTF-8">
 <title>lesson1-by-shawn.xie</title>
 <!--引入Three.js-->
 <script src="Three.js"></script>
 <style type="text/css">
 p#canvas-frame{
  border: none;
  cursor: move;
  width: 1400px;
  height: 600px;
  background-color: #EEEEEE;
 }
 </style>
 </head>
 <body>
 <!--盛放canvas的容器-->
 <p id="container"></p>
 </body>
</html>

WebGL 그리기를 위한 캔버스 프레임과 동일한 크기의 영역을 준비합니다. 구체적으로:

(1) ID가 "canvas3d"인 p 요소를 body 태그에 추가합니다.

(2) 스타일 태그에 CSS 스타일 "canvas3d"를 지정합니다.

5ba626b379994d53f7acf72a64f9b697 태그를 작성할 필요는 없으며 캔버스를 보유하는 p만 정의하면 됩니다. 캔버스는 three.js에 의해 동적으로 생성됩니다.

다음으로 three.js의 기본 단계이기도 한 다음 5단계를 통해 간단한 3차원 모델을 작성해 보겠습니다.

1.3.js 렌더러

객체 설정 3차원 공간을 2차원 공간에 매핑하는 과정을 3차원 평면으로 렌더링하는 과정을 3차원 렌더링이라고 합니다. 일반적으로 우리는 렌더링 작업을 수행하는 소프트웨어를 렌더러라고 부릅니다. 구체적으로 다음과 같은 처리가 필요합니다.

(0) 전역 변수(객체) 선언

(1) 캔버스 "canvas-frame"의 높이와 너비를 가져옵니다.

(2) 렌더러 객체 생성(속성: 앤티앨리어싱 효과는 다음에 대해 유효함)

(3) 렌더러의 높이와 너비를 지정합니다(캔버스 프레임과 동일한 크기).

(4) [canvas3d] 요소에 [canvas] 요소를 추가합니다. 렌더러의 선명한 색상(clearColor)입니다.

//开启Three.js渲染器
var renderer;//声明全局变量(对象)
function initThree() {
 width = document.getElementById(&#39;canvas3d&#39;).clientWidth;//获取画布「canvas3d」的宽
 height = document.getElementById(&#39;canvas3d&#39;).clientHeight;//获取画布「canvas3d」的高
 renderer=new THREE.WebGLRenderer({antialias:true});//生成渲染器对象(属性:抗锯齿效果为设置有效)
 renderer.setSize(width, height );//指定渲染器的高宽(和画布框大小一致)
 document.getElementById(&#39;canvas3d&#39;).appendChild(renderer.domElement);//追加 【canvas】 元素到 【canvas3d】 元素中。
 renderer.setClearColorHex(0xFFFFFF, 1.0);//设置canvas背景色(clearColor)
}

2 카메라 설정하기

OpenGL(WebGL)에는 3차원 공간의 물체를 2차원 공간에 투영하는 방식으로 원근 투영과 직교 투영이라는 두 가지 유형의 카메라가 있습니다. 원근투영이란 시점에 가까운 물체는 크게, 멀리 있는 물체는 작게 그리는 방법입니다. 이는 우리가 일상에서 물체를 보는 방식과 일치합니다. 정사영은 시점으로부터의 거리에 상관없이 객체를 일정한 크기로 그리는 것을 의미하며, 건축, 디자인 등의 분야에서는 객체를 다양한 각도에서 그려야 하므로 이러한 투영법이 널리 사용됩니다. Three.js에서는 원근 투영 및 직교 투영에서 카메라를 지정할 수도 있습니다. 이 문서에서는 아래 단계에 따라 원근 투영 방법을 설정합니다.

(0) 전역 변수(객체)를 선언합니다.

(1) 원근 투영을 위해 카메라를 설정합니다.

(2) 카메라의 위치 좌표를 설정합니다. "z" 축 방향 ;

(4) 시야의 중심 좌표를 설정합니다. ​​​​

  //设置相机
 var camera;
 function initCamera() { 
 camera = new THREE.PerspectiveCamera( 45, width / height , 1 , 5000 );//设置透视投影的相机,默认情况下相机的上方向为Y轴,右方向为X轴,沿着Z轴朝里(视野角:fov 纵横比:aspect 相机离视体积最近的距离:near 相机离视体积最远的距离:far)
 camera.position.x = 0;//设置相机的位置坐标
 camera.position.y = 50;//设置相机的位置坐标
 camera.position.z = 100;//设置相机的位置坐标
 camera.up.x = 0;//设置相机的上为「x」轴方向
 camera.up.y = 1;//设置相机的上为「y」轴方向
 camera.up.z = 0;//设置相机的上为「z」轴方向
 camera.lookAt( {x:0, y:0, z:0 } );//设置视野的中心坐标
 }

3. 장면 설정하기 scene


장면은 3차원 공간입니다. [Scene] 클래스를 사용하여 [scene]이라는 객체를 선언합니다.  

  //设置场景
 var scene;
 function initScene() { 
 scene = new THREE.Scene();
 }

4. 광원 조명 설정


OpenGL(WebGL)의 3차원 공간에는 점광원과 스포트라이트 두 가지 유형이 있습니다. 또한, 점광원의 특수한 경우로서 평행광원(무선 고광원)도 있다. 또한 광원의 매개변수로 [주변광] 등의 설정도 가능합니다. 이에 맞춰 Three.js에서는 [Point Light], [Spot Light], [Direction Light], [Ambient Light]를 설정할 수 있습니다. OpenGL과 마찬가지로 장면에 여러 광원을 설정할 수 있습니다. 기본적으로 주변광과 기타 여러 광원의 조합입니다. 주변광을 설정하지 않으면 빛이 닿지 않는 표면이 너무 어두워집니다. 이 문서에서는 먼저 아래 단계에 따라 방향성 광원을 설정한 다음 주변광을 추가합니다.

(0) 전역 변수(객체) 선언

(1) 방향성 광원 설정

(2) 광원 벡터 설정

(3) 장면에 광원 추가

여기에서는 "DirectionalLight" 클래스를 사용합니다. 평행광원을 나타내는 [light ] 객체를 선언합니다

    //设置光源
 var light;
 function initLight() { 
 light = new THREE.DirectionalLight(0xff0000, 1.0, 0);//设置平行光源
 light.position.set( 200, 200, 200 );//设置光源向量
 scene.add(light);// 追加光源到场景
 }

5 객체 객체를 설정합니다

.

   这里,我们声明一个球模型   


   //设置物体
 var sphere;
 function initObject(){ 
 sphere = new THREE.Mesh(
  new THREE.SphereGeometry(20,20), //width,height,depth
  new THREE.MeshLambertMaterial({color: 0xff0000}) //材质设定
 );
 scene.add(sphere);
 sphere.position.set(0,0,0);
 }

最后,我们写一个主函数执行以上五步:


        //执行
 function threeStart() {
 initThree();
 initCamera();
 initScene(); 
 initLight();
 initObject();
 renderer.clear(); 
 renderer.render(scene, camera);
 }

这时,测试以上程序,你会发现浏览器窗口中出现了你绘制的球形模型:

总结

以上就是three.js的入门内容,我们核心的五步就是:

1.设置three.js渲染器

2.设置摄像机camera

3.设置场景scene

4.设置光源light

5.设置物体object

可能其中有些设置你还不太清楚,没关系,后面几篇文章会对以上五个主要步骤进行详细的讲解,敬请期待~~

本例完整代码:


<!DOCTYPE html>
<html>
 <head>
 <meta charset="UTF-8">
 <title>lesson1-by-shawn.xie</title>
 <!--引入Three.js-->
 <script src="Three.js"></script>
 <script type="text/javascript">
 //开启Three.js渲染器
 var renderer;//声明全局变量(对象)
 function initThree() {
 width = document.getElementById(&#39;canvas3d&#39;).clientWidth;//获取画布「canvas3d」的宽
 height = document.getElementById(&#39;canvas3d&#39;).clientHeight;//获取画布「canvas3d」的高
 renderer=new THREE.WebGLRenderer({antialias:true});//生成渲染器对象(属性:抗锯齿效果为设置有效)
 renderer.setSize(width, height );//指定渲染器的高宽(和画布框大小一致)
 document.getElementById(&#39;canvas3d&#39;).appendChild(renderer.domElement);//追加 【canvas】 元素到 【canvas3d】 元素中。
 renderer.setClearColorHex(0xFFFFFF, 1.0);//设置canvas背景色(clearColor)
 }
 //设置相机
 var camera;
 function initCamera() { 
 camera = new THREE.PerspectiveCamera( 45, width / height , 1 , 5000 );//设置透视投影的相机,默认情况下相机的上方向为Y轴,右方向为X轴,沿着Z轴朝里(视野角:fov 纵横比:aspect 相机离视体积最近的距离:near 相机离视体积最远的距离:far)
 camera.position.x = 0;//设置相机的位置坐标
 camera.position.y = 50;//设置相机的位置坐标
 camera.position.z = 100;//设置相机的位置坐标
 camera.up.x = 0;//设置相机的上为「x」轴方向
 camera.up.y = 1;//设置相机的上为「y」轴方向
 camera.up.z = 0;//设置相机的上为「z」轴方向
 camera.lookAt( {x:0, y:0, z:0 } );//设置视野的中心坐标
 }
 //设置场景
 var scene;
 function initScene() { 
 scene = new THREE.Scene();
 }
 //设置光源
 var light;
 function initLight() { 
 light = new THREE.DirectionalLight(0xff0000, 1.0, 0);//设置平行光源
 light.position.set( 200, 200, 200 );//设置光源向量
 scene.add(light);// 追加光源到场景
 }
 //设置物体
 var sphere;
 function initObject(){ 
 sphere = new THREE.Mesh(
  new THREE.SphereGeometry(20,20), //width,height,depth
  new THREE.MeshLambertMaterial({color: 0xff0000}) //材质设定
 );
 scene.add(sphere);
 sphere.position.set(0,0,0);
 }
 //执行
 function threeStart() {
 initThree();
 initCamera();
 initScene(); 
 initLight();
 initObject();
 renderer.clear(); 
 renderer.render(scene, camera);
 }
 </script>
 <style type="text/css">
 p#canvas3d{
  border: none;
  cursor: move;
  width: 1400px;
  height: 600px;
  background-color: #EEEEEE;
 }
 </style>
 </head>
 <body onload=&#39;threeStart();&#39;>
 <!--盛放canvas的容器-->
 <p id="canvas3d"></p>
 </body>
</html>

위 내용은 Three.js JS 라이브러리 기본 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.