• ThreeJS笔记(一)


    ThreeJS笔记(一)

    ThreeJS的本质是WebGL,但是webGL使用起来不是很方便,threeJS则提供了比较上层的封装,开发起来更加轻便。

    环境配置

    • 首先从github下载源码
    • 把ThreeJS包含到工程目录
    • 写个代码测试一下

    index.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>ThreeJS测试</title>
        <script src="three.js"></script>
        <script src="index.js"></script>
    </head>
    <body>
    </body>
    </html>
    

    index.js

    "use strict";
    console.log(THREE.REVISION) //测试版本号
    

    ThreeJS的版本更新非常频繁,目前输出的是83

    测试样例

    index.html

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="UTF-8">
        <title>测试样例</title>
        <script src="three.js"></script>
    </head>
    <body>
    <canvas id="canvas" width="400" height="400" style="border: dashed"></canvas>
    <script src="index.js"></script>
    </body>
    </html>
    

    index.js

    "use strict"
    var renderer, camera, scene, cube,width, height
    
    // 初始化renderer
    function initRenderer() {
        width = document.getElementById('canvas').clientWidth
        height = document.getElementById('canvas').clientHeight
        renderer = new THREE.WebGLRenderer({
            canvas: document.getElementById('canvas')
        })
        renderer.setSize(width, height)
        renderer.setClearColor(0xFFFFFF, 1.0) //设置清除颜色和透明度
    }
    
    function initCamera() {
        // 使用正投影照相机
        camera = new THREE.OrthographicCamera(width/-2, width/2, height/2, height/-2,1,1000)
        // 找相机位置设定
        camera.position.x = 0
        camera.position.y = 0
        camera.position.z = 200
        // 照相机顶部矢量设定(相当于人的头顶),这里采用右手坐标系,因此是向上
        camera.up.x = 0
        camera.up.y = 1
        camera.up.z = 0
        // 视线的目标点
        camera.lookAt({
            x: 0,
            y: 0,
            z: 0
        })
    }
    // 新建场景,作为容器
    function initScene() {
        scene = new THREE.Scene()
    }
    function initObject() {
        // 新建cube对象,定义形状
        var geometry = new THREE.CubeGeometry(100, 100, 100)
        // 新建material对象,定义性质
        var material = new THREE.MeshNormalMaterial();
        cube = new THREE.Mesh(geometry, material);
        scene.add(cube)
        // 以下是博主自己定义的
        cube.vx = 1
        cube.vy = 1
    }
    
    // 使用requestAnimationFrame回调render进行试试更新
    function render() {
        requestAnimationFrame(render)
        cube.rotation.x += 0.05
        cube.rotation.y += 0.05
    
        // 平移加一些随机扰动
        if(cube.position.x>width/2 || cube.position.x<-width/2)
            cube.vx = -cube.vx + Math.random() - 0.5
        if(cube.position.y>height/2 || cube.position.y<-height/2)
            cube.vy = -cube.vy + Math.random() - 0.5
        cube.position.x += cube.vx
        cube.position.y += cube.vy
    
        renderer.render(scene, camera)
    }
    // 总调度
    function start()
    {
        initRenderer()
        initCamera()
        initScene()
        initObject()
        render()
    }
    // 载入函数
    window.onload = start()
    

    运行结果

  • 相关阅读:
    stm32L4xx串口日志配置解析
    泰凌微TLSR8258芯片解决方案开发之串口打印级别设置
    泰凌微TLSR825x智能照明解决方案开发之实例解析
    ble的notification和indication的区别和联系
    PHP "??"只判断null的情况
    vue项目发布时Apache或者nginx配置
    form表单中加required不起用的原因
    twig解决json_encode中文UNICODE转码问题
    蓝叠、逍遥、夜游模拟器,虚拟机与hyperv兼容问题解决,w10家庭版关闭hyperv,华为matebook
    002STM32+BC26|260Y(NBIOT)基本控制篇(阿里云物联网平台)STM32+BC260Y使用MQTT+SSL(mbedtls)加密方式接入阿里云物联网平台(不验证服务器证书)
  • 原文地址:https://www.cnblogs.com/fanghao/p/7674703.html
Copyright © 2020-2023  润新知