美文网首页WebGLThree.js
12three.js绘制随机点

12three.js绘制随机点

作者: 狂暴机甲 | 来源:发表于2018-04-20 15:56 被阅读3次

用这样方式绘制的其实是随机的小球。不是点,绘制的数量多会很消耗内存,后面会介绍three.js的粒子系统。
定义一个数组,通过push的方法存入点的三维坐标。
点的形式是三维向量。


image.png
<script type="text/javascript">
    var scene = new THREE.Scene();
    var camera = new THREE.PerspectiveCamera(45,window.innerWidth/window.innerHeight,0.1,1000);
    camera.position.set(-40,30,40);
    camera.lookAt(scene.position);
    var renderer = new THREE.WebGLRenderer();
    renderer.setSize(window.innerWidth,window.innerHeight);
    renderer.setClearColor(0x111111);

    var sphereGeometry = new THREE.SphereGeometry(0.4,20,20);
    var sphereMaterial = new THREE.MeshLambertMaterial({color:0xFF00FF});
    var sphere = new THREE.Mesh(sphereGeometry,sphereMaterial);
    sphere.position.set(0,0,0);
    scene.add(sphere);
    function pointPosition() {
        var points = [];
        for(var i=0;i<300;i++){
            var randomX = -30+Math.round(Math.random()*60);
            var randomY = -30+Math.round(Math.random()*60);
            var randomZ = -30+Math.round(Math.random()*60);
            points.push(new THREE.Vector3(randomX,randomY,randomZ));
        }

        spGroup = new THREE.Object3D();
        var spmat = new THREE.MeshLambertMaterial({color:0xFFFFFF});
        points.forEach(function (point) {
            var spgeom = new THREE.SphereGeometry(0.2,10,10);
            var spmesh = new THREE.Mesh(spgeom,spmat);
            spmesh.position.copy(point);
            spGroup.add(spmesh);
        });

        scene.add(spGroup);
        console.log(spGroup);//输出看一下
    }

    var contrals = new function () {
        this.cameraHigh = 0;
        this.speed = 0.1;
    }
    var gui = new dat.GUI();
    gui.add(contrals,'cameraHigh',-90,90,"相机高度");
    gui.add(contrals,'speed',0,1,"旋转速度");

    pointPosition();
    var ambLight = new THREE.AmbientLight(0x444444);
    scene.add(ambLight);
    var spotLight = new THREE.SpotLight(0xFFFFFF);
    spotLight.position.set(-20,50,-20);
    scene.add(spotLight);
    console.log(scene.children);//为什么输出长度还是4,而不是304?
    document.body.appendChild(renderer.domElement);
    renderer.render(scene,camera);
    var angle = 0;
    function run() {
        angle += contrals.speed;
        camera.position.y = contrals.cameraHigh;
        camera.position.x = -40*Math.sin(angle*Math.PI/180);
        camera.position.z = 40*Math.cos(angle*Math.PI/180);
        camera.lookAt(scene.position);
        requestAnimationFrame(run);
        renderer.render(scene,camera);
    }
    run();

    // 必须设置动画不停的renderer才能生效
    function onResize() {
        camera.aspect = window.innerWidth / window.innerHeight;
        camera.updateProjectionMatrix();
        renderer.setSize(window.innerWidth, window.innerHeight);
    }
    window.addEventListener('resize', onResize, false);
</script>

相关文章

  • 12three.js绘制随机点

    用这样方式绘制的其实是随机的小球。不是点,绘制的数量多会很消耗内存,后面会介绍three.js的粒子系统。定义一个...

  • 利用Pytecharts中Geo模块进行数据散点地图绘制

    1、随机颜色散点地图绘制 from pyecharts import Geo data = [ ("海门", ...

  • 简单的R语言命令

    <- 赋值 rnorm(n) 随机数 plot 绘制点图 install.packages("ggplot2") ...

  • 浅析HTML5的Canvas——案例绘制

    1. Canvas绘制五环 2.Canvas绘制饼状图以及绘制文字 3. Canvas绘制一堆不断变大变小的随机移...

  • UIBezierPath - 贝塞尔曲线

    一般只能在drawRet中绘制。但是结合 CAShapeLayer,绘制到layer上在add到View上就能随机...

  • 《Python游戏编程入门》第33页的挑战

    本文目录: 一:绘制椭圆 二:用随机的值绘制1000个线条 三:绘制一个绕着屏幕移动的矩形,任何时候,当该矩形碰到...

  • 随机漫步

    产生随机漫步的类 把图给绘制出来 后面的内容还没看

  • 绘制点

    3D绘制点 像素是计算机监视器最小的元素,在彩色系统中,像素可以是许多可用颜色的一种,屏幕上的一个位置对应一个点,...

  • 粒子动画

    粒子动画 效果:随机绘制一条路径,点击开始按钮,粒子动画 实现思路 1.搞个画板绘制路径,自定义view 2.给自...

  • 在散点图中突出显示数据点

    分享一个ggplot2绘制散点图突出某些数据点的小例子 加载R包 创建随机数据 首先用全部数据绘制散点图 将需要突...

网友评论

    本文标题:12three.js绘制随机点

    本文链接:https://www.haomeiwen.com/subject/mvqzkftx.html