ホームページ >ウェブフロントエンド >jsチュートリアル >Three.js でシーンを作成する方法
前のセクションでは、シーンへのオブジェクトの追加について説明しました。この記事では、理解を深めていただくために、各機能ポイントについて詳しく説明する予定です。一方で、私は困っている人たちを
助けたいと思っています。
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>
以上がThree.js でシーンを作成する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。