ホームページ  >  記事  >  ウェブフロントエンド  >  Three.js でシーンを作成する方法

Three.js でシーンを作成する方法

零下一度
零下一度オリジナル
2017-06-25 09:21:161797ブラウズ

前のセクションでは、シーンへのオブジェクトの追加について説明しました。この記事では、理解を深めていただくために、各機能ポイントについて詳しく説明する予定です。一方で、私は困っている人たちを

助けたいと思っています。

1. WEBGL を学習するときは、まず WebGL プログラムの作成に必要な手順を理解する必要があります。豚の角煮と漬物を作るのと同じように、どのような手順が必要ですか。

  • WebGL描画コンテキストを初期化

  • シェーダープログラムを初期化

  • モデルとデータキャッシュを構築

  • 描画とアニメーションを完成させる

これはプロセス指向のプログラミングです。ただし、three.js はオブジェクト指向プログラミングです。主にシーン(scene)、カメラ(camera)、レンダラー(renderer)の3つのオブジェクトを構築します。

これら 3 つのことは何を意味しますか?それが何なのか全く分かっていないようです。小さな例を挙げると、映画を例に挙げます。シーンはレイアウト空間全体のようなもので、カメラは撮影期間のようなものです。レンダラーは、撮影したムービーをフィルム、つまりコンピュータの画面に変換することに相当します。

シーンとスペースには 3D モデルとデータ モデルが含まれ、レンダラーにはシェーダーと WebGL 描画コンテキストが含まれます。

2. THREE.JS はシーン、カメラ、レンダラーを作成します

<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>Demo1(three入门第一篇)</title></head><body></body><script type="text/javascript" src="js/three.js?1.1.11"></script><script type="text/javascript">var width = window.innerWidth, height = window.innerHeight;var scene = new THREE.Scene(); //创建一个场景var camera = new THREE.PerspectiveCamera(75,width/height,1,5000); //创建相机/*three.js创建相机的方式有很多种,其中最长用的是PerspectiveCamera();
        远景相机,相当于人眼观察模式
        肯定有人会有疑问,这几个参数是什么意思呢?
        第一个 75 是 视角
        width / height 相机拍摄面的长宽比,别问为什么这么写,我也没搞清楚。反正设置为窗口
        的width/height图形就不会被压变形。
        下面两个是近裁剪面。和远裁剪面。     */var renderer = new THREE.WebGLRenderer();  //s上一篇用的是CSS3DRenderer//WebGLrenderer其实是用CANVAS渲染。    renderer.setSize(width,height);
    document.getElementsByTagName('body')[0].appendChild(renderer.domElement);</script></html>
ムービー、シーン、フィルムはすべて準備ができています。それでは、どのようにして俳優を表示できるでしょうか?つまり、上記の記事で述べたように、シーンにオブジェクトを追加するにはどうすればよいでしょうか?

3. アクターを追加します (3D キューブ)。

 //演员进场var geometry = new THREE.BoxGeometry(1,1,1);//BoxGeometry(); 3D盒子模型。包含了立方体所有顶点和填充面的对象。var material = new THREE.MeshBasicMaterial({color:'red'});//有个几何模型,我们需要材料为其上色。我们采用的时候 网孔基础材料MeshBasicMaterial();var mesh = new THREE.Mesh(geometry,material);//需要一个网孔,来承载几何模型和材料scene.add(mesh);  //把这个网孔放置到场景中去。camera.position.z = 5; //调节相机的位置。renderer.render(scene,camera); //把画面转换成相机,并播放

このように俳優がフレーム内に収まります。

4. この俳優をどう動かすか?

    //懂动起来。function loop(){
        requestAnimationFrame(loop);
        mesh.rotation.x += 0.1;  //X选择mesh.rotation.y += 0.1;  //Y旋转renderer.render(scene,camera); //把画面转换成相机,并播放    }
    loop();//解释下requestAnimationFrame这个api/* requestAnimationFrame这个函数,它用来替代 setInterval, 这个新接口具备多个优点,
     比如浏览器Tab切换后停止渲染以节约资源、
     和屏幕刷新同步避免无效刷新、在不支持该接口的浏览器中能安全回退为setInterval。
     简直就是动画神奇     */

その俳優がシーンに入ってきて、印象的な効果をもたらしました。最初の短編小説はほぼ完成しています。

5. コード全体 (当初は GitHup でホストされる予定でした)。遅すぎることがわかりました。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Demo1(three入门第一篇)</title>
</head>
<body>

</body>
<script type="text/javascript" src="js/three.js?1.1.11"></script>
<script type="text/javascript">var width = window.innerWidth, height = window.innerHeight;var scene = new THREE.Scene(); //创建一个场景var camera = new THREE.PerspectiveCamera(75,width/height,1,5000); //创建相机/*three.js创建相机的方式有很多种,其中最长用的是PerspectiveCamera();
        远景相机,相当于人眼观察模式
        肯定有人会有疑问,这几个参数是什么意思呢?
        第一个 75 是 视角
        width / height 相机拍摄面的长宽比,别问为什么这么写,我也没搞清楚。反正设置为窗口
        的width/height图形就不会被压缩。
        下面两个是近裁剪面。和远裁剪面。     */var renderer = new THREE.WebGLRenderer();  //s上一篇用的是CSS3DRenderer//WebGLrenderer其实是用CANVAS渲染。    renderer.setSize(width,height);
    document.getElementsByTagName('body')[0].appendChild(renderer.domElement);//演员进场var geometry = new THREE.BoxGeometry(1,1,1);//BoxGeometry(); 3D盒子模型。包含了立方体所有顶点和填充面的对象。var material = new THREE.MeshBasicMaterial({color:'red'});//有个几何模型,我们需要材料为其上色。我们采用的时候 网孔基础材料MeshBasicMaterial();var mesh = new THREE.Mesh(geometry,material);//需要一个网孔,来承载几何模型和材料scene.add(mesh);  //把这个网孔放置到场景中去。camera.position.z = 5; //调节相机的位置。//懂动起来。function loop(){
        requestAnimationFrame(loop);
        mesh.rotation.x += 0.1;  //X选择mesh.rotation.y += 0.1;  //Y旋转renderer.render(scene,camera); //把画面转换成相机,并播放    }
    loop();//解释下requestAnimationFrame这个api/* requestAnimationFrame这个函数,它用来替代 setInterval, 这个新接口具备多个优点,
     比如浏览器Tab切换后停止渲染以节约资源、
     和屏幕刷新同步避免无效刷新、在不支持该接口的浏览器中能安全回退为setInterval。
     简直就是动画神奇     */</script>
</html>
6. WebGL では Three.js が重要な役割を果たしていますが、中国語の API は本当に少ないです。一つ一つゆっくり積み上げていくだけです。

以上がThree.js でシーンを作成する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。