Three.js会飞走飞回来的鸟
效果图
demo
import './index.css';
// stats
var stats;
(function(){
stats = new Stats();
document.body.appendChild( stats.dom );
})();
// gui
var gui;
(function(){
gui = new dat.GUI();
var fn = new function() {
this.rotationSpeed = 0.02;
this.bouncingSpeed = 0.03 ;
}
gui.add(fn,'rotationSpeed', 0, 0.5);
gui.add(fn,'bouncingSpeed', 0, 0.5);
})();
// renderer
var renderer;
(function(){
renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
renderer.shadowMap.enabled = true;
renderer.setPixelRatio( window.devicePixelRatio );
renderer.gammaInput = true;
renderer.gammaOutput = true;
document.body.appendChild(renderer.domElement);
})();
// scene
var scene;
(function(){
scene = new THREE.Scene();
scene.background = new THREE.Color( 0xcce0ff );
scene.fog = new THREE.Fog( 0xcce0ff, 500, 10000 );
})();
// 相机
var camera;
(function(){
camera = new THREE.PerspectiveCamera( 30, window.innerWidth / window.innerHeight, 1, 10000 );
camera.position.set( 1000, 50, 1500 );
camera.updateMatrix();
})();
// controls
(function(){
var controls = new THREE.OrbitControls( camera, renderer.domElement );
controls.maxPolarAngle = Math.PI * 0.5;
controls.minDistance = 1000;
controls.maxDistance = 5000;
window.addEventListener('resize', function(){
camera.aspect = window.innerWidth / window.innerHeight;
camera.updateProjectionMatrix();
renderer.setSize(window.innerWidth, window.innerHeight);
}, false);
})();
// 设置光源
(function(){
// 设置光源
var light = new THREE.DirectionalLight( 0xbbbbff, 1.5 );
light.position.set( -1000, 50, -1000 );
light.position.multiplyScalar( 1.3 );
light.castShadow = true;
var textureLoader = new THREE.TextureLoader();
var textureFlare0 = textureLoader.load( "./static/textures/lensflare/lensflare0.png" );
var textureFlare1 = textureLoader.load( "./static/textures/lensflare/lensflare2.png" );
var textureFlare2 = textureLoader.load( "./static/textures/lensflare/lensflare3.png" );
var lensflare = new THREE.Lensflare();
lensflare.addElement( new THREE.LensflareElement( textureFlare0, 512, 0 ) );
lensflare.addElement( new THREE.LensflareElement( textureFlare1, 512, 0 ) );
lensflare.addElement( new THREE.LensflareElement( textureFlare2, 60, 0.6 ) );
light.add( lensflare );
scene.add( light );
var light = new THREE.HemisphereLight( 0xbbbbff, 0x444422 );
scene.add( light );
})();
// 加载模型
var mixers = [];
var clock = new THREE.Clock();
var birdmesh;
(function(){
// 地面
var loader = new THREE.TextureLoader();
var groundTexture = loader.load( './static/textures/terrain/grasslight-big.jpg' );
groundTexture.wrapS = groundTexture.wrapT = THREE.RepeatWrapping;
groundTexture.repeat.set( 25, 25 );
groundTexture.anisotropy = 16;
var groundMaterial = new THREE.MeshLambertMaterial( { map: groundTexture } );
var mesh = new THREE.Mesh( new THREE.PlaneBufferGeometry( 20000, 20000 ), groundMaterial );
mesh.position.y = - 250;
mesh.rotation.x = - Math.PI / 2;
mesh.receiveShadow = true;
mesh.name = "ground";
scene.add( mesh );
// 鸟
var loader = new THREE.GLTFLoader();
loader.load( './static/models/gltf/Flamingo.glb', function( gltf ) {
birdmesh = gltf.scene.children[ 0 ];
var s = 0.35;
birdmesh.scale.set( s, s, s );
birdmesh.position.y = 15;
birdmesh.rotation.y = -1;
birdmesh.castShadow = true;
birdmesh.receiveShadow = true;
scene.add( birdmesh );
var mixer = new THREE.AnimationMixer( birdmesh );
mixer.clipAction( gltf.animations[ 0 ] ).setDuration( 1 ).play();
mixers.push( mixer );
} );
})();
// var rotateY = new THREE.Matrix4().makeRotationY( 0.005 );
var step = -2;
var flag = true;
var animate = function () {
requestAnimationFrame(animate);
// camera.applyMatrix( rotateY );
// camera.updateMatrixWorld();
var delta = clock.getDelta();
for ( var i = 0; i < mixers.length; i ++ ) {
mixers[ i ].update( delta );
}
if(birdmesh != null) {
if(birdmesh.position.x == -1000) {
flag = false;
}
if(birdmesh.position.x == 1000) {
flag = true;
}
if(flag){
birdmesh.rotation.y = -1;
birdmesh.position.x += step;
birdmesh.position.z -= (step+0.2);
}else {
birdmesh.rotation.y = 2.3;
birdmesh.position.x -= step;
birdmesh.position.z += (step+0.2);
}
}
stats.begin();
renderer.render( scene, camera );
stats.end();
};
animate();
Three.js会飞走飞回来的鸟的更多相关文章
- HTML5+JS 《五子飞》游戏实现(一)规则
很久没写文章了,这个游戏其实已经写了有段时间了,一直没有完善,赶在新年之际,分享给大家. 该<五子飞>游戏,不是平常大家所说的<五子棋>,这个玩法简单,是我们老家儿时常玩的一种 ...
- HTML5+JS 《五子飞》游戏实现(八)人机对战
要想实现人机对战,就必须让电脑自动下棋,而且要知道自动去查找对方的棋子,看看有没有可以挑一对的,有没有可以夹一个的,这样下起来才有意思. 当电脑用户下完棋后,电脑应立即搜索用户的棋子,然后如果没有被吃 ...
- HTML5+JS 《五子飞》游戏实现(四)夹一个和挑一对
在第一章我们已经说了怎么才能“夹一个”以及怎样才能挑一对,但那毕竟只是书面上的,对码农来讲,我们还是用代码讲解起来会更容易了解. 为了更容易对照分析,我们先把路线再次贴出来: // 可走的路线 thi ...
- HTML5+JS 《五子飞》游戏实现(三)页面和棋盘棋子
前面两节,我们已经对<五子飞>有个初步的认识,对走棋路线也有了基本的了解,现在里沃特继续跟大家分享HTML页面,另外把棋盘棋子也画出来. 演示地址:http://www.lyout.com ...
- HTML5+JS 《五子飞》游戏实现(七)游戏试玩
前面第一至第六章我们已经把<五子飞>游戏的基本工作都已经讲得差不多了,这一章主要是把所有的代码分享给大家,然后小伙伴们也可以玩一玩. 至于人机对战的我们放到后面讲进行分析. 试玩地址:ht ...
- HTML5+JS 《五子飞》游戏实现(六)鼠标响应与多重选择
上一章我们提到了如果有多条线上的棋子可以被吃掉,那么游戏需要提示用户,让用户选择吃哪条线上的.另外因为是网页游戏,所以一定要实现鼠标单击棋子可以进行操作. 当鼠标移动棋子上面后,切换鼠标指针为手形,移 ...
- HTML5+JS 《五子飞》游戏实现(五)移动棋子
上一章 我们知道了怎么处理两个重要的吃棋动作,想要吃对方的棋子,首先得移动自己的棋子.现在里沃特跟大家分享分享,怎么移动棋子. 想要移动棋子,在页面上,首先要点击一下要移动的棋子,然后再点击一下目标位 ...
- 让 ASP.NET vNext 在 Mac OS 中飞呀飞。。。
写在前面 阅读目录: 娓娓道来 Install ASP.NET vNext Command Line Tools 安装 Homebrew 使用 Homebrew,安装 KVM Install Subl ...
- HTML5+JS 《五子飞》游戏实现(二)路线分析和资源准备
上一节 里沃特与我们分享了<五子飞>的下棋规则,可能有些伙伴看得不清楚,像我们码农还是看到代码比较靠谱.下面就把可以走棋的路线跟大家说一下. 假设从左上角开始,以0开始编号,往右数(没看第 ...
随机推荐
- git一个系列教程
https://git-scm.com/book/zh/v1/%E8%B5%B7%E6%AD%A5-%E5%85%B3%E4%BA%8E%E7%89%88%E6%9C%AC%E6%8E%A7%E5%8 ...
- js中关于json常用的内容、js将数字保留两位小数
没什么好说的 保存起来 以后有个地方找 var json=eval("[]") //json定义 var s={"id":"xxx",& ...
- jQ通过cookie记住用户名
总结要点: 一.封装的一个cookie函数: 二.获取input的value值:$("input[name=user]").val() 三.设置input的value值:$(&qu ...
- 【lightoj-1055】Going Together(BFS)
链接:http://www.lightoj.com/volume_showproblem.php?problem=1055 类似推箱子的游戏,一条命令可以让abc三个小人同时移动,但是出界或者撞墙是不 ...
- PostgreSQL窗口函数(转)
转自:http://time-track.cn/postgresql-window-function.html PostgreSQL提供了窗口函数的特性.窗口函数也是计算一些行集合(多个行组成的集合, ...
- get传输时,会将加号+ 转换为空格
解决办法: 前端: 替换加号为 ‘%2B’, 后端: 直接接收即可.
- struts2逻辑视图类型汇总与解释(转)
在struts2框架中,当action处理完之后,就应该向用户返回结果信息,该任务被分为两部分:结果类型和结果本身. 结果类型提供了返回给用户信息类型的实现细节.结果类型通常在Struts2中就已预定 ...
- 【英语】Bingo口语笔记(82) - go系列
- ACM ICPC 2018 青岛赛区 部分金牌题题解(K,L,I,G)
目录: K Airdrop I Soldier Game L Sub-cycle Graph G Repair the Artwork ———————————————————— ps:楼主脑残有点严 ...
- 分布式使用Redis
为什么我们做分布式使用Redis? https://www.cnblogs.com/yaodengyan/p/9717080.html 绝大部分写业务的程序员,在实际开发中使用 Redis 的时候,只 ...