スタートページJavascriptCANVASWebGL

WebGL Three.js CANVAS での位置関係


Three.js での CANVAS の座標系におけるオブジェクト(被写体)とカメラの位置関係を扱います。
カメラの位置 cx= cy= cz=
カメラの視角 ca=
被写体のサイズ:sizex= sizey= sizez=
被写体の位置 positionx= positiony= positionz=
被写体の回転 rotationx= rotationy= rotationz=
●座標系

    // 座標軸を表示  通常は不要
    var axes = new THREE.AxesHelper(1000); // 1000 は長さ
    scene.add(axes);

 ここでは CANVAS が width(横幅) = 400, height(縦幅) = 400 としています。
  Three.js では、CANVAS の中央を原点とし、xを横軸、yを縦軸にして、
 z軸が画面と垂直方向にあるという座標軸にしています。
 その目盛りは、CANVAS の1画素を 2 にしているようです(未確認)。
 すなわち、(-400,-400)~(400,400) が (x,y) のとれる範囲です。
 y軸が、上が大きい方向になることに留意してください。

●オブジェクト(被写体)の作成(カメラの後に記述)

    // ====================== オブジェクト(被写体)を作成
    var geometry = new THREE.BoxGeometry(sizex, sizey, sizez);  // 被写体の形状とサイズ
    var material = new THREE.MeshNormalMaterial();              // 被写体の表面 ここでは省略時指定とした
    var box = new THREE.Mesh(geometry, material);               // 被写体の命名
    box.position.set(positionx, positiony, positionz);            // 被写体の位置
    scene.add(box);                                               // 被写体の登録(表示はレンダリングで行う)

被写体の位置
  position を与えて確認してください。
 
  Z軸は画面垂直方向なので (x,y) 座標位置に見える
被写体のサイズ
 size を変えてみてください。その単位は「被写体の位置」と同じです。
  なお、rotation を変えると被写体の傾き(見る角度)が変わります。(これはレンダリングで記述)
 
●カメラの位置(オブジェクトの前に記述)

    // ========================================== カメラを作成
    var camera = new THREE.PerspectiveCamera(ca, width / height);
    camera.position.set(cx, cy, cz);

 cx=0, cy=0, cz=1000, ca=45 とは、
  原点の手前1000の位置から、視覚 45°で見た被写体です。
 cx=200 カメラを (200,0) の手前に移動。全体が左(Xの負側)に移動します。
 cy=200 カメラを (0,200) の手前に移動。全体が下(Yの負側)に移動します。
 cz 想定空間の外から見ることを前提としているので、cz > 400 でなければいけません
    近づけると大きく見えます。
  ca 視覚を広くする(広角にする)と小さく見えます。 
レンダリング’画面表示)

    // ====================== レンダリング
    box.rotation.x = rotationx;      // 回転方向 x, y, z
    box.rotation.y = rotationy;
    box.rotation.z = rotationz;

    renderer.render(scene, camera);  // レンダリング これでカメラから見た画面を表示する