[Three.js]3 Dオブジェクトのレンダリングと表示


Three.js


Threeは、JavaScriptライブラリでWebGLを簡単に処理します.jsを使用します.

HTML

<head>
    <title>Scene</title>
    <script type="text/javascript" src="../libs/three.js"></script>
    <style>
        body {
            margin: 0;
            overflow: hidden;
        }
    </style>
</head>
<body>

<!-- Div which will hold the Output -->
<div id="WebGL-output">
</div>

Sceneの追加


three.jsには3 Dオブジェクトからなるシーン(Scene)があります.
Sceneは、レンダリングするすべてのオブジェクト、カメラ、光源を格納するコンテナです.
var scene = new THREE.Scene();

カメラの追加


Sceneをレンダリングすると、シーンがどの時点にあるかによって異なるシーンが表示されます.
ポイントをCameraとして定義します.
カメラには、PerspectiveCameraとOrthographicCameraの2種類があります.
  • PerspectiveCamera:日常生活で見られる外観.
  • OrthographicCamera:直交カメラは、視点からの距離にかかわらず、全ての物体が同じ大きさです.
  • THREE.PerspectiveCamera(fov, aspect, near, far)
  • fov — Camera frustum vertical field of view.
  • aspect — Camera frustum aspect ratio.
  • near — Camera frustum near plane.
  • far — Camera frustum far plane.
  • var camera = new THREE.PerspectiveCamera(45, window.innerWidth / window.innerHeight, 0.1, 1000);
    

    Renderの追加


    このシーンをディスプレイなどの出力デバイスに出力できるレンダーがあります.つまり、そのシーンをレンダリングできます.
    var renderer = new THREE.WebGLRenderer({ antialias: true });
    renderer.setClearColorHex();
    renderer.setClearColor(new THREE.Color(0xEEEEEE));
    renderer.setSize(window.innerWidth, window.innerHeight);
  • ターゲットエッジを滑らかにするため、リバースパターンtrueを使用します.
  • AxishHelperの作成(座標系)

    var axes = new THREE.AxisHelper(20);
    scene.add(axes);

    Planeの追加(下部)

    var planeGeometry = new THREE.PlaneGeometry(60, 20); // 가로, 세로
    var planeMaterial = new THREE.MeshBasicMaterial({color: 0xcccccc});
    var plane = new THREE.Mesh(planeGeometry, planeMaterial); // 형태, 재질 합쳐주는 역할
    
    // rotate and position the plane
    plane.rotation.x = -0.5 * Math.PI;
    plane.position.x = 15;
    plane.position.y = 0;
    plane.position.z = 0;
    
    // add the plane to the scene
    scene.add(plane);
  • planeデフォルト値は垂直なので水平になるように回転します.
  • Cubeの作成

    // create a cube
    var cubeGeometry = new THREE.BoxGeometry(4, 4, 4);
    var cubeMaterial = new THREE.MeshBasicMaterial({color: 0xff0000, wireframe: true}); // 광원의 영향을 받지 않기 때문에 그림자를 만들지 못한다.
    var cube = new THREE.Mesh(cubeGeometry, cubeMaterial);
    
    // position the cube
    cube.position.x = -4;
    cube.position.y = 3;
    cube.position.z = 0;
    
    // add the cube to the scene
    scene.add(cube);

    スフィアの作成

    // create a sphere
    var sphereGeometry = new THREE.SphereGeometry(4, 20, 20);
    var sphereMaterial = new THREE.MeshBasicMaterial({color: 0x7777ff, wireframe: true});
    var sphere = new THREE.Mesh(sphereGeometry, sphereMaterial);
    
    // position the sphere
    sphere.position.x = 20;
    sphere.position.y = 4;
    sphere.position.z = 2;
    
    // add the sphere to the scene
    scene.add(sphere);

    カメラの追加

    // position and point the camera to the center of the scene
    camera.position.x = -30;
    camera.position.y = 40;
    camera.position.z = 30;
    camera.lookAt(scene.position);

    Rendering

     // add the output of the renderer to the html element
    document.getElementById("WebGL-output").appendChild(renderer.domElement);
    
    // render the scene
    renderer.render(scene, camera);

    結果



    REFERENCE

  • https://github.com/josdirksen/learning-threejs