three实现三维3d粒子云尘埃漂浮变幻动画效果代码

代码语言:html

所属分类:粒子

代码描述:three实现三维3d粒子云尘埃漂浮变幻动画效果代码

代码标签: three 三维 粒子 尘埃

下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开


<!DOCTYPE html>
<html lang="en">
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
		<meta charset="utf-8">
		<meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
		<style>
			body {
				font-family: Monospace;
				background-color: #000000;
				margin: 0px;
				overflow: hidden;
			}

			#info {
				color: #ffffff;

				font-family: Monospace;
				font-size: 13px;
				text-align: center;
				font-weight: bold;

				position: absolute;
				top: 0px; width: 100%;
				padding: 5px;
			}

			a {

				color: #0040ff;

			}
		</style>
	</head>
	<body>

	

<script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/three.58.js"></script>
		<script>
		    /*
@author zz85
*/

// Utils for FBO Particles Simulations


THREE.FBOUtils = function( textureWidth, renderer, simulationShader ) {

	// Init RTT stuff
	gl = renderer.getContext();
		
	if( !gl.getExtension( "OES_texture_float" )) {
		alert( "No OES_texture_float support for float textures!" );
		return;
	}

	if( gl.getParameter(gl.MAX_VERTEX_TEXTURE_IMAGE_UNITS) == 0) {
		alert( "No support for vertex shader textures!" );
		return;
	}


	var cameraRTT = new THREE.OrthographicCamera(-textureWidth/2, textureWidth/2, textureWidth/2, -textureWidth/2, -1000000, 1000000);

	cameraRTT.position.z = 100;


	var rtTexturePos = new THREE.WebGLRenderTarget(textureWidth, textureWidth, {
		wrapS:THREE.RepeatWrapping,
		wrapT:THREE.RepeatWrapping,
		minFilter: THREE.NearestFilter,
		magFilter: THREE.NearestFilter,
		format: THREE.RGBAFormat,
		type:THREE.FloatType,
		stencilBuffer: false
	});


	// Shader Stuff

	var texture_cpu_to_gpu_vertex_shader = [

		"varying vec2 vUv;",

		"void main() {",

			"vUv = vec2(uv.x, 1.0 - uv.y);",
			"gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );",

		"} "

	].join("\n");

	var texture_cpu_to_gpu_fragment_shader = [

		"varying vec2 vUv;",
		"uniform sampler2D tPositions;",

		"void main() {",
			"vec4 pos = texture2D( tPositions, vUv );",
			"gl_FragColor = pos;",
		"};"

	].join("\n");



	var cpu_gpu_material = new THREE.ShaderMaterial({

		uniforms: {
			tPositions: { type: "t", value: null }
		},
		vertexShader: texture_cpu_to_gpu_vertex_shader,
		fragmentShader: texture_cpu_to_gpu_fragment_shader

	});


	var sceneRTTPos = new THREE.Scene();

	sceneRTTPos.add(cameraRTT);

	var plane = new THREE.PlaneGeometry(textureWidth, textureWidth);

	quad = new THREE.Mesh(plane, simulationShader);
	quad.position.z = -5000;
	sceneRTTPos.add(quad);

	this.textureWidth = textureWidth;
	this.sceneRTTPos = sceneRTTPos;
	this.cameraRTT = cameraRTT;
	this.renderer = renderer;
	this.cpu_gpu_material = cpu_gpu_material;
	this.simulationShader = simulationShader;


};


THREE.FBOUtils.createTextureFromData = function(width, height, data, options) {
	options || (options = {});

	var texture = new THREE.DataTexture(
		new Float32Array(data),
		width,
		height,
		THREE.RGBAFormat,
		THREE.FloatType,
		null,
		THREE.RepeatWrapping,
		THREE.RepeatWrapping,
		THREE.NearestFilter,
		THREE.NearestFilter
	);

	texture.needsUpdate = true;

	return texture;

};

THREE.FBOUtils.prototype.renderToTexture = function(texture, renderToTexture) {
	this.cpu_gpu_material.uniforms.tPositions.value = texture;
	this.renderer.render(this.sceneRTTPos, this.cameraRTT, renderToTexture, false);

};


THREE.FBOUtils.prototype.pushDataToTexture = function(data, renderToTexture) {

	var texture = THREE.FBOUtils.createTextureFromData( this.textureWidth, this.textureWidth, data );
	
	this.renderToTexture(texture, renderToTexture);

};

THREE.FBOUtils.prototype.simulate = function(target) {
	this.renderer.render(
		this.sceneRTTPos,
		this.cameraRTT,
		target, false);
}

// THREE.FBOUtils.setSimulationShader();
// Perhaps this can be moved outside?

		</script>
<script type="text/javascript" >
    THREE.OrbitControls2 = function ( object ) {

	var scope = this;

	var p.........完整代码请登录后点击上方下载按钮下载查看

网友评论0