第一个 Three.js案例

简介: 第一个 Three.js案例

Three.js案例代码

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <meta name="viewport" content="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no">
        <title>第一个Threejs案例</title>
        <script src="./js/three.js"></script>
        <style>
            * {
                margin: 0;
                padding: 0;
                box-sizing: border-box;
            }
            #webgl {
                width: 100%;
                height: 100vh;
                overflow: hidden;
            }
        </style>
    </head>
    <body>
        <div id="webgl"></div>
        <script>
            // 获取渲染容器
            let webgl = document.getElementById("webgl");
            // 获取渲染容器的宽高
            let webglWidth = webgl.offsetWidth;
            let webglHeight = webgl.offsetHeight;
            // 创建场景
            let scene = new THREE.Scene();
            // 创建三维坐标(轴线长度)
            // 用于调试:红色:x轴、绿色:y轴、蓝色:z轴
            let axes = new THREE.AxesHelper(60);
            // 添加三维坐标到场景中
            scene.add(axes);
            // 设置环境光(十六进制颜色)
            let ambient = new THREE.AmbientLight(0x444444);
            // 将环境光添加到场景中
            scene.add(ambient);
            // 设置点光源(十六进制颜色)
            let point = new THREE.PointLight(0xffffff);
            // 设置点光源的位置(x轴, y轴, z轴)
            point.position.set(400, 200, 300); 
            // 将点光源添加到场景中
            scene.add(point); 
            // 创建立方几何体(x轴, y轴, z轴)
            let cubeGeometry = new THREE.BoxGeometry(20,20,20);
            // 创建网格基础材质
            let cubeMaterial = new THREE.MeshLambertMaterial({color:0x00FFFF});
            // 创建立方体(几何体, 材质)
            let cube = new THREE.Mesh(cubeGeometry,cubeMaterial);
            // 调整立方体位置(x轴, y轴, z轴)
            cube.position.set(0, 0, 0); 
            // 将立方体添加到场景中
            scene.add(cube);
            // 创建透视相机(角度, 宽高比, 最近距离, 最远距离)
            let camera = new THREE.PerspectiveCamera(60,webglWidth/webglHeight,0.1,2000);
            // 设置相机的位置(x轴, y轴, z轴)
            camera.position.set(100, 100, 100); 
            // 将相机指向场景中心
            camera.lookAt(scene.position);
            // 创建渲染器
            let renderer = new THREE.WebGLRenderer();
            // 设置渲染器的初始颜色(十六进制颜色, 透明度)
            renderer.setClearColor(0xEEEEEE,1);
            // 设置渲染器大小(标签宽度, 标签高度)
            renderer.setSize(webglWidth,webglHeight);
            // 将渲染器添加到渲染容器中(渲染器元素)
            webgl.appendChild(renderer.domElement);
            // 创建渲染函数
            function render(){
                // 渲染场景和相机(场景, 相机)
                renderer.render(scene,camera);
            }
            // 调用渲染函数
            render();
            // 设置窗口变化自适应调整事件
            window.onresize = function(){
                // 重新获取渲染容器的宽高
                webglWidth = webgl.offsetWidth;
                webglHeight = webgl.offsetHeight;
                // 重置渲染器canvas画布大小
                renderer.setSize(webglWidth,webglHeight);
                // 重置相机显示范围的宽高比
                camera.aspect = webglWidth/webglHeight;
                // 更新相机的投影矩阵
                camera.updateProjectionMatrix();
                // 重新调用渲染函数
                render();
            };
        </script>
    </body>
</html>

第一个three.js案例渲染效果:

注意:这个地方我们设置了两种光源:环境光 和 点光源 。

  • 环境光:类似于房间内的明暗度,它会均匀的照亮场景中所有的物体。
  • 点光源:类似于生活中的白炽灯,可以使物体呈现出不同的明暗效果。

原创作者:吴小糖

创作时间:2022-9-27

相关文章
|
4月前
|
数据采集 Web App开发 JavaScript
利用Selenium和XPath抓取JavaScript动态加载内容的实践案例
利用Selenium和XPath抓取JavaScript动态加载内容的实践案例
|
2月前
|
前端开发 JavaScript
JavaScript动态渲染页面爬取——CSS位置偏移反爬案例分析与爬取实战
JavaScript动态渲染页面爬取——CSS位置偏移反爬案例分析与爬取实战
38 0
|
4月前
|
JavaScript 前端开发 UED
Javaweb之javascript的小案例的详细解析
通过上述步骤,我们得到了一个动态更新的实时时钟,这个简单的JavaScript案例展示了定时器的使用方法,并讲解了如何处理日期和时间。这个案例说明了JavaScript在网页中添加动态内容与交互的能力。对于涉足JavaWeb开发的学习者来说,理解和运用这些基础知识非常重要。
42 11
|
4月前
|
JavaScript API 图形学
一个案例带你从零入门Three.js,深度好文!
【8月更文挑战第1天】本教程无需任何Threejs知识!本教程以入门为主,带你快速了解Three.js开发
93 2
一个案例带你从零入门Three.js,深度好文!
|
4月前
|
前端开发 JavaScript 开发者
fuse.js前端搜索简单使用的三个案例
通过这三个例子可以看出,Fuse.js 是一个功能丰富、易于实现的前端搜索库。它使开发者能够便捷地实现从基础到高级的搜索功能,无论是简单的列表搜索还是实时的搜索建议,都能够高效、精确地提供给用户所需的信息。
234 0
|
4月前
|
JavaScript 前端开发 开发者
Vue.js 2 项目实战(四):成绩案例
Vue.js 2 项目实战(四):成绩案例
|
4月前
|
JavaScript 前端开发 开发者
Vue.js 2 项目实战(三):综合案例-小黑记事本
Vue.js 2 项目实战(三):综合案例-小黑记事本
|
4月前
|
JavaScript 前端开发 开发者
Vue.js 2 项目实战(二):图书管理案例
Vue.js 2 项目实战(二):图书管理案例
|
4月前
|
JavaScript 前端开发 开发者
Vue.js 2 项目实战(一):图片切换案例
Vue.js 2 项目实战(一):图片切换案例
|
4月前
|
数据采集 存储 JavaScript
JS逆向案例:巨潮资讯数据采集
JS逆向案例:巨潮资讯数据采集
57 0