前端Three.js入门(一)-Three的第一个简单的页面

06-01 1149阅读

前言

小编想学点3d酷炫效果,迫不及died的点开了b站,立马点击第一个《老陈打码》的视频,开始了我的Three.js美妙(痛苦)之旅…先附上官网链接:https://threejs.org/

1.Three的简单3D页面

首先,我们可以在终端新建一个文件夹,命名为01-three初学习。然后在终端开始我们的项目安装。

# 初始化项目01-start_three
npm init vite@latest
# 一开始我们不用任何的框架,选择Vanilla即可,然后再选择JavaScript

然后修改style.css的代码如下,可以把样式放进public的css下面(public/css)

* {
  margin: 0;
  padding: 0;
}
canvas {
  display: block;//将元素设置为块级元素,使其占据一整行
  position: fixed;//将元素固定在视口中,即使页面滚动,它也不会移动。
  left: 0;
  top: 0;
  width: 100vw;
  height: 100vh;
}

然后我们删除main.js文件。然后在index.html文件里面先引入css样式。

 

然后我们在终端开始安装three.js

npm install three

安装好之后我们就可以在main.js里面开始创建我们的第一个3d页面。

1-导入three.js

import * as THREE from 'three'

2-创建场景与相机

//创建场景
const scene = new THREE.Scene()
//创建相机
const camera = new THREE.PerspectiveCamera(
  45,//视角
  window.innerWidth / window.innerHeight,//宽高比
  0.1,//近平面
  1000//远平面
);

3-创建渲染器

  • 这里创建了一个WebGL渲染器实例。WebGL是一种基于OpenGL ES的JavaScript API,用于在浏览器中渲染2D和3D图形。
  • THREE.WebGLRenderer是Three.js中用于WebGL渲染的核心类,它会利用GPU硬件加速来高效地渲染3D场景。
  • renderer.domElement是渲染器生成的元素,它是WebGL渲染的载体。
  • 通过将renderer.domElement添加到document.body中,渲染器生成的3D内容会显示在网页中。
    //创建渲染器
    const renderer = new THREE.WebGLRenderer();
    renderer.setSize(window.innerWidth, window.innerHeight);
    document.body.appendChild(renderer.domElement);//将渲染器添加到body中
    

    4-创建几何体、材质和网格

    1. 几何体(Geometry)

    几何体定义了3D物体的形状和结构,即物体的顶点、边和面。它描述了物体在三维空间中的几何信息。

    1. 材质(Material)

    材质定义了物体的外观,包括颜色、纹理、透明度、光照效果等。它决定了物体如何与光线交互以及如何被渲染。

    1. 网格(Mesh)

    网格是将几何体和材质结合起来,形成一个可以渲染的3D物体。它是几何体和材质的载体,决定了物体在场景中的位置、旋转和缩放。

    //创建几何体
    const geometry = new THREE.BoxGeometry(1, 1, 1);
    //创建材质
    const material = new THREE.MeshBasicMaterial({ color: 0x00ff00 });
    //创建网格
    const cube = new THREE.Mesh(geometry, material);
    //将网格添加到场景中
    scene.add(cube);
    

    5-我们可以设置一下相机的位置

    1·相机的作用:

    前端Three.js入门(一)-Three的第一个简单的页面
    (图片来源网络,侵删)
    • 相机是观察3D场景的“眼睛”,它决定了我们能看到什么以及如何看到。
    • 在Three.js中,相机(如PerspectiveCamera)定义了视角、视野范围(FOV)、近平面、远平面等参数,用于渲染场景中的可见部分。

      2·为什么需要设置相机位置:

      (1) 物体不可见

      前端Three.js入门(一)-Three的第一个简单的页面
      (图片来源网络,侵删)
      • 如果相机和物体都位于原点,相机可能会“卡”在物体内部,导致无法正确渲染物体。
      • 例如,你的立方体位于原点,如果相机也位于原点,相机可能会被立方体遮挡,导致画面一片空白。

        (2) 视角不合适

        • 如果相机离物体太近或太远,可能会导致物体在画面中显得过大或过小,影响视觉效果。
        • 例如,如果相机离立方体太近,可能只能看到立方体的一部分;如果太远,立方体会显得很小。

          (3) 无法控制观察方向

          前端Three.js入门(一)-Three的第一个简单的页面
          (图片来源网络,侵删)
          • 相机的位置决定了观察的方向。通过调整相机的位置,可以控制从哪个角度观察场景。
          • 例如,将相机放在立方体的前方、侧面或上方,会得到不同的视觉效果。
            //设置相机位置
            camera.position.set(0, 0, 5);
            camera.lookAt(0, 0, 0)//相机看向原点
            

            6-开始渲染,可以使用循环渲染,让正方体动起来

            • animate函数是一个递归调用的渲染循环,它通过requestAnimationFrame实现动画效果。
            • 在每一帧中,立方体的旋转角度被更新,然后调用renderer.render重新渲染场景,从而实现立方体的动态旋转效果。
              //渲染循环
              function animate() {
                // 递归调用渲染函数
                requestAnimationFrame(animate);
                // 旋转立方体
                cube.rotation.x += 0.01;
                // 旋转立方体
                cube.rotation.y += 0.01;
                // 渲染场景和相机
                renderer.render(scene, camera);
              }
              animate();
              

              下面是完整代码:

              //导入three.js
              import * as THREE from 'three'
              //创建场景
              const scene = new THREE.Scene()
              //创建相机
              const camera = new THREE.PerspectiveCamera(
                45,//视角
                window.innerWidth / window.innerHeight,//宽高比
                0.1,//近平面
                1000//远平面
              );
              //创建渲染器
              const renderer = new THREE.WebGLRenderer();
              renderer.setSize(window.innerWidth, window.innerHeight);
              document.body.appendChild(renderer.domElement);//将渲染器添加到body中
              //创建几何体
              const geometry = new THREE.BoxGeometry(1, 1, 1);
              //创建材质
              const material = new THREE.MeshBasicMaterial({ color: 0x00ff00 });
              //创建网格
              const cube = new THREE.Mesh(geometry, material);
              scene.add(cube);//将网格添加到场景中
              //设置相机位置
              camera.position.set(0, 0, 5);
              camera.lookAt(0, 0, 0)//相机看向原点
              //渲染循环
              function animate() {
                // 递归调用渲染函数
                requestAnimationFrame(animate);
                // 旋转立方体
                cube.rotation.x += 0.01;
                // 旋转立方体
                cube.rotation.y += 0.01;
                // 渲染场景和相机
                renderer.render(scene, camera);
              }
              animate();
              

              2.使用vue开发threejs

              也是先初始化好项目 npm install vite@latest,项目名看自己。然后框架我们选择vue框架+JavaScript语言编程。

              然后我们进入项目 cd threejsvue,然后先安装好依赖 npm i 还有npm i three

              然后我们在App.vue文件里面简单清理一下代码:下面代码大家可以直接复制进去(是刚刚第一节的css代码)

              
              
                
              * { margin: 0; padding: 0; } body{ width: 100vw; height: 100vh; } canvas { display: block; position: fixed; left: 0; top: 0; width: 100vw; height: 100vh; }

              然后我们可以在 color: 0x00ff00 }); //创建网格 const cube = new THREE.Mesh(geometry, material); scene.add(cube);//将网格添加到场景中 //设置相机位置 camera.position.set(0, 0, 5); camera.lookAt(0, 0, 0)//相机看向原点 //渲染循环 function animate() { // 递归调用渲染函数 requestAnimationFrame(animate); // 旋转立方体 cube.rotation.x += 0.01; // 旋转立方体 cube.rotation.y += 0.01; // 渲染场景和相机 renderer.render(scene, camera); } animate();

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们。

相关阅读

目录[+]

取消
微信二维码
微信二维码
支付宝二维码