three.js 的简单实例

2019-9-26    seo达人

three.js 的简单实例

三大主件: 渲染器、场景、相机



思想核心: 相机获取到场景内显示的内容, 然后再通过渲染器渲染到画布上面



渲染器: 实例化渲染器的同时生成的一个 Canvas 画布, 之后将这个画布添加到了 DOM 当中



场景: 场景只是一个容器, 显示的内容需要进行添加, 添加一个内容称作一个网格, 每个网格基本上包括几何体和材质, 网格也称之为模型



<!DOCTYPE html>

<html>



<head>

<meta charset="utf-8" />

<title>three</title>

<style>

body {

margin: 0;

}



canvas {

width: 100%;

height: 100%;

display: block;

}

</style>

</head>



<body onload="init()">

<script type="text/javascript" src="js/jquery-3.4.1.min.js"></script>

<script type="text/javascript" src="js/three.min.js"></script>

<script type="text/javascript" src="js/stats.min.js"></script>

<script type="text/javascript" src="js/dat.gui.min.js"></script>

<script>

//声明一些全局变量

var renderer, camera, scene, geometry, material, mesh, stats, rotate = true;



//初始化渲染器

function initRenderer() {

renderer = new THREE.WebGLRenderer(); //实例化渲染器

renderer.setSize(window.innerWidth, window.innerHeight); //设置宽和高

document.body.appendChild(renderer.domElement); //添加到dom

}



//初始化场景

function initScene() {

scene = new THREE.Scene(); //实例化场景

}



//初始化相机

function initCamera() {

camera = new THREE.PerspectiveCamera(45, window.innerWidth / window.innerHeight, 0.1, 200); //实例化相机

camera.position.set(0, 0, 15); //初始化的坐标

}



//创建模型

function initMesh() {

geometry = new THREE.BoxGeometry(2, 2, 2); //创建几何体

material = new THREE.MeshNormalMaterial(); //创建材质

mesh = new THREE.Mesh(geometry, material); //创建网格

scene.add(mesh); //将网格添加到场景

}



//运行动画

function animate() {

requestAnimationFrame(animate); //循环调用函数



//判断是否可以旋转

if(rotate) {

mesh.rotation.x += 0.01; //每帧网格模型的沿x轴旋转0.01弧度

mesh.rotation.y += 0.02; //每帧网格模型的沿y轴旋转0.02弧度

}



stats.update(); //更新性能检测框

renderer.render(scene, camera); //渲染界面

}



//性能检测框

function initStats() {

stats = new Stats();

document.body.appendChild(stats.dom);

}



//创建调试框

function initGui() {



//控制参数初始值

controls = {

positionX: 0,

positionY: 0,

positionZ: 0,

rotate: true

};



gui = new dat.GUI(); //实例化对象

gui.add(controls, "positionX", -10, 10).onChange(updatePosition);

gui.add(controls, "positionY", -5, 5).onChange(updatePosition);

gui.add(controls, "positionZ", -10, 10).onChange(updatePosition);



function updatePosition() {

mesh.position.set(controls.positionX, controls.positionY, controls.positionZ);

}



gui.add(controls, "rotate").name("旋转").onChange(function(e) {

rotate = e;

});

}



//初始化函数,页面加载完成是调用

function init() {

initRenderer();

initScene();

initCamera();

initMesh();

initStats();

initGui();

animate();

}

</script>



</body>



</html>

蓝蓝设计www.lanlanwork.com )是一家专注而深入的界面设计公司,为期望卓越的国内外企业提供卓越的UI界面设计、BS界面设计  cs界面设计  ipad界面设计  包装设计  图标定制  用户体验 、交互设计、 网站建设 平面设计服务

分享本文至:

日历

链接

个人资料

蓝蓝设计的小编 http://www.lanlanwork.com

存档