Three.js 零基础保姆级教程

3 篇文章 0 订阅


一、Three.js 是什么?

1.介绍

Three.js是基于原生WebGL封装运行的三维引擎,在所有WebGL引擎中,Three.js是国内文资料最多、使用最广泛的三维引擎。

2.环境配置

js作为一个跨端语言,可作为IDE的软件有很多,笔者这里使用的是 websotrm,它的好处是改动一处便可直接显示。

在此给出Three.js的官方GitHub库,[Three.js-GitHub](https://github.com/mrdoob/three.js),请提前下载

3.WebGL和Three.js学习顺序?

引用自Three教程
如果你急于要实现一个Web3D功能,时间有限,也没有图形学基础,个人建议直接学习先Three.js即可,以后想深入掌握,可以学习原生WebGL和图形学相关知识。

如果时间比较充足,又希望有更大的成长空间,学习底层原生WebGL肯定是必要的,可以WebGL和Threejs结合着学习,顺序也不是非常重要。

二、麻雀虽小而五脏俱全的例子

1.引入资源包

<head>
    <meta charset="UTF-8">
    <title>第一个three.js文件_WebGL三维场景</title>
    <style>
        body {
            margin: 0;
            overflow: hidden;
            /* 隐藏body窗口区域滚动条 */
        }
    </style>
    <!--    引入three.js三维引擎-->
    <script src="./three.js-r95/build/three.js"></script>
    <!--    引入OrbitControls.js鼠标操作三维场景-->
    <script src="./three.js-r95/examples/js/controls/OrbitControls.js"></script>


</head>

2.创建场景和添加2个以上的3D对象

    /**
     * 创建场景对象Scene
     */
    var scene = new THREE.Scene();

    /**
     * 创建网格模型,并添加到场景
     */
    var geometry = new THREE.BoxGeometry(25, 50, 50); //创建一个立方体几何对象Geometry
    var material = new THREE.MeshLambertMaterial({
        color: 0xff00ff,  //颜色 16进制
        opacity:0.9,      //透明度 0-1
        transparent:true, //开启透明度,默认关闭
        wireframe:false   //线框,默认关闭
    }); //材质对象Material
    var mesh = new THREE.Mesh(geometry, material); //网格模型对象Mesh
    scene.add(mesh); //网格模型添加到场景中

    var geometry2 = new THREE.BoxGeometry(25, 50, 50); //创建一个球体几何对象
    var material2 = new THREE.MeshLambertMaterial({
        color: 0xffffff,
        opacity:0.9,      //透明度 0-1
        transparent:true  //开启透明度
    }); //材质对象Material2
    var mesh2 = new THREE.Mesh(geometry2,material2)
    mesh2.translateX(-100);
    mesh2.translateZ(-30);
    // mesh2.translateY(30); //球体网格模型沿Y轴正方向平移
    scene.add(mesh2)

(可选)3.添加辅助坐标系

    /**
     * 辅助坐标系  参数1000表示坐标系大小
     */
    var axisHelper = new THREE.AxisHelper(1000);
    scene.add(axisHelper)

4.光源和相机设置

    /**
     * 光源设置
     */
        //点光源
    var point = new THREE.PointLight(0xfffffff);
    point.position.set(100, 100, 100); //点光源位置
    scene.add(point); //点光源添加到场景中
    //环境光
    var ambient = new THREE.AmbientLight(0x444444);
    scene.add(ambient);


    /**
     * 相机设置
     */
    var width = window.innerWidth; //窗口宽度
    var height = window.innerHeight; //窗口高度
    var k = width / height; //窗口宽高比
    var s = 100; //三维场景显示范围控制系数,系数越大,显示的范围越大
    //创建相机对象
    // var camera = new THREE.OrthographicCamera(-s * k, s * k, s, -s, 1, 1000);
    var camera = new THREE.PerspectiveCamera( 45, width / height, 1, 1000 );
    camera.position.set(200, 0, 0); //设置相机位置
    camera.lookAt(scene.position); //设置相机方向(指向的场景对象)position

5.渲染得到结果

    /**
     * 创建渲染器对象
     */
    var renderer = new THREE.WebGLRenderer();
    renderer.setSize(width, height);//设置渲染区域尺寸
    renderer.setClearColor(0xb9d3ff, 1); //设置背景颜色
    document.body.appendChild(renderer.domElement); //body元素中插入canvas对象

    function render() {
        console.log(camera.position)
        renderer.render(scene,camera);//执行渲染操作
    }
    render();
    var controls = new THREE.OrbitControls(camera,renderer.domElement);//创建控件对象
    controls.addEventListener('change', render);//监听鼠标、键盘事件

结果图如下:
在这里插入图片描述

总结及完整源码

以上就是今天要讲的内容,本文仅仅简单介绍了Three.js的使用。

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>第一个three.js文件_WebGL三维场景</title>
    <style>
        body {
            margin: 0;
            overflow: hidden;
            /* 隐藏body窗口区域滚动条 */
        }
    </style>
    <!--    引入three.js三维引擎-->
    <script src="./three.js-r95/build/three.js"></script>
    <!--    引入OrbitControls.js鼠标操作三维场景-->
    <script src="./three.js-r95/examples/js/controls/OrbitControls.js"></script>


</head>

<body>
<script>
    /**
     * 创建场景对象Scene
     */
    var scene = new THREE.Scene();

    /**
     * 创建网格模型,并添加到场景
     */
    var geometry = new THREE.BoxGeometry(25, 50, 50); //创建一个立方体几何对象Geometry
    var material = new THREE.MeshLambertMaterial({
        color: 0xff00ff,  //颜色 16进制
        opacity:0.9,      //透明度 0-1
        transparent:true, //开启透明度,默认关闭
        wireframe:false   //线框,默认关闭
    }); //材质对象Material
    var mesh = new THREE.Mesh(geometry, material); //网格模型对象Mesh
    scene.add(mesh); //网格模型添加到场景中

    var geometry2 = new THREE.BoxGeometry(25, 50, 50); //创建一个球体几何对象
    var material2 = new THREE.MeshLambertMaterial({
        color: 0xffffff,
        opacity:0.9,      //透明度 0-1
        transparent:true  //开启透明度
    }); //材质对象Material2
    var mesh2 = new THREE.Mesh(geometry2,material2)
    mesh2.translateX(-100);
    mesh2.translateZ(-30);
    // mesh2.translateY(30); //球体网格模型沿Y轴正方向平移
    scene.add(mesh2)

    /**
     * 辅助坐标系  参数1000表示坐标系大小
     */
    var axisHelper = new THREE.AxisHelper(1000);
    scene.add(axisHelper)

    /**
     * 光源设置
     */
        //点光源
    var point = new THREE.PointLight(0xfffffff);
    point.position.set(100, 100, 100); //点光源位置
    scene.add(point); //点光源添加到场景中
    //环境光
    var ambient = new THREE.AmbientLight(0x444444);
    scene.add(ambient);


    /**
     * 相机设置
     */
    var width = window.innerWidth; //窗口宽度
    var height = window.innerHeight; //窗口高度
    var k = width / height; //窗口宽高比
    var s = 100; //三维场景显示范围控制系数,系数越大,显示的范围越大
    //创建相机对象
    // var camera = new THREE.OrthographicCamera(-s * k, s * k, s, -s, 1, 1000);
    var camera = new THREE.PerspectiveCamera( 45, width / height, 1, 1000 );
    camera.position.set(200, 0, 0); //设置相机位置
    camera.lookAt(scene.position); //设置相机方向(指向的场景对象)position

    /**
     * 创建渲染器对象
     */
    var renderer = new THREE.WebGLRenderer();
    renderer.setSize(width, height);//设置渲染区域尺寸
    renderer.setClearColor(0xb9d3ff, 1); //设置背景颜色
    document.body.appendChild(renderer.domElement); //body元素中插入canvas对象

    function render() {
        console.log(camera.position)
        renderer.render(scene,camera);//执行渲染操作
    }
    render();
    var controls = new THREE.OrbitControls(camera,renderer.domElement);//创建控件对象
    controls.addEventListener('change', render);//监听鼠标、键盘事件
</script>
</body>

</html>
  • 12
    点赞
  • 56
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: 如果你想开始学习three.js,可以从教程源代码入手。教程源码提供了一些示例和实例,可以启发你的创作灵感,也可以让你更快地理解three.js的基础知识。 在查看源码之前,你需要先安装three.js和web开发环境。安装完成后,你就可以开始查看源码了。 教程源码一般会有一些说明和注释,这些注释可以帮助你更好地理解代码的功能和实现方法。你可以先阅读这些注释,然后尝试运行代码,看代码是如何运作的。 当你理解了一些基础的代码后,你可以尝试自己写一些小程序,练习three.js的使用。这些小程序可能简单,但是可以帮助你加深对three.js的理解,并为今后更复杂的项目做好准备。 最重要的是,遇到问题不要担心,可以参考three.js社区和文档,也可以在网上寻找相关的教程和视频。通过不断摸索和学习,你一定能掌握three.js的使用技巧,创作出自己喜欢的作品。 ### 回答2: three.js是一个能够在网页上实现3D图形和动画效果的JavaScript库,可以用于创建各种有趣的3D场景和游戏。针对初学者,有很多的入门教程和示例代码可供学习和练习。 在网上搜索“three.js入门教程源代码”可以找到很多优秀的教程和示例代码,如three.js官方文档、CodePen、Github等。此外,同类的OpenGL和WebGL等技术也有很多优秀的资源可供参考。 对于初学者来说,建议先了解three.js的基本知识,如坐标系、场景、相机、灯光、材质、几何体等等。然后可以通过实践来加深理解,例如创建一个简单的立方体、平面、球体等。同时也可以尝试调整相机、灯光和材质等参数,看看会发生什么变化。 在学习过程中,遇到问题可以查阅文档或者在相关社区寻求帮助。同时也要多注重实践,通过参考示例代码和自己实践来提升技能。 ### 回答3: three.js是一个非常流行的JavaScript 3D图形库,很多人想要学习它,但是对于初学者来说,这可能会让他们感到非常困难。因此,一些网站和博客提供了一些入门教程以帮助初学者了解并开始使用three.js,其中一些包括源代码。 这些源代码提供一些基础教学,帮助用户通过编写一些简单的three.js代码并观察结果来学习three.js的基础知识。 用户可以下载源代码,并使用它们在自己的计算机上运行三维场景。 这些源代码通常提供了许多有关three.js的基础知识,包括: 1. 创建场景,灯光和相机。 2. 从文件中加载3D模型和纹理。 3. 使用材质和纹理来渲染对象。 4. 添加动画和控制器。 5. 处理鼠标和键盘输入。 6. 在网页上嵌入three.js场景。 这些源代码通常以注释的形式提供,说明每个代码块的功能。此外,这些源代码通常遵循良好的编程实践,使读者易于理解和跟踪整个过程。 总的来说,three.js零基础入门教程源代码非常适合那些想要学习three.js的初学者,他们可以通过这些源代码快速入门,并了解更多three.js知识。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值