【模板代码】用于编写Threejs Demo的模板代码

使用须知

  1. 本模板代码,主要用于编写Threejs的Demo,因为本人在早期学习的过程中,大量抄写Threejs/examples下的代码以及各个demo站的代码,所以养成了编写Threejs的demo的习惯,编写时,一般是直接复制一份模板代码,直接编写即可
  2. 模板代码环境:首先你要在指定的路径上有Threejs的开发包的存在,如下图所示,本人将threejs开发包改名后,与所有的demo代码放在同一个文件夹下,模板代码只需要确定引入的文件路径正确即可,至于文件怎么摆放,需不需要webpack环境,node,npm环境之类的无所谓
  3. 因为本人使用webstorm,所以在运行html的时候,直接就可以运行,webstorm内置了服务器,不需要额外单独跑服务器就可以运行
  4. Threejs版本建议在160以上
    在这里插入图片描述

常规模板代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        body{
            width:100vw;
            height: 100vh;
            overflow: hidden;
            margin: 0;
            padding: 0;
            border: 0;
        }
    </style>
</head>
<body>

<script type="importmap">
			{
				"imports": {
					"three": "../three/build/three.module.js",
					"three/addons/": "../three/examples/jsm/"
				}
			}
		</script>

<script type="module">
    import * as THREE from "../three/build/three.module.js";
    import {OrbitControls} from "../three/examples/jsm/controls/OrbitControls.js";

    window.addEventListener('load',e=>{
        init();
        addMesh();
        render();
    })

    let scene,renderer,camera,orbit;

    function init(){
        scene = new THREE.Scene();
        renderer = new THREE.WebGLRenderer({
            alpha:true,
            antialias:true
        });
        renderer.setSize(window.innerWidth,window.innerHeight);
        document.body.appendChild(renderer.domElement);

        camera = new THREE.PerspectiveCamera(50,window.innerWidth/window.innerHeight,0.1,2000);
        camera.add(new THREE.PointLight(0xffffff,1,1000,0.01));
        camera.position.set(10,10,10);
        scene.add(camera);

        orbit = new OrbitControls(camera,renderer.domElement);
        orbit.enableDamping = true;

        scene.add(new THREE.GridHelper(10,10));
    }

    function addMesh() {
        let geometry = new THREE.BoxGeometry(1,1,1);
        let material = new THREE.MeshStandardMaterial({color:0xffffff * Math.random()});
        let mesh = new THREE.Mesh(geometry,material);
        scene.add(mesh);
    }

    function render() {
        renderer.render(scene,camera);
        orbit.update();
        requestAnimationFrame(render);
    }

</script>
</body>
</html>

常规Shader模板代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        body{
            width:100vw;
            height: 100vh;
            overflow: hidden;
            margin: 0;
            padding: 0;
            border: 0;
        }
    </style>
</head>
<body>

<script type="importmap">
			{
				"imports": {
					"three": "../three/build/three.module.js",
					"three/addons/": "../three/examples/jsm/"
				}
			}
		</script>

<script type="x-shader/x-vertex" id="vertexShader">
    varying vec2 vUv;
    void main(){
        vUv = vec2(uv.x,uv.y);
        vec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );
        gl_Position = projectionMatrix * mvPosition;

        gl_Position = projectionMatrix * modelMatrix * viewMatrix * vec4( position, 1.0 );
    }

</script>
<script type="x-shader/x-fragment" id="fragmentShader">
    varying vec2 vUv;
    void main(){
        gl_FragColor = vec4(1.0,0.0,0.0,1.0);
    }
</script>

<script type="module">

    import * as THREE from "../three/build/three.module.js";
    import {OrbitControls} from "../three/examples/jsm/controls/OrbitControls.js";

    window.addEventListener('load',e=>{
        init();
        addMesh();
        render();
    })

    let scene,renderer,camera;
    let orbit;

    function init(){

        scene = new THREE.Scene();
        renderer = new THREE.WebGLRenderer({
            alpha:true,
            antialias:true
        });
        renderer.setSize(window.innerWidth,window.innerHeight);
        document.body.appendChild(renderer.domElement);

        camera = new THREE.PerspectiveCamera(50,window.innerWidth/window.innerHeight,0.1,2000);
        camera.add(new THREE.PointLight());
        camera.position.set(15,15,15);
        scene.add(camera);

        orbit = new OrbitControls(camera,renderer.domElement);
        orbit.enableDamping = true;
        scene.add(new THREE.GridHelper(10,10));
    }

    let uniforms = {

    }

    function addMesh() {
        let geometry = new THREE.PlaneGeometry(10,10);
        let material = new THREE.ShaderMaterial({
            uniforms,
            vertexShader:document.getElementById('vertexShader').textContent,
            fragmentShader:document.getElementById('fragmentShader').textContent,
        })
        let mesh = new THREE.Mesh(geometry,material);
        scene.add(mesh);
    }


    function render() {
        renderer.render(scene,camera);
        orbit.update();
        requestAnimationFrame(render);
    }

</script>
</body>
</html>

相关推荐

  1. STC8模板代码

    2024-07-21 21:28:03       35 阅读
  2. EasyCode代码生成模板

    2024-07-21 21:28:03       52 阅读
  3. 滑动窗口代码模板

    2024-07-21 21:28:03       28 阅读
  4. GraphQL语法用于模式验证和代码生成新方法

    2024-07-21 21:28:03       50 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-21 21:28:03       52 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-21 21:28:03       54 阅读
  3. 在Django里面运行非项目文件

    2024-07-21 21:28:03       45 阅读
  4. Python语言-面向对象

    2024-07-21 21:28:03       55 阅读

热门阅读

  1. 10步职业进阶:全新霍兰德自我提升计划

    2024-07-21 21:28:03       18 阅读
  2. Nginx系列-4 proxy_pass使用和路径拼接问题

    2024-07-21 21:28:03       13 阅读
  3. ASPICE在汽车软件开发中的作用

    2024-07-21 21:28:03       15 阅读
  4. C++ STL partion_point用法

    2024-07-21 21:28:03       15 阅读
  5. 【深度学习】sdxl的Lora训练技巧

    2024-07-21 21:28:03       18 阅读
  6. 理解Cookie、Session和Token

    2024-07-21 21:28:03       15 阅读
  7. 第四节shell条件测试(5)

    2024-07-21 21:28:03       17 阅读
  8. Python内存泄漏排查

    2024-07-21 21:28:03       16 阅读
  9. 【瓴岳科技】历史面试题

    2024-07-21 21:28:03       18 阅读