threejs 管子_Three.js 菱形管道

JavaScript

语言:

JaveScriptBabelCoffeeScript

确定

var ww = window.innerWidth,

wh = window.innerHeight;

var renderer = new THREE.WebGLRenderer({

canvas: document.querySelector("canvas")

});

renderer.setSize(ww, wh);

renderer.setClearColor(0xffffff);

var scene = new THREE.Scene();

scene.fog = new THREE.Fog(0xffffff, 40, 70);

var camera = new THREE.PerspectiveCamera(45, ww / wh, 1, 100);

var ambient = new THREE.AmbientLight(0xffffff, 0.5);

scene.add(ambient);

var light = new THREE.PointLight(0xffffff, 3, 200);

scene.add(light);

var mouse = new THREE.Vector2(0.3, 0.3);

window.addEventListener("mousemove", function(e) {

mouse.y = (1 - e.clientY / wh) * 0.5;

});

window.addEventListener("resize", function() {

ww = window.innerWidth;

wh = window.innerHeight;

camera.aspect = ww / wh;

camera.updateProjectionMatrix();

renderer.setSize(ww, wh);

});

var curve, camera2, helper;

function createTube() {

var points = [];

var rings = 400;

for (var i = 0; i < rings; i++) {

var x = noise.simplex2(i * 0.008, 0.1) * 150;

var y = noise.simplex2(i * 0.008, 0.1) * 150;

var z = i * 3;

points.push(new THREE.Vector3(x, y, z));

}

curve = new THREE.CatmullRomCurve3(points);

var geometry = new THREE.TubeGeometry(curve, rings, 2, 20, false);

var color = new THREE.Color(0xff0000)

for (i = 0; i < geometry.faces.length; i++) {

var index = Math.abs(noise.simplex2(geometry.vertices[geometry.faces[i].a].z * 0.02, 2));

geometry.faces[i].color = new THREE.Color("hsl(" + (index * 100 + 180) + ",50%,50%)");

}

var material = new THREE.MeshLambertMaterial({

side: THREE.BackSide,

color: 0xfffff0,

vertexColors: THREE.FaceColors

});

var mesh = new THREE.Mesh(geometry, material);

scene.add(mesh);

}

var interval = 0.00001;

var progress = 0;

var rotate = 0;

function render(a) {

requestAnimationFrame(render);

if (progress + interval >= 1) {

progress = 0;

}

interval = mouse.y * 0.001;

var p1 = curve.getPointAt(progress);

var p2 = curve.getPointAt(progress + interval);

camera.position.set(p1.x, p1.y, p1.z);

camera.lookAt(p2);

if (progress + 0.04 < 1) {

var p3 = curve.getPointAt(progress + 0.04);

light.position.set(p3.x, p3.y, p3.z);

}

progress += interval;

camera.rotation.z = rotate;

rotate += (interval * 50);

renderer.render(scene, camera);

}

createTube();

requestAnimationFrame(render);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值