ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Three.js 零基础保姆级教程

2021-07-15 10:57:32  阅读:217  来源: 互联网

标签:教程 scene THREE Three camera var new js


文章目录


一、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>

标签:教程,scene,THREE,Three,camera,var,new,js
来源: https://blog.csdn.net/weixin_42817995/article/details/118753443

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有