欧美日韩国产一区二区|qovd片|小明个人发布看看|小浪货你夹真紧水又多|老头把我添高潮了A片故|99热久久精品国产一区二区|久久久春色AV

納米|技術分享:用JS實現的3D海浪涌動特效

納米|技術分享:用JS實現的3D海浪涌動特效

分享一個基于ThreeJS的3D海浪涌動特效 , 效果如下:

??捎糜陧撁姹尘?, 3D效果 , 視覺觀感很好 , 海浪會隨機涌動 , 科幻感、技術感強烈 。
代碼說明代碼會引用ThreeJS庫 , 版本號為56 。 注:必須是此版本 。
頁面背景色可在Body的style中自行調節 。


<body style=\"background:#000000\">
完整源碼如下 , 直接保存為html文件即可使用 。
也可對源碼優化修改 , 以實現更好效果 , 如果不想修改后的源碼泄露出去 , 可用JShaman對JS代碼進行加密 。
源碼

<body style=\"background:#000000\">
<script src=https://mparticle.uc.cn/"three.js\" type=\"application/javascript\"></script>
<div></div>
<script>
var SEPARATION = 100
AMOUNTX = 100
AMOUNTY = 70;
var container;
var camera scene renderer;
var particles particle count = 0;
var mouseX = 85
mouseY = -342;
var windowHalfX = window.innerWidth / 2;
【納米|技術分享:用JS實現的3D海浪涌動特效】var windowHalfY = window.innerHeight / 2;
init();
animate();
function init() {
container = document.createElement('div');
document.body.appendChild(container);
camera = new THREE.PerspectiveCamera(120 window.innerWidth / window.innerHeight 1 10000);
camera.position.z = 1000;
scene = new THREE.Scene();
particles = new Array();
var PI2 = Math.PI * 2;
var material = new THREE.ParticleCanvasMaterial({
color: 0xe1e1e1
program: function(context) {
context.beginPath();
context.arc(0 0 .6 0 PI2 true);
context.fill();

);
var i = 0;
for (var ix = 0; ix < AMOUNTX; ix++) {
for (var iy = 0; iy < AMOUNTY; iy++) {
particle = particles[i++
= new THREE.Particle(material);
particle.position.x = ix * SEPARATION - ((AMOUNTX * SEPARATION) / 2);
particle.position.z = iy * SEPARATION - ((AMOUNTY * SEPARATION) / 2);
scene.add(particle);


renderer = new THREE.CanvasRenderer();
renderer.setSize(window.innerWidth window.innerHeight);
container.appendChild(renderer.domElement);
document.addEventListener('mousemove' onDocumentMouseMove false);
document.addEventListener('touchstart' onDocumentTouchStart false);
document.addEventListener('touchmove' onDocumentTouchMove false);
window.addEventListener('resize' onWindowResize false);

function onWindowResize() {
windowHalfX = window.innerWidth / 2;
windowHalfY = window.innerHeight / 2;
camera.aspect = window.innerWidth / window.innerHeight;
camera.updateProjectionMatrix();
renderer.setSize(window.innerWidth window.innerHeight);

function onDocumentMouseMove(event) {
mouseX = event.clientX - windowHalfX;
mouseY = event.clientY - windowHalfY;

function onDocumentTouchStart(event) {
if (event.touches.length === 1) {
event.preventDefault();
mouseX = event.touches[0
.pageX - windowHalfX;
mouseY = event.touches[0
.pageY - windowHalfY;


function onDocumentTouchMove(event) {
if (event.touches.length === 1) {
event.preventDefault();
mouseX = event.touches[0
.pageX - windowHalfX;
mouseY = event.touches[0
.pageY - windowHalfY;


function animate() {
requestAnimationFrame(animate);
render();

function render() {
camera.position.x += (mouseX - camera.position.x) * .05;
camera.position.y += (-mouseY - camera.position.y) * .05;

相關經驗推薦