Three.js绘制简单的立体球形

Three.js在国内使用的貌似并不算多,我看了下,教程也不是特别多的,今天正好有时间,将自己之前学习的三维框架整理一下,在CSDN上发一个小笔记。

下面是本人使用Three.js框架创建立体球形的小实例:

首先引入相关的Three.js库

    <script src="./3d/libs/three.js"></script>
    <script src="./3d/libs/js/objects/Reflector.js"></script>
    <script src="./3d/libs/js/controls/OrbitControls.js"></script>
    <script src="./3d/libs/js/lib/inflate.module.min.js"></script>
    <script src="./3d/libs/js/loaders/FBXLoader.js"></script>

       本实例不需要创建dom元素,Three.js创建的渲染器中提供了canvas元素。我们只需要获取出来,并放入body中就可以了

如:var renderer = new THREE.WebGLRenderer({alpha:true});

       document.body.appendChild(renderer.domElement)

接下来是最重要的:

// 声明一个场景、照相机视角、渲染器
var scene,camera,renderer;
// 声明一个点光源、环境光源
var point,ambient;
function init(){
    // 创建场景
    scene = new THREE.Scene();
    // 创建视角
    camera = new  THREE.PerspectiveCamera(60,window.innerWidth/window.innerHeight,1,1000)
    // 设置视角
    camera.position.set(100,100,100)
    // 将设置好的视角加入照相机中
    camera.lookAt(scene.position)
    // 创建渲染器
    renderer = new THREE.WebGLRenderer({alpha:true})
    renderer.setSize(window.innerWidth,window.innerHeight)
    renderer.setClearColor(0xcccccc);
    renderer.setPixelRatio(window.devicePixelRatio)
    renderer.enabled = true;
    
    // 默认将三维图形canvas放入document中
    document.body.appendChild(renderer.domElement)

    // 创建点光源
    point = new THREE.PointLight(0xffffff)
    point.position.set(100,100,300)
    scene.add(point)
    // 创建环境光,如果不创建光源,渲染的界面将是一片黑
    ambient = new THREE.AmbientLight(0xffffff)
    scene.add(ambient)

    // 创建平面并加入Mesh盒子中
    var plane = new THREE.PlaneBufferGeometry(window.innerWidth,window.innerHeight)
    var material = new THREE.MeshLambertMaterial({
        color:0xffffff,
        transparent:true,
        opacity:0.5
    })
    var mesh = new THREE.Mesh(plane,material)
    mesh.position.y = 0.1;
    mesh.rotation.x = -Math.PI / 2;
    scene.add(mesh)

    // 创建球形对象并加入Mesh中
    var sphere = new THREE.SphereGeometry(100,100,100)
    var sphereMatrial = new THREE.MeshPhongMaterial({
        color:0x7c29bb
    })
    var sphereMath = new THREE.Mesh(sphere,sphereMatrial);
    sphereMath.position.y = 20;
    sphereMath.geometry.computeBoundingBox();
    scene.add(sphereMath);

    // 创建control控制器,如果不创建则无法拖动屏幕
    var controls = new THREE.OrbitControls(camera,renderer.domElement)
    window.addEventListener("resize",Resize)
}
init()
function Resize(){
    // 当屏幕大小改变时更改
    camera.aspect = window.innerWidth/window.innerHeight;
    camera.updateProjectionMatrix()
    renderer.setSize(window.innerWidth,window.innerHeight)
}
function render(){
    // 通过requestAnimationFrame函数不断地渲染界面
    // 这里不要考虑性能问题,如何不刷新式渲染,就没办法拖动看图形
    requestAnimationFrame(render)
    renderer.render(scene,camera)
}
render()

效果图如下:

正面看

侧面看

好了,大概的效果就是这样了

各位同胞如何有学Three、cesium这样的群记得拉我一下哦,嘻嘻。

我对三维挺感兴趣的,但是自己学习比较困难,而且里面的绘制扇形啥的,还需要数学,计算机图形学的底子。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值